一.寄存器&数据传送mov指令
1.80386通用寄存器
16位:AX,BX,CX,DX;SI,DI;SP,BP;
8位:AH,AL;BH,BL;CH,CL;DH,DL
32位:EAX,EBX,ECX,EDX;ESI,EDI;ESP,EBP
段寄存器:DS,ES,SS等
2.AT&T汇编代码
格式:指令 源操作数,目的操作数 (源操作数与目的操作数顺序与intel相反)
movl $8,%eax
3.示例代码
.section .data
.section.text
.global _start
_start:
nop
movl $4,%eax
movl $1,%ebx
movl $1,%eax
movl $0,%ebx
int $0x80
4.数据传输
mov自动识别;movl:32位;movw:16位;movb:8位
5.寻址方式
movl $1,%eax #立即数寻址
movl %ebx,%eax #寄存器寻址
movl 0x08048054,%eax #绝对寻址
movl (%ebx),%eax #间接寻址
movl 0x8(%ebx),%eax #基址偏移量寻址
movl (%eax,%ebx),%edx #变址寻址
movl 0x8(%eax,%ebx),%edx #变址基址寻址
movl (%eax,%ebx,0x2),%edx #比例变址寻址
movl 0x8(%eax,%ebx,0x2),%edx #比例变址基址寻址
6.含变量的数据传输
movl $value1,%eax #将value1的地址写入寄存器eax
lea value1,%edi
7.调试
x/4bt(4字节2进制),x/4bx(4字节16进制)查看内存内容,注意高低位,字节数
二.其他指令
1.栈操作指令
栈操作向低地址方向进行压栈操作
sp,esp寄存器存放栈顶地址
push/pop进行压栈出栈操作
2.跳转指令
eip寄存器存放下一指令地址
jmp 行数
jmp 0x(直接指定跳转地址)
jmp *%eax(跳转到寄存器中保存的地址)
条件跳转在eflags寄存器中:SF符号位,ZF零标志位,CF进位,OF溢出位