IA-32常用汇编语言指令

一、传送指令

1、通用数据传送指令

作用:传送寄存器或存储器中的数据

简写 英文全称 中文名称 作用 子类型 英文全称 含义
mov move 传送指令 一般的传送指令 movb move byte 字节传送(8位)
movw move word 字(双字节)传送(16位)
movl move long byte 长字节(双字)传送(32位)
movs 符号扩展传送指令 将短的源数据高位符号扩展后传送到目的地址,针对有符号数 movsbw 把一个字节进行符号扩展后送到一个字地址中
movsbl
movswl
movz 零扩展传送指令 将短的源数据高位零扩展后传送到目的地址,针对无符号数 movsbw
movsbl
movswl 把一个字的高位进行零扩展后送到一个字(双字节)地址中
xchg exchange 数据交换指令 将两个寄存器内容交换 xchgb 字节交换
xchgw
xchgl
push push 压栈指令 先执行R[sp]<-R[sp]-2或R[sp]<-R[sp]-4,然后将一个字或双字从指定寄存器送到SP或ESP指定的栈单元中 pushw 字压栈
pushl 双字压栈
pop pop 出栈指令 先将一个字或双字从SP或ESP指示的栈单元送到指定寄存器中,再执行R[sp]<-R[sp]+2或R[sp]<-R[sp]+4 popw 字出栈
popl 双字出栈

2、地址传送指令

作用:传送的是操作数的存储地址

简写 英文全称 中文名称 作用 子类型 英文全称 含义
lea load effect address 加载有效地址(偏移地址)指令 将源操作数的存储地址送到目的寄存器中,相当于地址操作符&的功能 leaw
leal 把一个32位(4字节)的地址送到一个32位的寄存器中
leaq

3、输入输出指令

作用:专门用于在累加器和I/O端口之间进行数据传送

简写 英文全称 中文名称 作用
in input 输入指令 将I/O端口内容送到累加器
ou ouput 输出指令 将累加器内容送到I/O端口

4、标志传送指令

作用:专门用于对标志寄存器进行操作

简写 英文全称 中文名称 作用
pushf push flag 将标志寄存器的内容压栈
popf pop flag 将栈顶内容送到标志寄存器

二、定点算术运算指令

1、加/减运算指令

作用:对给定长度的两个位串进行相加或相减

简写 英文全称 中文名称 作用
add add 加法指令 对给定长度的两个位串进行相加
sub subtract 减法指令 对给定长度的两个位串进行相减

2、自增/自减运算指令

作用:对给定长度的一个位串加1或减1

简写 英文全称 中文名称 作用
inc increase 自增指令 对给定长度的一个位串加1
dec decrease 自减指令 对给定长度的一个位串减1

3、取负指令

作用:求操作数的负数,即将给定长度的一个位串”各位取反,末位加1“。

简写 英文全称 中文名称 作用
neg negative 取负指令 求操作数的负数

4、比较指令

作用:两个寄存器操作数的比较,用目的操作数减去源操作数,但结果不送回目的操作数。即两个操作数保持原值不变,只是标志位相应改变

简写 英文全称 中文名称 作用
cmp compare 比较指令 两个寄存器操作数的比较

5、乘/除运算指令

乘法:对于IMUL指令,可以明显地给出一个、两个或三个操作数,但是对于MUL指令,只能明显地给出一个操作数。

  1. 若指令中只给出一个操作数SRC,则另一个源操作数隐含在累加器AL/AX/EAX中,将SRC和累加器内容相乘,结果存放在AX(16位时)或DX-AX(32位时)或EDX-EAX(64位时)中。
  2. 若指令中给出两个操作数DST和SRC,则将DST和SRC相乘,结果存放在DST中。
  3. 若指令中给出三个操作数REG、SRC和IMM,则将SRC和立即数IMM相乘,结果存放在寄存器REG中。

除法:指令中只明显指出除数,用累加器AL/AX/EAX中的内容除以指令中指定的除数。

简写 英文全称 中文名称 作用
mul multiplication 无符号数乘法指令
imul integer multiplication 带符号整数乘法指令
div divide 无符号数除法指令
idiv integer divide 带符号整数除法指令

