一、格式
- Intel 格式,寄存器名称和数值前无符号
指令名称 dst,src
- AT&T 格式,寄存器名称前加“%”,数值前加“$”
指令名称 src,dst
二、汇编指令
1. mov des,src
- dst和src类型相同
mov eax,ebx
mov eax,[0]
mov eax,[0] <==0为偏移地址, DS:0 为实际的地址
[...]表示一个内存单元,[10]中10表示偏移地址
mov byte ptr[2000],0
DS:[2000h] <-- 0
- 存储器操作数类型不确定时,使用byte ptr(字节) dword ptr(双字)确定,小端存储
2. lea dst,src
与mov指令类似,不过lea指令传送的src是有效地址,即取src的地址
如:
mov bx,200
mov si,30
lea cx,[bx+si] cx的值为230
mov ax,[bx+si] ax的值为地址为230h处的值
3. call ptr
- 将当前指令的下一条指令的地址(也就是eip,eip中存放的程序下一条运行指令的地址)压入栈中;
- 在JMP到ptr地址处;
4. offert :取得标号的偏移地址
5. cmp op1,op2
==> op1-op2 改变ZF的值
6. leave
在32位汇编下相当于
mov esp,ebp
pop ebp
7. POP DST;
- pop:弹出堆栈指令,将栈顶的数据弹出并存至 DST
8. ret
返回指令,操作为将栈顶数据弹出至 eip
- retn k
1.将当前的ESP中指向的地址出栈;
2.JMP到这个地址;
3.弹出栈顶的k个字节的数据 - retf
1.将当前的ESP中指向的地址出栈给EIP;
2.将当前的ESP中指向的地址出栈给CS;
2.JMP到这个地址。
参考链接:https://zhuanlan.zhihu.com/p/25892385?utm_source=com.tencent.tim&utm_medium=social