r8 Один из байтовых регистров: AL, CL, DL, BL, AH, CH, DH, BH.
r16 Один из однословных регистров: AX, CX, DX, BX, SP, BP, SI, DI.
r32 Один из двухсловных регистров: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI.
rel8 Смещение для перехода в диапазоне от 128 байтов перед концом команды до 127 байтов после конца команды.
rel16, rel32 Смещение для перехода в том же программном сегменте, что и ассемблируемая команда, rel16 относится к командам с атрибутом размера операнда 16 разрядов. rel32 относится к командам с атрибутом размера операнда 32 разряда.
r/m8, r/m16, r/m32 Соответственно одно-, двух- и четырехбайтовый операнд. Представляет собой содержимое либо памяти, либо регистра.
rrr Когда обозначение rrr появляется в колонке двоичного эквивалента кода операции, оно указывает конкретный адресуемый регистр.
000 = AX/EAX 100 = SP/ESP
001 = CX/ECX 101 = BP/EBP
010 = DX/EDX 110 = SI/ESI
011 = BX/EBX 111 = DI/EDI
Sreg Регистр сегмента. Кодирование сегментных регистров в поле reg: ES=0, CS=1, DS=3, FS=4, GS=5.
5.3. Список команд
AAA ASCII-коррекция после сложения.
Команда AAA преобразует содержимое регистра AL в неупакованное десятичное число и сбрасывает его старшие четыре разряда. Она должна всегда следовать за сложением двух неупакованных десятичных операндов в AL. Если возникает перенос, устанавливается флаг CF и происходит инкремент в регистре AH.
AAD ASCII-коррекция регистра AX перед делением.
Команда AAD преобразует число в регистрах AH и AL, подготавливая деления двух неупакованных десятичных операндов так, чтобы полученное в результате деления частное было бы правильным неупакованным десятичным числом. В регистре AH должна находится старшая цифра, в AL - младшая. Команда AAD корректирует число и помещает результат в AL. Регистр AH содержит 0.
AAM ASCII-коррекция в регистре AX после умножения. Команда AAM корректирует результат умножения двух неупа-
кованных десятичных чисел. Эта команда должна всегда следовать за умножением двух десятичных цифр с целью образования правильного десятичного результата. Старшая цифра помещается в регистр AH, младшая - в AL.
AAS ASCII-коррекция регистра AL после вычитания.
Команда AAS преобразует содержимое регистра AL в неупакованную десятичную цифру и заполняет нулями старшие четыре разряда. Эта команда должна всегда следовать за вычитанием одного неупакованного десятичного операнда из другого в AL. Флаг CF устанавливается, а при наличии займа выполняется декремент в регистре AH.
ADC Сложение с переносом целых чисел.
Команда ADC суммирует операнды, прибавляет 1, если установлен флаг CF, и помещает результат по адресу назначения. Если флаг CF сброшен, команда ADC выполняет ту же операцию, что и ADD. Комбинация команды ADD и нескольких команд ADC позволяет складывать числа, содержащие более 32 разрядов.
ADD Сложение целых чисел.
В результате выполнения команды операнд-приемник заменяется суммой обоих операндов (источника и приемника). При наличии переполнения устанавливается флаг CF.
AND Логическое И.
Команда AND используется для сброса битов, указанных пользователем, например бита четности во входном потоке кодов ASCII от терминала. Будучи использована совместно с командой сравнения, команда AND позволяет убедиться, что указанные биты установлены.
ARPL Коррекция в селекторе уровня привилегий инициатора запроса.
Команда ARPL используется системными программами для обеспечения правильности передачи подпрограмме селекторов в качестве параметров. Селекторы не должны требовать больше привилегий, чем разрешено инициатору запроса.
В команде ARPL используются два операнда. первый представляет собой 16-разрядный регистр или слово памяти, содержащее значение селектора. В качестве второго операнда обычно выступает регистр, содержащий значение селектора программного сегмента CS инициатора запроса.
BOUND Проверка индекса массива на выход за границы. Команда BOUND проверяет, лежит ли знаковая величина, на-
ходящаяся в заданном регистре, внутри заданных границ. Если значение этой величины меньше нижней границы или больше верхней, возникает прерывание 5. Каждое из значений верхней и нижней границ может быть словом или двойным словом.
BSF прямое сканирование битов.
Эта команда сканирует слово или двойное слово в поисках бита, равного 1, и заносит в регистр номер первого установленного бита. Сканируемая строка может находиться как в регистре, так и в памяти. Если все слово равно 0, т.е. в нем нет единичных битов, устанавливается флаг ZF. Если единичный бит найден, флаг ZF сбрасывается.
BSR Обратное сканирование битов.
Эта команда действует также как и BSF, но начинает сканирование со старшего бита. Это новая команда, специфичная для МП 80386.
BT Проверка бита.
Команда BT служит для определения того, установлен или нет определенный бит в битовом массиве. Значение проверяемого бита копируется во флаг CF. Это новая команда, специфичная для МП 80386.
BTC Проверка и инверсия бита.
Команда BTC проверяет указанный бит, копирует его в CF и инвертирует найденный бит. Это новая команда, специфичная для МП 80386.
BTR Проверка и сброс бита.
Команда BTR проверяет указанный бит, копирует его в CF и сбрасывает найденный бит. Это новая команда, специфичная для МП 80386.
BTS Проверка и установка бита.
Команда BTS проверяет указанный бит, копирует его в CF и устанавливает в найденном бите значение 1. Это новая команда, специфичная для МП 80386.
CALL Вызов процедуры.
Команда CALL передает управление из одной точки программного сегмента в другую. Эти точки могут располагаться в одном и том же программном сегменте (ближний переход) или принадлежать разным сегментам (дальний переход). Перед собственно передачей управления команда CALL сохраняет в стеке адрес следующей за CALL команды и текущее содержимое регистра EIP.
Команды CALL могут быть относительными, прямыми и косвенными. В косвенной команде абсолютный адрес перехода указывается одним из двух способов: (1) МП извлекает адрес приемника из ячейки памяти, определенной в команде; (2) программа переходит в точку адрес которой указан в одном из регистров общего назначения.
CBW Преобразование байта в слово.
Эта команда расширяет значение бита знака в старшую часть более длинного регистра так, чтобы арифметические операции над содержимым этого регистра давали правильные результаты.
CWD Преобразование слова в двойное слово.
Действие команды аналогично команде CBW.
CLC Сброс флага переноса.
Команда сбрасывает флаг CF.
CLD Сброс флага направления.
Команда сбрасывает флаг DF. Если флаг DF сброшен, автоматическая индексация будет выполняться с инкрементом. Автоматическая индексация используется командами обработки строк.
CLI Сброс флага прерываний.
Если текущий уровень привилегий по крайней мере столь же высок, как уровень привилегий ввода-вывода, команда сбрасывает флаг прерываний.
CLTS Сброс флага переключения задачи в управляющем регистре 0.
Команда сбрасывает флаг TS в CR0. В МП 80386 флаг TS устанавливается каждый раз при переключении задачи. Команда используется в системном программировании. Она представляет собой привилегированную команду, выполняемую только на нулевом уровне привилегий.
CMC Инвертирование флага переноса.
Команда инвертирует флаг переноса CF.
CMP Сравнение.
Команда выполняет вычитание операнда-источника из операнда-приемника. В соответствии с результатом вычитания команда устанавливает состояние флагов, но не изменяет сами операнды.
CMPS Сравнение строковых операндов.
Ассемблер всегда транслирует команду CMPS как одну из CMPSB, CMPSW, CMPSD. Эти команды предназначены только для операций над строками. Они сравнивают по одному элементу каждой строки, причем элементами могут быть байт, слово или двойное слово. Элементы строк адресуются через регистры ESI и EDI. После каждой строковой операции ESI и/или EDI автоматически получают положительное или отрицательное приращение и указывают на следующие элементы строк. Если DF=0, в индексных регистрах осуществляется инкремент, если DF=1 - декремент. В зависимости от результата вычитания строкового элемента по адресу ES:EDI из строкового элемента по адресу DS:ESI устанавливаются флаги результата. Если команда модифицирована с помощью префиксов, МП выполняет сравнение текущего элемента строки с содержимым регистра EAX или его части (AL или AX).
CMPSB Сравнение строковых байтов.
CMPSW Сравнение строковых слов.
CMPSD Сравнение строковых двойных слов.
CDQ Преобразование двойного слова в четверное.
CWDE Преобразование слова в двойное слово с расширением.
DAA Десятичная коррекция в регистре AL после сложения. Команда корректирует результат сложения двух правильных
упакованных десятичных операндов в регистре AL. Эта команда должна всегда следовать за сложением двух пар упакованных десятичных чисел, чтобы получить в результате пару правильных упакованных десятичных цифр.
DAS Десятичная коррекция в регистре AL после вычитания. Команда DAS аналогична команде DAA за исключением, что
коррекция выполняется путем вычитания 6 из полубайтов регистра AL вместо прибавления 6.
DEC Декремент на 1.
Команда вычитает 1 из операнда приемника. Состояние флага CF не изменяется.
DIV Деление целых чисел без знака.
Команда выполняет деление числа без знака в аккумуляторе на операнд-источник. Размер делимого в битах в два раза больше размера делителя. Если делитель равен 0, или если частное не помещается в назначенный регистр, возбуждается прерывание 0.
ENTER Создание кадра стека для параметров процедуры Команда создает кадр стека, который можно использовать
для реализации правил языков высокого уровня с блочной структурой. Команда LEAVE в конце процедуры выполняет обратные действия.
Команда имеет два параметра. Первый определяет число байтов динамической памяти, выделяемых в стеке для вызванной программы. Второй параметр соответствует лексическому уровню вложенности программы (от 0 до 31). Этот уровень определяет, сколько наборов указателей кадра стека копируются центральным процессором в новый кадр стека из текущего кадра.