Создание одно- и многосегментных программ - Assembler
Формулировка задачи:
Ребят помогите пожалуйста, думаю уже которую неделю, нужно разработать одно- и многосегментную программы. Суть заключается в следующем:
Написать программу на ассемблере, осуществляющую ввод последовательности символов с клавиатуры, обработку кодов символов в соответствии с заданием и вывод на экран результирующей последовательности
Программа должна включать в себя:
• ввод последовательности символов с клавиатуры (в результате ввода формируется статический массив кодов символов, максимальное число вводимых символов задается студентом самостоятельно);
• обработку кодов символов в соответствии с заданием (вариант задания, B. Перестановка a(n),a(n-1),a(n-2),...,a(n/2),a(1),a(2),...,a(n/2-1).);
• вывод на экран результирующей последовательности
Программа должна быть реализована в 2-х вариантах:
а) односегментная (.com); б) многосегментная (.exe).
ЗАДАНИЕ 2: Написать программу на Ассемблере, осуществляющую вывод на экран даты создания BIOS (Aф=0FFFF5h) прямой записью в видеопамять (Аф=B8000h). Использовать точечные директивы (модель памяти, директивы сегментации).
пожалуйста хотя бы объясните, просто эту тему пропустил, никак въехать не могу, знаю что это самая мелочь, но всё равно.
Решение задачи: «Создание одно- и многосегментных программ»
textual
Листинг программы
mov cx, 8 //длина строки mov si,0200 //адрес начального массива mov di,0208 //адрес конечного массива push si //читаем байт из исходного массива add si,cx //добавляем в si длину строки dec si //указатель на конец si shr cx,1 //сдвигаем на 1 push cx //делим по полам cx mov al,[si] //сравниваем si mov [di],al //сравниваем di dec si //указатель на конец начального массива inc di //записываем в конечный массив loop 0110 //переходим на строку 0110 pop cx //достаем cx pop si //достаем si mov al,[si] //сравниваем si mov [di],al //сравниваем di inc si //указатель на начало массива inc di //записываем в конечный массив loop 011A //переходим на строку 011A
Объяснение кода листинга программы
Список действий:
- mov cx, 8 - устанавливаем счётчик длины строки в 8
- mov si,0200 - устанавливаем начальный адрес массива в 0200
- mov di,0208 - устанавливаем конечный адрес массива в 0208
- push si - читаем байт из исходного массива и добавляем к нему длину строки
- add si, cx - смещаем указатель на конец строки
- dec si - уменьшаем счётчик на единицу
- shr cx,1 - сдвигаем счётчик на единицу вправо
- push cx - делим счётчик пополам
- mov al,[si] - сравниваем начальный байт строки
- mov [di],al - записываем начальный байт в конечный массив
- dec si - уменьшаем счётчик на единицу
- inc di - увеличиваем указатель на конечный массив на единицу
- loop 0110 - переходим к строке 0110
- pop cx - достаём счётчик из стека
- pop si - достаём указатель из стека
- mov al,[si] - сравниваем байт из начального массива
- mov [di],al - записываем байт из начального массива в конечный массив
- inc si - увеличиваем счётчик на единицу
- inc di - увеличиваем указатель на конечный массив на единицу
- loop 011A - переходим к строке 011A
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д