Целочисленная арифметика




Основные непривилегированные команды

Процессоров 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

Целочисленная арифметика

Команда Комбинации операндов P1,P2,P3 Действие Какие флаги меняет Какие процессоры Расшифровка мнемоники команды
INC P1 r8/16/32 m8/16/32 P1 P1+1 SF,ZF,PF,AF,OF все Increment
DEC P1 r8/16/32 m8/16/32 P1 P1–1 SF,ZF,PF,AF,OF все Decrement
NEG P1 r8/16/32 m8/16/32 P1 (–P1) SF,ZF,PF,AF,OF, CF=0 все Negative
ADD 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 P1 P1+P2 SF,ZF,PF,CF,AF,OF все Addition
ADC 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 P1 P1+P2+CF SF,ZF,PF,CF,AF,OF все Addition with Carry
XADD P1,P2 r8/16/32, r8/16/32 m8/16/32, r8/16/32 P1↔P2, P1P1+P2 SF,ZF,PF,CF,AF,OF 486 > Exchange and Add
SUB 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 P1 P1–P2 SF,ZF,PF,CF,AF,OF все Subtraction
SBB 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 P1 P1–P2–CF SF,ZF,PF,CF,AF,OF все Subtraction with Borrow
MUL P1 r8/16/32 m8/16/32 1 байт: AX P1*AL 2 байта: DX.AX P1*AX 4 байта: EDX.EAX P1*EAX SF,ZF,PF,AF не опред. Если старш.. половина рез-та в AH/DX/EDX =0, то CF=OF=0 ¹0 то CF=OF=1 все Multiplication
IMUL P1 r8/16/32 m8/16/32 1 байт: AX P1*AL 2 байта: DX.AX P1*AX 4 байта: EDX.EAX P1*EAX SF,ZF,PF,AF не опред. Если размер результата = размеру операндов, то CF=OF=0 иначе (>) CF=OF=1 все Integer Multiplication
IMUL P1,P2 r8/16/32, r8/16/32 r8/16/32, const r8/16/32, m8/16/32 P1 P1*P2 386 >
IMUL P1,P2,P3 r8/16/32, r8/16/32, const r8/16/32, m8/16/32, const P1 P2*P3 286 >
DIV P1 r8 m8 AX/P1→ в AL частное, в AH остаток Не определены: SF,ZF,PF,CF,AF,OF все Division
r16 m16 DX.AX/P1→в AX частное, в DX остаток
r32 m32 EDX.EAX/P1→в EAX частное, в EDX остаток
IDIV P1 r8 m8 AX/P1→ в AL частное, в AH остаток Не определены: SF,ZF,PF,CF,AF,OF все Integer division
r16 m16 DX.AX/P1→в AX частное, в DX остаток
r32 m32 EDX.EAX/P1→в EAX частное, в EDX остаток
CMP 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 (P1–P2) влияет только флаги SF,ZF,PF,CF,AF,OF все Compare
CMPXCHG P1,P2 r8, AL m8, AL if (P1=AL): P1P2 else AL P1 SF,ZF,PF,CF,AF,OF 486 > Compare and exchange
r16, AX m16, AX if (P1=AX): P1P2 else AX P1
r32, EAX m32, EAX if (P1=EAX): P1P2 else EAX P1
CMPXCHG8B P1 m64 If (P1 = EDX.EAX): P1 EDX.EAX else EDX.EAX P1 ZF P5 > Compare and exchange 8 bytes

 

Логические команды

Команда Комбинации операндов P1,P2,P3 Действие Какие флаги меняет Какие процессоры Расшифровка мнемоники команды
NOT P1 r8/16/32 m8/16/32 ____ P1 P1 все NOT (побитовое НЕ)
AND 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 P1 P1 & P2 SF,ZF,PF, CF=0, OF=0 все AND (побитовое И)
TEST 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 (P1& P2) только устанавливает флаги SF,ZF,PF, CF=0, OF=0 все TEST (логическое сравнение)
OR 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 P1 P1 | P2 SF,ZF,PF, CF=0, OF=0, AF не определен все OR (побитовое ИЛИ)
XOR 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 P1 P1 ^ P2 SF,ZF,PF, CF=0, OF=0, AF не определен все Exclusive OR (побитовое исключающее ИЛИ)

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-10-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: