Адресация по базе с индексированием

При адресации по базе с индексированием исполнительный адрес вычисляется как сумма значений базового регистра, индексного регистра и, возможно, сдвига.

Так как в этом режиме адресации складывается два отдельных смещения, то он удобен при адресации двумерных массивов, когда базовый регистр содержит начальный адрес массива, а значения сдвига и индексного регистра суть смещения по строке и столбцу.

Предположим, например, что Ваша ЭВМ следит за шестью предохранительными клапанами на химическом предприятии. Она считывает их состояния каждые полчаса и запоминает в ячейках памяти. За неделю эти считывания образуют массив, состоящий из 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/

Наши рекомендации