Читайте также: |
|
Напомним, что абсолютный (полный, физический) адрес (Аабс) в общем случае является суммой адресов сегмента (Асегм) и исполнительного адреса (Ансп), в свою очередь, формируемого как сумма максимум трех адресов: смещения (Асегм), базы (Абазы) и индекса (Аинд), то есть:
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).
― Основные команды языка ассемблер
По назначению можно выделить команды (в скобках приводятся примеры мнемонических кодов операций команд ассемблера ПК типа IBM PC):
- выполнения арифметических операций (ADD и ADC – сложения и сложения с переносом, SUB и SBB – вычитания и вычитания с заемом, MUL и IMUL – умножения без знака и со знаком, DIV и IDIV – деления без знака и со знаком, CMP – сравнения и т.д.);
- выполнения логических операций (OR, AND, NOT, XOR, TEST и т.д.);
- пересылки данных (MOV – переслать, XCHG – обменять, IN – ввести в микропроцессор, OUT – вывести из микропроцессора и т.д.);
- передачи управления (ветвления программы: JMP – безусловного перехода, CALL – вызова процедуры, RET – возврата из процедуры, J* - условного прерывания и т.д.);
- обработки строк символов (MOVS – пересылки, CVPS – сравнения, LODS – загрузки, SCAS – сканирования, REP – повторения и т.д.);
- прерывания работы программы (INT – программное прерывания, INTO – условного прерывания при переполнении, IRET – возврата из прерывания);
- управления микропроцессором (ST* и CL* - установки и сброса флагов, HLT – останова, WAIT – ожидания, ESC – выхода, NOP – холостого хода и т.д.).
С полным списком команд ассемблера можно познакомиться в работах [1, 3, 11].
Дата добавления: 2015-12-07; просмотров: 55 | Нарушение авторских прав