В столбце “КОП”
/r | - показывает, что Mod R/M байт содержит и регистровый операнд reg и операнд r/m. |
/цифра | - цифра (от 0 до 7 включительно) говорит о том, что Mod R/M байт команды использует только r/m (регистр или память) операнд. Поле reg содержит цифру, используемую для расширения кода операции. |
cb, cw, cd, cp | - однобайтная (cb), двухбайтная (cw), четырехбайтная (cd) или шестибайтная (cp) величина, следующая за кодом операции и определяющая значение смещения в кодовом сегменте или новое значение для регистра кодового сегмента. |
ib, iw, id | - однобайтный (ib), двухбайтный (iw) или четырехбайтный (id) непосредственный операнд, следующий за кодом операции, Mod R/M байтом или SIB байтом. Код операции определяет, является ли операнд знаковой величиной. В словах или двойных словах первым указывается младший байт. |
+rb, +rw, rd | - код регистра (от 0 до 7) прибавляемый к байту, приведенному слева от знака плюс, для образования однобайтного кода. В табл. П.3.1 приведены значения этих кодов |
Таблица П3.1
rb | rw | rd |
AL = 0 | AX = 0 | EAX = 0 |
CL = 1 | CX = 1 | ECX = 1 |
DL = 2 | DX = 2 | EDX = 2 |
BL = 3 | BX = 3 | EBX = 3 |
AH = 4 | SP = 4 | ESP = 4 |
CH = 5 | BP = 5 | EBP = 5 |
DH = 6 | SI = 6 | ESI = 6 |
BH = 7 | DI = 7 | EDI = 7 |
В столбце “Команда”
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. |
r/m8 | - однобайтный операнд, содержащийся в однобайтном регистре (AL, CL, DL, BL, AH, CH, DH, BH) или в байтовой запоминающей ячейке памяти. |
r/m16 | - операнд длиной в слово из двухбайтного регистра (AX, CX, DX, BX, SP, BP, SI, DI) или двух соседних байтовых запоминающих ячеек памяти. (Содержимое памяти берется по эффективному адресу младшего байта). |
r/m32 | - операнд длиной в два слова из четырехбайтовых регистров (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI) или из четырех соседних ячеек памяти по адресу младшего байта. |
sr | - сегментный регистр. |
SAL | - знаковое расширение регистра. |
m | - 16 или 32 битный операнд в памяти. |
m8 | - байт памяти адресуемый DS:SI(ESI) или ES:DI(EDI) (используется только строковыми командами). |
m16 | - слово памяти адресуемое DS:SI(ESI) или ES:DI(EDI) (используется только строковыми командами). |
m32 | - двойное слово памяти адресуемое DS:SI(ESI) или ES:DI(EDI) (используется только строковыми командами). |
m16:16, m16:32 | - операнд в памяти, содержащий дальний указатель из двух чисел: селектора сегмента и смещения в сегменте. |
moffs8, moffs16, moffs32 | - простая переменная в памяти (смещение в памяти) типа BYTE, WORD или DWORD, используемая некоторыми вариантами команды MOV. Фактический адрес получается при помощи простого смещения относительно базы сегмента. Mod R/M байт в этой команде не используется. Число, указанное в moffs, определяет его размер, который устанавливается атрибутом размера адреса команды. |
temp | - регистр временного хранения данных, программно не доступный. |
imm8 | - непосредственное знаковое значение длиной в байт. В командах, где imm8 участвуют с операндом длиной в слово или двойное слово, непосредственное значение imm8 расширяется в сторону старших разрядов, повторением старшего (знакового) бита. |
imm16 | - непосредственное знаковое значение длиной в слово, применяемое для команд с атрибутом размера операнда, равного 16 бит. |
imm32 | - непосредственное знаковое значение длиной в двойное слово, применяемое для команд с атрибутом размера операнда, равного 32 битам. |
simm8 | - знаковое расширение байта до 16 или 32 битового операнда. |
SAL (SAX) | - знаковое расширение содержимого регистра AL (AX). |
rel8 | - относительный адрес в диапазоне от – 128 байт до + 127 байт от конца команды. |
rel16 (rel32) | - относительный адрес внутри того же кодового сегмента, в котором команда ассемблировалась. rel16 применима к командам с атрибутом 16 битного размера операнда; rel32 применима к команде с атрибутом 32 битного размера операнда. |
m16&16, m16&32, m32&32 | - операнд в памяти состоящий из пар элементов данных, размеры которых указаны слева и справа от знака амперсанда. Для команд с такими операндами разрешены все режимы адресации. (Например, в команде BOUND используются для хранения верхней и нижней границ индекса массива). m16&32 используются командами LIDT и LGDT для обеспечения загрузки значения поля предела (слово) и значения поля базы (двойное слово), а также соответствующих регистров таблицы дескрипторов прерываний и глобальной таблицы дескрипторов. |
16 (32) | - 16 или 32 битовый операнд. Размер операнда определяется битом D в дескрипторе кодового сегмента. |
SP (ESP) | - 16 или 32 разрядный адрес вершины стека. Размер адреса определяется битом В, в дескрипторе стекового сегмента. |
В столбце “Действие команды”
[SI(ESI)], [DI(EDI)] | - косвенная адресация через индексные регистры SI(ESI) и DI(EDI). |
temp | - регистр временного хранения данных, программно недоступный. |
JCOND (Jump Condition) | - команда, выполняющая передачу управления по адресу, определяемому операндом, только при выполнении условия COND. Условия переходов и их символьные представления приведены в таблице П.3.2. В данной таблице, термины “меньше” и “больше” относятся для сравнения знаковых целых чисел. Термины “выше” и “ниже”, используются при сравнении целых чисел без знака. |
cond | - шестнадцатеричный код условия COND. |
mem N | - адрес младшего байта адреса (CS:IP) в R-режиме или дескриптора прерывания в IDTR в P-режиме. |
EA (Effective Address) | - эффективный адрес. |
MSW (Machine Status Word) | - слово состояния машины (младшие два байта управляющего регистра CR0). |
SMM (System Managеment Mode) | - режим управления системой. |
TR (Task Registers) | - регистр задачи. |
Таблица П3.2
Условия переходов в системе команд процессоров семейства iAPX86
Условия перехода | Мнемо-код COND | Переход, если: | Условие | Код COND |
По флагу | C NC S NS E/Z NE/NZ O NO P/PE NP/PO | есть перенос нет переноса отрицательный результат положительный результат операнды равны/нулевой результат операнды не равны/ненулевой результат есть переполнение нет переполнения четно нечетно | CF = 1 CF = 0 SF = 1 SF = 0 ZF = 1 ZF = 0 OF = 1 OF = 0 PF = 1 PF = 0 | A B |
По признакам обработки чисел со знаками | L/NGE NL/GE LE/NG NLE/G | меньше/не больше и не равно не меньше/больше или равно меньше или равно/не больше не меньше и не равно/больше | SF ¹ OF SF = OF (ZF=1)Ú (SF¹OF) (ZF=0)& (SF=OF) | C D E F |
По признакам обработки чисел без знака. | B/NAE NB/AE BE/NA NBE/A | ниже/не выше и не равно не ниже/выше или равно ниже или равно/не выше не ниже и не равно/выше | CF = 1 CF = 0 CFÚZF=1CFÚZF=0 |
Таблица П.3.3
Установка флагов при выполнении команд арифметических,
логических и сдвиговых операций
Мнемокоды команд | ФЛАГИ | |||||
OF | CF | AF | SF | ZF | PF | |
ADD,ADC,XADD,SUB,SBB,CMP,CMPXCHG,NEG | + | + | + | + | + | + |
INC, DEC | + | - | + | + | + | + |
MUL, IMUL | + | + | н | н | н | н |
DIV, IDIV | н | н | н | н | н | н |
DAA, AAS | н | + | + | + | + | + |
AAA, AAS | н | + | + | н | н | н |
AAM,AAD | н | н | н | + | + | + |
AND, OR, XOR,TEST | н | + | + | + | ||
SHL, SHR (на один разряд) | + | + | н | + | + | + |
SHL,SHLD,SHR,SHRD (переменная разрядность) | н | + | н | + | + | + |
SAR | + | н | + | + | + | |
ROL, ROR, RCL, RCR (на один разряд) | + | + | - | - | - | - |
ROL, ROR, RCL, RCR (переменная разрядность) | н | + | - | - | - | - |
+ установка флага по результату операции − сохранение ранее установленного флага н - неопределенное значение флага 0 - установка нулевого значения флага |