OD汇编指令
NOP ⽆操作
PUSH
将数据压⼊堆栈中
push ebp——EBP寄存器中的值压⼊堆栈中
POP
出栈(与PUSH相反)
pop ebp——将堆栈中的值传递给EBP寄存器。其他寄存器效果相似
PUSHAD
所有通⽤寄存器的内容按⼀定顺序压⼊到堆栈中,相当于
PUSH EAX、PUSH ECX、PUSH EDX、PUSH EBX、PUSH ESP、PUSH EBP、PUSH ESI、PUSH EDI
POPAD
该指令与PUSHAD正好相反,它从堆栈中取值,并将它们放到相应的寄存器中,等价于
POP EDI、POP ESI、POP ESP、POP ESP、POP EBX、POP EDX、POP ECX、POP EAX
MOV
该指令将第⼆个操作数赋值给第⼀个操作数
MOV EAX, EBX 释:EBX值赋值给EAX
mov指令⽤于将⼀个值写⼊某个寄存器。
mov eax, [esp+8]
这⼀⾏代码表示,先将 ESP 寄存器⾥⾯的地址加上8个字节,得到⼀个新的地址,然后按照这个地址在 Stack 取出数据。根据前⾯的
以推算出这⾥取出的是2,再将2写⼊ EAX 寄存器。
在CPU内或CPU和存储器之间传送字或字节,它传送的信息可以从寄存器到寄存器,⽴即数到寄存器,⽴即数到存储单元,从存储单
器,从寄存器到存储单元,从寄存器或存储单元到除CS外的段寄存器(注意⽴即数不能直接送段寄存器),从段寄存器到寄存器或存储
但是注意
(1) MOV指令中的源操作数绝对不能是⽴即数和代码段CS寄存器;
(2) MOV指令中绝对不允许在两个存储单元之间直接传送数据;
(3) MOV指令中绝对不允许在两个段寄存器之间直接传送数据;
(4) MOV指令不会影响标志位
MOVSX
(带符号扩展的传送
指令)
第⼆个操作数可能是⼀个寄存器也可能是⼀个内存单元,第⼀个操作数的位数⽐第⼆个操作数多,第⼆个操作数的符号位填
作数剩余部分
例:movzx eax,byte ptr ds:[eax] 从eax寄存器存储的地址的值 ([ ]) 中取出第⼀个字节(byte)
movzx其实就是将我们的源操作数取出来,然后置于⽬的操作数,⽬的操作数其余位⽤0填充。
MOVZX
(带0扩展的传送指
令)
类似于MOVSX,但是这种情况下剩余的部分不根据操作数的正负来进⾏填充,剩余的部分总是被填充为0