汇编指令
...大约 2 分钟
汇编指令
基础
80386有如下通用寄存器:
- AX,BX,CX,DX;SI,DI;SP,BP;(16位)
- AH,AL ; BH,BL; CH,CL; DH,DL( 8位)
- EAX,EBX,ECX,EDX: ESI,EDI: ESP,EBP(32位)
段寄存器:DS,ES,SS

指令格式
指令 源操作数, 目的操作数
操作数
立即数
寄存器
存储器
数据传送:
movl:用于传送32位的长字值
movw:用于传送16位的长字值
movb:用于传送8位的长字值
寻址方式
- 立即数寻址
movl $1, %eax - 寄存器寻址
movl %ebx, %eax - 绝对寻址
movl 0x08048054, %eax - 简介寻址
movl (%ebx), %eax - 比例变址寻址
movl Imm(Eb, Ei, s)M[Imm+R[Eb]+R[Ei]*s]
获得变量在内存中地址并传送给寄存器
lea value1, %edi
movl $value1, %
lea寻址: leal Src, Dest
Src:地址计算表达式 --> Src的结果保存在Dest中
用途:计算内存地址本身(不计算内存里的值)
栈操作
栈操作
栈顶指针:保存在%esp寄存器
栈底指针:保存在%ebp寄存器
压栈: push
出栈:pop
注意:栈顶事朝向低地址方向的
算数逻辑操作
incl:加1操作
decl:减1操作
negl:取负
addl S:加法
subl:减法
imull S:有符号乘法,将S与%eax中的值相乘,64位结果高32位放%ex,低32位放%eax
mull:无符号乘法
orl S:或
anl S:与
xorl S:异或
notl:取反
SHR:逻辑右移
SHL:逻辑左移
SAR:算数右移
SAL:算数左移
跳转指令
无符号数: above, below
有符号数:great, less
N: 不 E:等于
进行组合,例如:
jne:不等于
jae:大于等于
jg:大于
有条件传送
cmove:相等
cmovs:负数
cmovg:大于
cmovl:小于
cmp:对两个数做减法,但是不保留结果,仅保留标志位
test:对两个操作数进行逻辑与运算,但是不保留结果
Powered by Waline v3.2.0