- •Основные непривилегированные команды процессоров Intel 80х86
- •Команды пересылки и загрузки
- •Целочисленная арифметика
- •Логические команды
- •Команды побитовой обработки
- •Команды передачи управления
- •Команды обработки строк
- •Команды двоично-десятичной арифметики
- •Команды работы с флагами, команды управления процессором
Основные непривилегированные команды процессоров Intel 80х86
Условные обозначения:
P1, P2, P3 – операнды команд (чтобы определить их количество).
В столбце «комбинации операндов» даны их допустимые сочетания. В большинстве случаев разрядность операндов должна совпадать или соответствовать друг другу.
r – регистр общего назначения 8-,16- или 32-разрядный: EAX,AX,AL,AH,
EBX,BX,BL,BH, ECX,CX,CL,CH, EDX,DX,DL,DH, ESI,SI, EDI,DI, ESP,SP, EBP,BP
sr – сегментный регистр: CS, SS, DS, ES, FS, GS
const – числовая константа
m – операнд в памяти (адресация прямая или косвенная)
Команды пересылки и загрузки
Команда |
Комбинации операндов P1,P2,P3 |
Действие |
Какие флаги меняет |
Какие процессоры |
Расшифровка мнемоники команды |
MOV P1,P2 |
r8/16/32, r8/16/32 r8/16/32, const r8/16/32,m8/16/32 m8/16/32, r8/16/32 m8/16/32, const sr, r16 sr, m16 |
P1P2 |
– |
все |
Move |
MOVZX P1,P2 |
r16/32, r8/16/32 r16/32, m8/16/32 |
P1 (00..0)P2 |
– |
386 > |
Move with Zero extension |
MOVSX P1,P2 |
r16/32, r8/16/32 r16/32, m8/16/32 |
P1 (ss..s)P2 s – бит знака P2 |
– |
386 > |
Move with Sign extension |
XCHG P1,P2 |
r8/16/32, r8/16/32 r8/16/32,m8/16/32 |
P1↔P2 |
– |
все |
Exchange |
BSWAP P1 |
r32 |
P1[7:0]↔P1[31:24] P1[15:8]↔P1[23:16] |
– |
486 > |
Byte Swap |
CBW |
|
AX (ss..s)AL s – бит знака AL |
– |
все |
Convert Byte to Word |
CWD |
|
DX.AX (ss..s)AX s – бит знака AХ |
– |
все |
Convert Word to DoubleWord |
CWDE |
|
EAX (ss..s)AX s – бит знака AX |
– |
386 > |
Convert Word to Dword Extended |
CDQ |
|
EDX.EAX (s..s)EAX s – бит знака EAX |
– |
386 > |
Convert Dword to Quadra word |
PUSH P1 |
r16/32 m16/32 const sr |
добавить P1 в стек: use16: (E)SP (E)SP–2 use32: (E)SP (E)SP–4 SS:[(E)SP] P1 |
– |
все |
Push (англ. "толкать") |
POP P1 |
r16/32 m16/32 sr (кроме CS) |
извлечь из стека в Р1: P1 SS:[(E)SP] use16: (E)SP (E)SP+2 use32: (E)SP (E)SP+4 |
– |
все |
Pop (англ. жарг. "извлекать") |
PUSHA |
|
добавить в стек: AX,CX, DX,BX,SP,BP,SI,DI |
– |
все |
Push All general registers |
POPA |
|
извлечь из стека: DI,SI, BP,SP,BX,DX,CX,AX |
– |
все |
Pop All general registers |
PUSHAD |
|
добавить в стек: EAX,ECX, EDX,EBX,ESP,EBP,ESI,EDI |
– |
386 > |
Push All general Double word registers |
POPAD |
|
извлечь из стека: EDI,ESI, EBP,ESP,EBX,EDX,ECX,EAX |
– |
386 > |
Pop All general Double word registers |
LEA P1,P2 |
r16/32, m |
P1 offset(P2) |
– |
все |
Load Effective Address |
LSS P1,P2 LDS P1,P2 LES P1,P2 LFS P1,P2 LGS P1,P2 |
r16, m32 |
P1 P2[15:0], SS/DS/ES/FS/GS P2[31:16] |
– |
все все все 386 > 386 > |
Load Pointer into SS Load Pointer into DS Load Pointer into ES Load Pointer into FS Load Pointer into GS |
r32, m48 |
P1 P2[31:0], SS/DS/ES/FS/GS P2[47:32] | ||||
IN P1,P2 |
AL/AX/EAX, const AL/AX/EAX, DX |
чтение из порта P1 port[P2] |
– |
все |
IN |
OUT P1,P2 |
const, AL/AX/EAX DX, AL/AX/EAX |
запись в порт port[P1] P2 |
– |
все |
OUT |
XLAT XLATB |
|
Табличное преобразование: массив байт по адр. ES:[BX] с индексом [AL] → AL |
– |
все |
Translate Byte from Table |
CMOVZ P1,P2 CMOVE P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
if (ZF=1): P1P2 |
– |
P6 > |
Condition Move if Zero / Equal |
CMOVNZ P1,P2 CMOVNE P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
if (ZF=0): P1P2 |
– |
P6 > |
Condition Move if Not Zero / Not Equal |
CMOVS P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
if (SF=1): P1P2 |
– |
P6 > |
Condition Move if Sign |
CMOVNS P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
if (SF=0): P1P2 |
– |
P6 > |
Condition Move if Not Sign |
CMOVP P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
if (PF=1): P1P2 |
– |
P6 > |
Condition Move if Parity |
CMOVNP P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
if (PF=0): P1P2 |
– |
P6 > |
Condition Move if Not Parity |
CMOVO P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
if (OF=1): P1P2 |
– |
P6 > |
Condition Move if Overflow |
CMOVNO P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
if (OF=0): P1P2 |
– |
P6 > |
Condition Move if Not Overflow |
CMOVA P1,P2 CMOVNBE P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
Усл. пересылка по >(беззнак.) if (CF=0 && ZF=0): P1P2 |
– |
P6 > |
Condition Move if Above / Not Below or Equal |
CMOVAE P1,P2 CMOVNB P1,P2 CMOVNC P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
Усл. пересылка по (беззнак.) if (CF=0): P1P2 Усл. пересылка по CF=0 |
– |
P6 > |
Condition Move if Above or Equal / Not Below / if Not Carry |
CMOVB P1,P2 CMOVNAE P1,P2 CMOVC P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
Усл. пересылка по <(беззнак.) if (CF=1): P1P2 Усл. пересылка по CF=1 |
– |
P6 > |
Condition Move if Below / Not Above or Equal / if Carry |
CMOVBE P1,P2 CMOVNA P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
Усл. пересылка по (беззнак.) if (CF=1 && ZF=1): P1P2 |
– |
P6 > |
Condition Move if Below or Equal / Not Above |
CMOVG P1,P2 CMOVNLE P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
Усл.пересылка по >(знаковое) if (ZF=0 && SF=OF): P1P2 |
– |
P6 > |
Condition Move if Greater / Not Less or Equal |
CMOVGE P1,P2 CMOVNL P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
Усл.пересылка по (знаковое) if (SF=OF): P1P2 |
– |
P6 > |
Condition Move if Greater or Equal / Not Less |
CMOVL P1,P2 CMOVNGE P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
Усл.пересылка по <(знаковое) if (SF<>OF): P1P2 |
– |
P6 > |
Condition Move if Less / Not Greater or Equal |
CMOVLE P1,P2 CMOVNG P1,P2 |
r8/16/32, r8/16/32 r8/16/32, m8/16/32 |
Усл.пересылка по (знаковое) if (ZF=1 && SF<>OF): P1P2 |
– |
P6 > |
Condition Move if Less or Equal / Not Greater |