汇编指令
...大约 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