Assembler - язык неограниченных возможностей
0e1cc9b4

Значения полей кода команды


В кодах некоторых команд мы будем встречать специальные биты и группы бит, которые обозначим w, s, d, reg, sreg и cond:

w = 0, если команда работает с байтами;

w = 1, если команда работает со словами или двойными словами;

s = 0, если непосредственный операнд указан полностью;

s = 1, если непосредственный операнд — младший байт большего операнда и должен рассматриваться как число со знаком;

d = 0, если код источника находится в поле R/O, а приемника — в R/M;

d = 1, если код источника находится в поле R/M, а приемника — в R/O.

Запись 10dw будет означать, что код команды — 000100dw.

Поле reg определяет используемый регистр и имеет длину 3 бита:

000 — AL/AX/EAX/ST(0)/MM0

001 — CL/CX/ECX/ST(1)/MM1

010 — DL/DX/EDX/ST(2)/MM2

011 — BL/BX/EBX/ST(3)/MM3



100 — AH/SP/ESP/ST(4)/MM4

101 — CH/BP/EBP/ST(5)/MM5

110 — DH/SI/ESI/ST(6)/MM6

111 — BH/DI/EDI/ST(7)/MM7

Запись C8r будет означать 11001reg.

Поле sreg определяет используемый сегментный регистр:

000 — ES

001 — CS

010 — SS

011 — DS

100 — FS

110 — GS

Поле cond определяет условие для команд Jcc, CMOVcc, SETcc, FCMOVcc.

Его значения для разных команд:

0000 — О

0001 — NO

0010 — C/B/NAE

0011 — NC/NB/AE

0100 — E/Z

0101 — NE/NZ

0110 — BE/NA

0111 — NBE/A

1000 — S

1001 — NS

1010 — Р/РЕ

1011 — NP/PO

1100 — L/NGE

1101 — NL/GE

1110 — LE/NG

1111 — LNE/G

Запись типа 4сс будет означать 0100cond.



Содержание раздела