- •Программное управление — основа автоматизации вычислительного процесса
- •2 Состав машинных команд
- •3 Режимы работы компьютеров
- •3.1 Однопрограммные и многопрограммные режимы
- •I.Система прерываний программ в пк
- •3.2 Адресация регистров и ячеек памяти в пк
- •3.3 Относительная адресация
- •II.Стековая адресация
- •3.4 Элементы программирования на языке ассемблер
- •4 Основные компоненты языка ассемблер
- •4.1Алфавит языка
- •4.2 Константы (числа и строки)
- •4.3 Директивы (псевдооператоры)
- •4.4 Модификаторы
- •4.5 Адресация регистров и ячеек памяти в ассемблере
- •4.6 Непосредственная адресация
- •4.7 Прямая адресация регистров мпп
- •4.8 Адресация ячеек оп
- •Основные команды языка ассемблер
- •A.Команды пересылки данных
- •I.Команды сложения, вычитания и сравнения
- •1.Команды приращения
- •A.Команды умножения
- •I.Команды безусловной передачи данных
- •4.9 Команды перехода к подпрограмме и выхода из подпрограммы
- •4.10 Команда перехода к подпрограмме: call opr
- •4.11 Команда выхода из подпрограммы
- •4.12 Команды условной передачи управления
- •4.13 Команды условной передачи управления для беззнаковых данных
- •4.14 Команды условной передачи управления для знаковых данных
- •4.15 Команды условной передачи управления для прочих проверок
- •4.16 Команды управления циклами
- •4.17 Команды прерывания
- •4.18Основные директивы ассемблера
- •4.19 Директивы определения идентификаторов
- •4.20 Директивы определения данных
- •Директивы определения сегментов и процедур
- •4.21 Директивы управления трансляцией
- •5 Краткие сведения о программировании процедур работы с устройствами ввода-вывода
- •5.1 Программирование работы с дисплеем
- •5.2 Видеооперации с прерыванием 10н bios
- •5.3 Видеооперации с прерыванием 21н dos
- •5.4 Программирование работы с клавиатурой
- •5.5 Программирование работы с принтерами
- •5.6 Печатающие устройства параллельного типа
- •5.7 Печатающее устройство последовательного типа
- •5.8 Программирование работы с файлами
- •5.9 Прерывания, используемые при работе с файлами на дисках
- •5.10 Некоторые аспекты создания исполняемых программ
- •5.11 Процедуры формирования программы
- •5.12 Структура исходной программы на языке ассемблера для получения исполняемой программы .Ехе
- •5.13 Основные сведения о листинге и его структуре
- •5.14 Особенности структуры машинных команд
- •5.14 Последовательность работы пк при выполнении программы
- •6 Краткие сведения об отладчике программ debug
- •6.1 Основные команды отладчика debug
4.5 Адресация регистров и ячеек памяти в ассемблере
При программировании на языке ассемблер используются неявный, непосредственный, прямой и косвенный методы адресации; причем для адресации регистров в МПП — только прямой, а для адресации ячеек ОП — прямой, косвенный и смешанный непосредственный методы. Рассмотрим их на примере адресации второго операнда в команде MOV (переслать).
4.6 Непосредственная адресация
Величина операнда i (impendence) непосредственно указывается в поле команды и может быть задана числом в десятичной, двоичной и шестнадцатеричной системах счисления (последний символ числа должен быть, соответственно, D (или никакой), В и Н) или идентификатором, а также простым выражением, в котором указанные элементы связаны символами арифметических операций: +, -, * и /. Идентификатор (с соответствующим именем, например, const) должен быть предварительно задан в программе директивой типа: const equ 1024 или const = 1024.
Примеры непосредственной адресации:
MOV AX.1024D; MOV AL.64; MOV ВХДАН; MOV CH,1011В; MOV AX.const; MOV AX,156*10H/2
и т.п.
Следует помнить, что диапазон чисел, посылаемых в регистры, должен быть ограничен вместимостью последнего: в 1-байтовый регистр (АН, AL, ВН и т. д.) можно посылать числа в диапазоне от 0 до +255 (целое без знака) или от -128 до +127 (целое со знаком); в 2-байтовый регистр (АХ, ВХ, СХ и т. д.) — от 0 до +65535 (целое без знака) или от -32768 до +32767 (целое со знаком).
4.7 Прямая адресация регистров мпп
В качестве адреса операнда указывается имя регистра (его символьное обозначение: АХ, AL, АН, ВХ, BL и т. д.). Примеры:
MOV AX,BX
MOV BX,DX
MOV AH,BL
Необходимо следить, чтобы разрядность второго операнда (его регистра) соответствовала разрядности принимающего регистра.
4.8 Адресация ячеек оп
Напомним, что абсолютный (полный, физический) адрес (Аабс) в общем случае является суммой адресов сегмента (Асегм) и исполнительного адреса (Ансп), в свою очередь, формируемого как сумма максимум трех адресов: смещения (Асегм), базы (Абазы) и индекса (Аинд), то есть:
Aабс = Асегм + Аисп = Асегм + Асмещ [+Aбазы][+Aинд].
Прямая адресация ячеек ОП имеет несколько вариантов:
прямая обычная:
MOV AX, pole
где polе — символьное имя переменной X, для которой в ОП были предварительно отведены (или зарезервированы) ячейки памяти директивами типа:
pole DB X
pole DW X
и т. п.
В команде в качестве Аисп берется Асмещ первой ячейки поля, отведенной для переменной X;
прямая с индексированием:
MOV AX..pole[SI]
В команде в качестве Aисп берется Аисп = Асмещ + Аинд,Аинд находится в регистре SI);
прямая с базированием:
MOV AX,pole[BX]
Аисп = Асмещ + Абазы,Абазы находится в регистре ВХ;
прямая с индексированием и базированием:
MOV AX,pole[SI+BX]
Аисп = Асмещ + Аинд + Абазы,
Существует два варианта косвенной адресации ячеек ОП:
косвенная обычная:
MOV AX,[BX]
Исполнительный адрес берется в регистре ВХ, то есть Aисп = [ВХ];
косвенная с индексированием:
MOV AX,[BX+SI]
Исполнительный адрес берется в виде суммы адресов, находящихся в регистрах BX и SI, Aисп = [BX] + [SI].
Смешанная непосредственная адресация ячеек ОП имеет несколько вариантов:
непосредственная обычная:
MOV AX,offset pole
В качестве операнда берется непосредственно смещение адреса первой ячейки поля памяти, отведенного для переменной X; offset указывает, что берется не значение переменной X, а именно смещение ее адреса;
непосредственная с индексированием:
MOV AX,[SI+const]
В качестве операнда берется сумма значения, хранящегося в регистре SI, и величины const: const может быть задано числом, идентификатором, смещением адреса переменной (offset pole) или их комбинацией — простым выражением;
непосредственная с базированием:
MOV AX,[BX+const]
Аналогично предыдущему варианту, но вместо регистра SI берется BX;
непосредственная с базированием и индексированием:
MOV AX,pole[SI+BX+const]
Аналогично предыдущему, но вместо содержимого одного регистра берется сумма содержимого регистров BX и SL.
Почти все команды ассемблера за редким исключением (исключения: POP, PUSH, CALL, RET, IRET) в качестве Асегм обычно используют по умолчанию адрес, находящийся в регистре DS (в исполняемых программах типа .com – регистре CS); но регистр сегмента может быть задан и явно, например:
MOV AX, EX:pole: MOV AX,SS:[SI]
и т.п.
Последняя команда, в часности, позволяет реализовать прямой доступ к ячейке стековой памяти, стек при этом не изменяется.
Команды POP, PUSH, CALL, RET, IRET используют сегмент стека (регистр SS).