三、按位运算指令

1、逻辑运算指令

简写 英文全称 中文名称 作用
not 取反指令 对单操作数每一位取反
and 按位与指令 对双操作数按位逻辑“与”,主要用于实现掩码操作
or 按位或指令 对双操作数按位逻辑“或”,主要用于实现目的操作数的特定位置1
xor 按位异或指令 对双操作数按位逻辑“异或”,主要用于判断两个操作数中哪些位不同或改变指定位的值
test 根据两个操作数相“与”的结果来设置条件标志,主要用于需检测某种条件但不能改变源操作数的场合

2、移位指令

简写 英文全称 中文名称 作用
shl shift logical left 逻辑左移 每左移一次,最高位送入CF,并在最低位补0
shr shift logical right 逻辑右移 每右移一次,最低位送入CF,并在最高位补0
sal shift arithmetic left 算术左移 与逻辑左移类似,但移位前后符号位发生变化,则OF=1,表示左移后结果溢出
sar shift arithmetic right 算术右移 每右移一次最低位送入CF,并在高位补符号
rol rotate left 循环左移 每左移一次,最高位移到最低位,并送入CF
ror rotate right 循环右移 每右移一次,最低位移到最高位,并送入CF

四、控制转移指令

1、无条件转移指令

简写 英文全称 中文名称 作用
jmp jump 无条件转移指令 无条件转移到转移目标地址处执行

2、条件转移指令

简写 英文全称 转移条件 作用
jc jump when has carry flag CF=1 有进位/借位
jnc jump when has not carry flag CF=0 无进位/借位
je/jz jump when equal/jump when has zero flag ZF=1 相等/等于零
jne/jnz jump when not equal/jump when has not zero flag ZF=0 不相等/不等于零
js jump when has sign flag SF=1 是负数
jns jump when has not sign flag SF=0 是非负数
jo jump when has overflow flag OF=1 有溢出
jno jump when has not overflow flag CF=1 无溢出
ja/jnbe jump when above/jump when not below or equal CF=0 and ZF=0 无符号整数A>B
jae/jnb jump when above or equal/jump when not below CF=0 or ZF=0 无符号整数A≥B
jb/jnae jump when below/jump when not above or equal CF=1 and ZF=0 无符号整数A
jbe/jna jump when below or equal/jump when not above CF=1 or ZF =1 无符号整数A≤B
jg/jnle jump when great/jump when not less or equal SF=OF and ZF = 0 带符号整数A>B
jge/jnl jump when great or equal/jump when not less SF=OF or ZF = 1 带符号整数A≥B
jl/jnge jump when less/jump when not great or equal SF≠OF and ZF=0 带符号整数A
jle/jng jump when less or equal/jump when not great SF≠OF or ZF=1 带符号整数A≤B

3、条件设置指令

作用:用来将条件标志组合得到的条件值设置到一个8位通用寄存器中。其设置的条件值与条件转移指令的转移条件完全一样,指令助记符也类似,只需要将j换成set即可。格式为setcc DST。DST是一个通用寄存器。

简写 英文全称 设置条件 作用
setc set when has carry flag CF=1 有进位/借位时置DST为1,否则为置0
setnc set when has not carry flag CF=0 无进位/借位时置DST为1,否则为置0
sete/setz set when equal/set when has zero flag ZF=1 相等/等于零时置DST为1,否则为置0
setne/setnz set when not equal/set when has not zero flag ZF=0 不相等/不等于零时置DST为1,否则为置0
sets set when has sign flag SF=1 是负数时置DST为1,否则为置0
setns set when has not sign flag SF=0 是非负数时置DST为1,否则为置0
seto set when has overflow flag OF=1 有溢出时置DST为1,否则为置0
setno set when has not overflow flag CF=1 无溢出时置DST为1,否则为置0
seta/setnbe set when above/set when not below or equal CF=0 and ZF=0 无符号整数A>B时置DST为1,否则为置0
setae/setnb set when above or equal/set when not below CF=0 or ZF=0 无符号整数A≥B时置DST为1,否则为置0
setb/setnae set when below/set when not above or equal CF=1 and ZF=0 无符号整数A
setbe/setna set when below or equal/set when not above CF=1 or ZF =1 无符号整数A≤B时置DST为1,否则为置0
setg/setnle set when great/set when not less or equal SF=OF and ZF = 0 带符号整数A>B时置DST为1,否则为置0
setge/setnl set when great or equal/set when not less SF=OF or ZF = 1 带符号整数A≥B时置DST为1,否则为置0
setl/setnge set when less/set when not great or equal SF≠OF and ZF=0 带符号整数A
setle/setng set when less or equal/set when not great SF≠OF or ZF=1 带符号整数A≤B时置DST为1,否则为置0

