Адресация по базе с индексированием
При адресации по базе с индексированием исполнительный адрес вычисляется как сумма значений базового регистра, индексного регистра и, возможно, сдвига.
Так как в этом режиме адресации складывается два отдельных смещения, то он удобен при адресации двумерных массивов, когда базовый регистр содержит начальный адрес массива, а значения сдвига и индексного регистра суть смещения по строке и столбцу.
Предположим, например, что Ваша ЭВМ следит за шестью предохранительными клапанами на химическом предприятии. Она считывает их состояния каждые полчаса и запоминает в ячейках памяти. За неделю эти считывания образуют массив, состоящий из 336 блоков (48 считываний в течение семи дней) по шесть элементов в каждом, а всего — 2016 значений.
Если начальный адрес массива загружен в регистр ВХ, сдвиг блока (номер считывания, умноженный на 12) - в регистре DI, а номер клапана задан в переменной VALVE, то команда
MOV AX ,VALVE[BX][DI ]
загрузит требуемое считывание состояния клапана в регистр АХ. На рис. 5 изображен процесс извлечения результата третьего считывания (с номером 2) для клапана 4 из массива, у которого смещение в сегменте данных равно 100Н.
Приведем несколько допустимых форматов операндов, адресуемых по базе с индексированием:
MOVE AX,[BX+2+DI]
MOVE AX,[DI+BX+2]
MOVE AX,[BX+2][DI]
MOVE AX,[BX][DI+2]
Команды пересылки данных
Мнемоника | Формат | Пояснение |
Команды общего назначения | ||
MOV | MOV приемник, источник | Переслать значение |
PUSH | PUSH источник | Поместить в стек |
POP | POP приемник | Извлечь из стека |
XCHG | XCHG приемник, источник | Обменять значения |
XLAT | XLAT таблица | Загрузить в AL байт из таблицы |
Команды ввода-вывода | ||
IN | IN аккумулятор, порт | Читать из порта |
OUT | OUT порт, аккумулятор | Записать в порт |
Команды пересылки адреса | ||
LEA | LEA регистр 16, память 16 | Загрузить исполнительный адрес |
LDS | LDS регистр 16, память32 | Загрузить в DS:регистр16 полный адрес |
LES | LES регистр 16, память32 | Загрузить в ES:регистр16 полный адрес |
Команды пересылки флагов | ||
LAHF | LAHF | Загрузить флаги в АН |
SAHF | SAHF | Установить флаги из АН |
PUSHF | PUSHF | Поместить флаги в стек |
POPF | POPF | Извлечь флаги из стека |
Арифметические команды
Мнемоника | Формат | Комментарий |
Команды сложения | ||
ADD | ADD приемник, источник | Сложить |
ADC | ADC приемник, источник | Сложить, добавить перенос |
ААА | ААА | Скорректировать сложение для таблицы ASCII |
DAA | DAA | Скорректировать сложение для двоично-десятичных чисел |
INC | INC приемник | Увеличить на единицу |
Команды вычитания | ||
SUB | SUB приемник, источник | Вычесть |
SBB | SBB приемник, источник | Вычесть с заемом |
AAS | AAS | Скорректировать вычитание для таблицы ASCII |
DAS | DAS | Скорректировать вычитание для двоично-десятичных чисел |
DEC | DEC приемник | Уменьшить на единицу |
NEG | NEG приемник | Обратить знак |
СМР | СМР приемник, источник | Сравнить |
Команды умножения | ||
MUL | MUL источник | Умножить без знака |
IMUL | IMUL источник | Умножить со знаком |
AАМ | ААМ | Скорректировать умножение для таблицы ASCII |
Команды деления | ||
DIV | DIV источник | Делить без знака |
IDIV | IDIV источник | Делить со знаком |
AAD | AAD | Скорректировать деление для таблицы ASCII |
Команды расширения знака | ||
CBW | CBW | Преобразовать байт в слово |
CWD | CWD | Преобразовать слово в двойное слово |
Их большое количество, подробнее на сайте: http://www.hardline.ru/selfteachers/Info/Programming/!TurboPascal/gl12/gl12_4.html
Команды условного и безусловного перехода
Безусловные переходы
Безусловный переход — это переход, который выполняется всегда. Безусловный переход осуществляется с помощью команды JMP. У этой команды один операнд, который может быть непосредственным адресом (меткой), регистром или ячейкой памяти, содержащей адрес. Существуют также «дальние» переходы — между сегментами, однако здесь мы их рассматривать не будем. Примеры безусловных переходов:
jmp metka ;Переход на метку jmp bx ;Переход по адресу в BX jmp word[bx] ;Переход по адресу, содержащемуся в памяти по адресу в BXУсловные переходы
Все команды условных переходов приведены в таблице:
Команда | Переход, если | Условие перехода |
JZ/JE | нуль или равно | ZF=1 |
JNZ/JNE | не нуль или не равно | ZF=0 |
JC/JNAE/JB | есть переполнение/не выше и не равно/ниже | CF=1 |
JNC/JAE/JNB | нет переполнения/выше или равно/не ниже | CF=0 |
JP | число единичных бит чётное | PF=1 |
JNP | число единичных бит нечётное | PF=0 |
JS | знак равен 1 | SF=1 |
JNS | знак равен 0 | SF=0 |
JO | есть переполнение | OF=1 |
JNO | нет переполнения | OF=0 |
JA/JNBE | выше/не ниже и не равно | CF=0 и ZF=0 |
JNA/JBE | не выше/ниже или равно | CF=1 или ZF=1 |
JG/JNLE | больше/не меньше и не равно | ZF=0 и SF=OF |
JGE/JNL | больше или равно/не меньше | SF=OF |
JL/JNGE | меньше/не больше и не равно | SF≠OF |
JLE/JNG | меньше или равно/не больше | ZF=1 или SF≠OF |
JCXZ | содержимое CX равно нулю | CX=0 |
http://asmworld.ru/uchebnyj-kurs/016-uslovnye-i-bezuslovnye-perexody/