- •Атрибуты размеров операнда и адреса, а также формат команды в процессорах семейства х86
- •1. Атрибуты размеров операнда и адреса.
- •2. Формат и кодирование команды.
- •Микропроцессоров семейства x86
- •I. Команды пересылок данных
- •II. Команды обработки данных
- •2. Команды логических операций
- •3. Команды сдвиговых операций
- •Команды битовых операций
- •IV. Команды операций со стеком
- •V. Команды управления программой
- •VI. Команды управления процессором
- •VII. Команды, используемые в системном программном обеспечении.
Микропроцессоров семейства x86
(Все команды, оперирующие с 32 разрядными операндами и адресами, используются только на процессорах i386+).
Условные обозначения, используемые при описании системы команд.
В столбце “КОП”
/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 |
2 3 8 9 4 5 0 1 A B |
По признакам обработки чисел со знаками |
L/NGE NL/GE LE/NG NLE/G |
меньше/не больше и не равно не меньше/больше или равно меньше или равно/не больше
не меньше и не равно/больше |
SF OF SF = OF (ZF=1) (SFOF) (ZF=0)& (SF=OF) |
C D
E
F |
По признакам обработки чисел без знака. |
B/NAE NB/AE BE/NA NBE/A |
ниже/не выше и не равно не ниже/выше или равно ниже или равно/не выше не ниже и не равно/выше |
CF = 1 CF = 0 CFZF=1CFZF=0 |
2 3 6 7 |
Таблица П.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 |
0 |
0 |
н |
+ |
+ |
+ |
SHL, SHR (на один разряд) |
+ |
+ |
н |
+ |
+ |
+ |
SHL,SHLD,SHR,SHRD (переменная разрядность) |
н |
+ |
н |
+ |
+ |
+ |
SAR |
0 |
+ |
н |
+ |
+ |
+ |
ROL, ROR, RCL, RCR (на один разряд) |
+ |
+ |
- |
- |
- |
- |
ROL, ROR, RCL, RCR (переменная разрядность) |
н |
+ |
- |
- |
- |
- |
+ установка флага по результату операции − сохранение ранее установленного флага н - неопределенное значение флага 0 - установка нулевого значения флага |
||||||
