汇编指令
NOP 无操作
-
运行这条指令时,不会对寄存器、内存以及堆栈造成任何影响,也就是无操作。
-
当用一个短指令来替换一个长指令时,如果处理器没有错误,多余的空间将会被NOP填充。
-
适当数目的NOP指令可以将其他指令完全替换掉。
PUSH
- 将操作数压入到堆栈顶部,新压入的值总是在堆栈的顶部,不会改变下边的数据。
- 注意:PUSH 401008、PUSH [401008]的含义是不同的。
- PUSH 401008是把数值401008压入到堆栈顶部
- PUSH [401008]是将内存单元401008中存储的内容,压入到堆栈中,而且被倒序放置。
POP
- 出栈,取出栈顶部的第一个值,然后存放到指定的目标地址内存单元中,比如,POP EAX,从栈顶中取出第一个值存放到EAX中, 随后的一个值就会变为栈顶。
PUSHAD
- 把所有通用寄存器的内容按顺序压入到堆栈中
POPAD
- 与PUSHAD相反,从堆栈中取值,并将取到的内容放到相应的寄存器中
PUSHAD 等价于 'PUSH AX, CX, DX, BX, SP, BP, SI, DI'。
POPAD 等价于 'pop DI, SI, BP, SP, BX, DX, CX, AX'。
MOV
- 将第二个操作数赋值给第一个操作数
MOVSX
- 第二个操作数可能是一个寄存器,也可能是一个内存单元,第一个操作数的位数可能比第二个操作数多,第二个操作数的符号位将会填充第一个操作数的剩余部分。
MOVZX
- 和MOVSX类似,但是第一个操作数的剩余部分将会用0填充。
LEA取地址指令
- 类似于MOV指令,第一个操作数是一个寄存器,第二个操作数是一个内存单元,将指定地址存放到寄存器中。
XCHG交换
- 将两个操作数的值进行交换