IA-32常用汇编语言指令

一、传送指令

1、通用数据传送指令

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

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

2、地址传送指令

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

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

3、输入输出指令

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

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

4、标志传送指令

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

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

二、定点算术运算指令

1、加/减运算指令

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

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

2、自增/自减运算指令

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

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

3、取负指令

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

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

4、比较指令

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

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

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中的内容除以指令中指定的除数。

简写英文全称中文名称作用
mulmultiplication无符号数乘法指令
imulinteger multiplication带符号整数乘法指令
divdivide无符号数除法指令
idivinteger divide带符号整数除法指令

三、按位运算指令

1、逻辑运算指令

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

2、移位指令

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

四、控制转移指令

1、无条件转移指令

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

2、条件转移指令

简写英文全称转移条件作用
jcjump when has carry flagCF=1有进位/借位
jncjump when has not carry flagCF=0无进位/借位
je/jzjump when equal/jump when has zero flagZF=1相等/等于零
jne/jnzjump when not equal/jump when has not zero flagZF=0不相等/不等于零
jsjump when has sign flagSF=1是负数
jnsjump when has not sign flagSF=0是非负数
jojump when has overflow flagOF=1有溢出
jnojump when has not overflow flagCF=1无溢出
ja/jnbejump when above/jump when not below or equalCF=0 and ZF=0无符号整数A>B
jae/jnbjump when above or equal/jump when not belowCF=0 or ZF=0无符号整数A≥B
jb/jnaejump when below/jump when not above or equalCF=1 and ZF=0无符号整数A<B
jbe/jnajump when below or equal/jump when not aboveCF=1 or ZF =1无符号整数A≤B
jg/jnlejump when great/jump when not less or equalSF=OF and ZF = 0带符号整数A>B
jge/jnljump when great or equal/jump when not lessSF=OF or ZF = 1带符号整数A≥B
jl/jngejump when less/jump when not great or equalSF≠OF and ZF=0带符号整数A<B
jle/jngjump when less or equal/jump when not greatSF≠OF or ZF=1带符号整数A≤B

3、条件设置指令

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

简写英文全称设置条件作用
setcset when has carry flagCF=1有进位/借位时置DST为1,否则为置0
setncset when has not carry flagCF=0无进位/借位时置DST为1,否则为置0
sete/setzset when equal/set when has zero flagZF=1相等/等于零时置DST为1,否则为置0
setne/setnzset when not equal/set when has not zero flagZF=0不相等/不等于零时置DST为1,否则为置0
setsset when has sign flagSF=1是负数时置DST为1,否则为置0
setnsset when has not sign flagSF=0是非负数时置DST为1,否则为置0
setoset when has overflow flagOF=1有溢出时置DST为1,否则为置0
setnoset when has not overflow flagCF=1无溢出时置DST为1,否则为置0
seta/setnbeset when above/set when not below or equalCF=0 and ZF=0无符号整数A>B时置DST为1,否则为置0
setae/setnbset when above or equal/set when not belowCF=0 or ZF=0无符号整数A≥B时置DST为1,否则为置0
setb/setnaeset when below/set when not above or equalCF=1 and ZF=0无符号整数A<B时置DST为1,否则为置0
setbe/setnaset when below or equal/set when not aboveCF=1 or ZF =1无符号整数A≤B时置DST为1,否则为置0
setg/setnleset when great/set when not less or equalSF=OF and ZF = 0带符号整数A>B时置DST为1,否则为置0
setge/setnlset when great or equal/set when not lessSF=OF or ZF = 1带符号整数A≥B时置DST为1,否则为置0
setl/setngeset when less/set when not great or equalSF≠OF and ZF=0带符号整数A<B时置DST为1,否则为置0
setle/setngset when less or equal/set when not greatSF≠OF or ZF=1带符号整数A≤B时置DST为1,否则为置0

4、条件传送指令

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

简写英文全称设置条件作用
cmovcconditional move when has carry flagCF=1有进位/借位时将SRC的内容传送到DST
cmovncconditional move when has not carry flagCF=0无进位/借位时将SRC的内容传送到DST
cmove/cmovzconditional move when equal/conditional move when has zero flagZF=1相等/等于零时将SRC的内容传送到DST
cmovne/cmovnzconditional move when not equal/conditional move when has not zero flagZF=0不相等/不等于零时将SRC的内容传送到DST
cmovsconditional move when has sign flagSF=1是负数时将SRC的内容传送到DST
cmovnsconditional move when has not sign flagSF=0是非负数时将SRC的内容传送到DST
cmovoconditional move when has overflow flagOF=1有溢出时将SRC的内容传送到DST
cmovnoconditional move when has not overflow flagCF=1无溢出时将SRC的内容传送到DST
cmova/cmovnbeconditional move when above/conditional move when not below or equalCF=0 and ZF=0无符号整数A>B时将SRC的内容传送到DST
cmovae/cmovnbconditional move when above or equal/conditional move when not belowCF=0 or ZF=0无符号整数A≥B时将SRC的内容传送到DST
cmovb/cmovnaeconditional move when below/conditional move when not above or equalCF=1 and ZF=0无符号整数A<B时将SRC的内容传送到DST
cmovbe/cmovnaconditional move when below or equal/conditional move when not aboveCF=1 or ZF =1无符号整数A≤B时将SRC的内容传送到DST
cmovg/cmovnleconditional move when great/conditional move when not less or equalSF=OF and ZF = 0带符号整数A>B时将SRC的内容传送到DST
cmovge/cmovnlconditional move when great or equal/conditional move when not lessSF=OF or ZF = 1带符号整数A≥B时将SRC的内容传送到DST
cmovl/cmovngeconditional move when less/conditional move when not great or equalSF≠OF and ZF=0带符号整数A<B时将SRC的内容传送到DST
cmovle/cmovngconditional move when less or equal/conditional move when not greatSF≠OF or ZF=1带符号整数A≤B时将SRC的内容传送到DST

5、调用指令

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

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

6、返回指令

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

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

7、中断指令

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

简写英文全称中文名称作用
intinterrupt中断指令
iretinterrupt return中断返回指令
intointerrupt overflow中断溢出指令

8、循环指令

作用:

简写英文全称中文名称作用
looploop循环指令
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值