Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ФОРМАТ КОМАНД.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
616.45 Кб
Скачать

Микропроцессоров семейства 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) (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

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 - установка нулевого значения флага