4、条件传送指令

作用:如果符号条件就进行传送操作,否则什么也不做。其设置的条件值与条件转移指令的转移条件完全一样,指令助记符也类似,只需要将j换成cmov即可。格式为cmovcc DST,SRC。SRC是存放在寄存器或存储器中的源操作数,DST是只能存放在寄存器的传送目的地。

简写 英文全称 设置条件 作用
cmovc conditional move when has carry flag CF=1 有进位/借位时将SRC的内容传送到DST
cmovnc conditional move when has not carry flag CF=0 无进位/借位时将SRC的内容传送到DST
cmove/cmovz conditional move when equal/conditional move when has zero flag ZF=1 相等/等于零时将SRC的内容传送到DST
cmovne/cmovnz conditional move when not equal/conditional move when has not zero flag ZF=0 不相等/不等于零时将SRC的内容传送到DST
cmovs conditional move when has sign flag SF=1 是负数时将SRC的内容传送到DST
cmovns conditional move when has not sign flag SF=0 是非负数时将SRC的内容传送到DST
cmovo conditional move when has overflow flag OF=1 有溢出时将SRC的内容传送到DST
cmovno conditional move when has not overflow flag CF=1 无溢出时将SRC的内容传送到DST
cmova/cmovnbe conditional move when above/conditional move when not below or equal CF=0 and ZF=0 无符号整数A>B时将SRC的内容传送到DST
cmovae/cmovnb conditional move when above or equal/conditional move when not below CF=0 or ZF=0 无符号整数A≥B时将SRC的内容传送到DST
cmovb/cmovnae conditional move when below/conditional move when not above or equal CF=1 and ZF=0 无符号整数A
cmovbe/cmovna conditional move when below or equal/conditional move when not above CF=1 or ZF =1 无符号整数A≤B时将SRC的内容传送到DST
cmovg/cmovnle conditional move when great/conditional move when not less or equal SF=OF and ZF = 0 带符号整数A>B时将SRC的内容传送到DST
cmovge/cmovnl conditional move when great or equal/conditional move when not less SF=OF or ZF = 1 带符号整数A≥B时将SRC的内容传送到DST
cmovl/cmovnge conditional move when less/conditional move when not great or equal SF≠OF and ZF=0 带符号整数A
cmovle/cmovng conditional move when less or equal/conditional move when not great SF≠OF or ZF=1 带符号整数A≤B时将SRC的内容传送到DST

5、调用指令

作用:调用指令是一种无条件转移指令,跳转方式与jmp指令类似

简写 英文全称 中文名称 作用
call call 调用指令 首先将返回地址入栈(相当于push操作),然后跳转到指定地址处执行

6、返回指令

作用:返回指令是一种无条件转移指令,通常放在子程序的末尾,使子程序执行后返回主程序执行

简写 英文全称 中文名称 作用
ret return 返回指令 首先将返回地址从栈顶取出(相当于pop操作),然后跳转回主程序

7、中断指令

作用:与过程调用类似,不同的是①过程调用跳转到子程序,中断跳转到中断服务程序②过程调用只需要保存返回地址,中断还需要保存标志寄存器的内容

简写 英文全称 中文名称 作用
int interrupt 中断指令
iret interrupt return 中断返回指令
into interrupt overflow 中断溢出指令

8、循环指令

作用:

简写 英文全称 中文名称 作用
loop loop 循环指令

你可能感兴趣的:(汇编)