Академический Документы
Профессиональный Документы
Культура Документы
ADD
ADC
DAA
SS:
AAA
FS: GS:
ARPL
operand
size
address
size
ADD/ADC/AND/XOR
OR/SBB/SUB/CMP
NOP
TEST
CBW
MOVS, CMPS
CALL
CWD
DS:
AAS
LEA
MOV
POP
WAIT
TEST
MOV
DDS
IMUL
MOV
XCHG
XCHG
PUSH
IMUL
CS:
Jcc
PUSH
PUSH/POP
CS/DS
CMP
PUSHA
POPA
Esc
SUB
ES:
SBB
XOR
3
OR
PUSH/POP
ES/SS
AND
RETN
Shifts
Rotations
LOOPcc
LOCK: IceBP
LES
AAM
AAD
MOV
SALC
HLT
CMC
ENTER LEAVE
RETF
TEST/NOT/NEG
[i]MUL/[i]DIV
INT3
INT
INTO
IRET
FPU
XLAT
IN & OUT
JECXZ
REPcc:
LDS
CALL, JMP
[CL,ST][C,I,D]
IN & OUT
INC
DEC
INC/DEC
CALL/JMP
PUSH
Opcodes
a perspective of two-byte opcodes
most privileged and MMX/SSE opcodes
are intentionally missing
SLDT
STR
VER?
SGDT
SIDT
SMSW
LAR
LSL
HINT NOP
PREFETCHNTA
B
UD2
MOV
RDTSC
SYSENTER
CMOVcc
4
5
6
7
8
Jcc
SETcc
PUSH/POP
FS
CPUID
BT
SHLD
CMPXCHG
LSS
BTR
LFS LGS
XADD
D
E
F
PUSH/POP
GS
MOVZX
CMPXCHG
BT
BTS
SHRD
*FENCE IMUL
BTC
BSF BSR
MOSVX
BSWAP
name
description
nop
fwait
sfence
prefetchnta
hint nop
mov
cmovcc
lea
movzx
movsx
xchg
movs
lods
stos
move (privileged when with dr* and cr*): mov eax, 3 eax = 3
mov on condition: CF, eax, ebx = 0, 0, 3; cmovc eax, ebx eax = 0
lea x, [y] = mov x,y: eax = 3; lea eax, [eax * 4 + 203A] eax = 2046
mov and extend with zeroes: al = -1; movzx ecx, al ecx = ff
mov and extend with the sign: al = -3; movsx ecx, al ecx = -3
swap contents: al, bl = 1, 2; xchg al, bl al, bl = 2, 1
mov ds:[edi], es:[esi] , and inc (or dec) esi and edi
mov *ax, es:[esi], and inc (or dec) esi
mov ds:[edi], *ax and inc (or dec) edi
add
adc
xadd
sub
sbb
inc
dec
neg
div
idiv
mul
imul
aaa
aas
aam
aad
daa
das
ascii adjust after BCD addition: ax, bx = 304, 307; add ax, bx; aaa ax = 701
ascii adjust after substraction: ax, bx = 1, 4; sub al, bl; aas ax = 7
decimal to BCD: ax = 35; aam ax = 305
BCD to decimal: ax = 305; aad ax = 35
decimal adjust after addition: ax, bx = 1234, 537; add ax, bx; daa ax = 1771
decimal adjust after substraction ax, bx = 1771, 1234; sub ax, bx; das ax = 537
or
and
xor
not
rol
ror
rcl
rcr
shl
shr
sar
shld
shrd
lds
loads register and segment: [ebx] = 12345678, 0; lds eax, [ebx] ds = 0; eax = 12345678
same with lss/les/lfs/lgs and the other segments
dec ecx. jump if ecx is 0 and extra condition
repeat operation, decrease counter. stop if condition met or counter is 0
jump if *cx is null
eip = operand
cs:eip = operands
jump on condition
loopcc
repcc:
jecxz
jmp
jmpf
jcc
name
description
enter
leave
cmp
cmps
scas
test
push
pushf
pusha
pop
popf
popa
smsw
lahf
sahf
in
ins
out
outsd
call
callf
ret
retf
iret
cbw
cwd
cwde
bsf
bsr
bt
scan for the first bit set: eax = 0010100b; bsf ebx, eax ebx = 2
same but from highest bit to lowest bit
copy a specific bit to CF: ax, bx = 00100b, 2; bt ax,bx CF = 1
bts/btr/btc the same + set/reset/complement that bit
stc/d/i
clc/d/i
cmc
int
into
int3
xlat
bound
opsize:
addsize:
bswap
cmpxchg
turns dword operand into word: ecx = -1; 66 : inc ecx (=inc cx) ecx = ffff0000
use 16b addressing mode: 67:add [eax], eax add [bx + si], eax
endian swapping eax = 12345678h; bswap eax eax = 78563412
if (op1 == *ax) op1 = op2 else *ax = op1: al = 3; bl = 6; cmpxchg bl,cl al = bl
rdtsc
sidt
sgdt
sldt
cpuid
lsl
str
arpl
lar
ver*
sysenter
name
description
setcc
setalc
hlt
IceBp
ud1-ud2
lock: