数据传输指令
MOV
(Move):将数据从一个位置传输到另一个位置。
mov eax, ebx ; Move ebx to eax
PUSH
(Push):将数据压入堆栈。
push eax ; Push eax onto the stack
POP
(Pop):从堆栈中弹出数据。
pop eax ; Pop from the stack into eax
XCHG
(Exchange):交换两个寄存器的值。
xchg eax, ebx ; Exchange eax and ebx
LEA
(Load Effective Address):计算内存地址并将其加载到寄存器中。
lea eax, [ebx+4] ; Load effective address of [ebx+4] into eax
算术指令
ADD
(Add):将两个操作数相加。
add eax, ebx ; Add ebx to eax
SUB
(Subtract):将一个操作数从另一个操作数中减去。
sub eax, ebx ; Subtract ebx from eax
MUL
(Multiply):无符号乘法。
mul ebx ; Multiply eax by ebx (unsigned)
IMUL
(Integer Multiply):有符号乘法。
imul ebx ; Multiply eax by ebx (signed)
DIV
(Divide):无符号除法。
div ebx ; Divide eax by ebx (unsigned)
IDIV
(Integer Divide):有符号除法。
idiv ebx ; Divide eax by ebx (signed)
INC
(Increment):将操作数加 1。
inc eax ; Increment eax by 1
DEC
(Decrement):将操作数减 1。
dec eax ; Decrement eax by 1
逻辑指令
AND
(Logical AND):按位与。
and eax, ebx ; Logical AND eax and ebx
OR
(Logical OR):按位或。
or eax, ebx ; Logical OR eax and ebx
XOR
(Logical XOR):按位异或。
xor eax, eax ; Logical XOR eax with eax (clear eax)
NOT
(Logical NOT):按位取反。
not eax ; Logical NOT eax
控制流指令
JMP
(Jump):无条件跳转。
jmp label ; Jump to label
JE
/JZ
(Jump if Equal / Jump if Zero):如果相等/零则跳转。
je label ; Jump to label if equal
JNE
/JNZ
(Jump if Not Equal / Jump if Not Zero):如果不相等/非零则跳转。
jne label ; Jump to label if not equal
JG
/JNLE
(Jump if Greater / Jump if Not Less or Equal):如果大于/不小于等于则跳转。
jg label ; Jump to label if greater
JGE
/JNL
(Jump if Greater or Equal / Jump if Not Less):如果大于等于/不小于则跳转。
jge label ; Jump to label if greater or equal
JL
/JNGE
(Jump if Less / Jump if Not Greater or Equal):如果小于/不大于等于则跳转。
jl label ; Jump to label if less
JLE
/JNG
(Jump if Less or Equal / Jump if Not Greater):如果小于等于/不大于则跳转。
jle label ; Jump to label if less or equal
CALL
(Call):调用子程序。
call subroutine ; Call subroutine
RET
(Return):从子程序返回。
ret ; Return from subroutine
比较指令
CMP
(Compare):比较两个操作数。
cmp eax, ebx ; Compare eax and ebx
TEST
(Test):按位与比较。
test eax, eax ; Test eax (logical AND eax with eax)
移位和旋转指令
SHL
/SAL
(Shift Logical Left / Shift Arithmetic Left):逻辑左移/算术左移。
shl eax, 1 ; Shift eax left by 1 bit
SHR
(Shift Logical Right):逻辑右移。
shr eax, 1 ; Shift eax right by 1 bit
SAR
(Shift Arithmetic Right):算术右移。
sar eax, 1 ; Arithmetic shift eax right by 1 bit
ROL
(Rotate Left):循环左移。
rol eax, 1 ; Rotate eax left by 1 bit
ROR
(Rotate Right):循环右移。
ror eax, 1 ; Rotate eax right by 1 bit
字符串操作指令
MOVSB
(Move String Byte):将字节从源字符串移动到目标字符串。
movsb ; Move byte from [esi] to [edi]
MOVSW
(Move String Word):将字从源字符串移动到目标字符串。
movsw ; Move word from [esi] to [edi]
MOVSD
(Move String Doubleword):将双字从源字符串移动到目标字符串。
movsd ; Move doubleword from [esi] to [edi]
CMPSB
(Compare String Byte):比较源字符串和目标字符串的字节。
cmpsb ; Compare byte at [esi] with byte at [edi]
CMPSW
(Compare String Word):比较源字符串和目标字符串的字。
cmpsw ; Compare word at [esi] with word at [edi]
CMPSD
(Compare String Doubleword):比较源字符串和目标字符串的双字。
cmpsd ; Compare doubleword at [esi] with doubleword at [edi]
STOSB
(Store String Byte):将字节存储到目标字符串。
stosb ; Store byte in al at [edi]
STOSW
(Store String Word):将字存储到目标字符串。
stosw ; Store word in ax at [edi]
STOSD
(Store String Doubleword):将双字存储到目标字符串。
stosd ; Store doubleword in eax at [edi]
LODSB
(Load String Byte):从源字符串加载字节。
lodsb ; Load byte at [esi] into al
LODSW
(Load String Word):从源字符串加载字。
lodsw ; Load word at [esi] into ax
LODSD
(Load String Doubleword):从源字符串加载双字。
lodsd ; Load doubleword at [esi] into eax
SCASB
(Scan String Byte):扫描目标字符串的字节。
scasb ; Compare byte at [edi] with al
SCASW
(Scan String Word):扫描目标字符串的字。
scasw ; Compare word at [edi] with ax
SCASD
(Scan String Doubleword):扫描目标字符串的双字。
scasd ; Compare doubleword at [edi] with eax
输入/输出指令
IN
(Input):从端口读取数据。
in al, dx ; Read byte from port dx into al
OUT
(Output):向端口写入数据。
out dx, al ; Write byte from al to port dx
系统指令
HLT
(Halt):停止处理器执行。
hlt ; Halt the processor
NOP
(No Operation):无操作。
nop ; No operation
STI
(Set Interrupt Flag):设置中断标志。
sti ; Set interrupt flag
CLI
(Clear Interrupt Flag):清除中断标志。
cli ; Clear interrupt flag
STOSB
(Store String Byte):将字节存储到目标字符串。
stosb ; Store byte in al at [edi]
总结
x86 指令集非常庞大,以上列出的只是其中的一部分。对于完整的 x86 指令集,可以参考 Intel 或 AMD 的官方文档。