概述
(1)传送指令
–通用数据传送指令
MOV:一般传送,包括movb、movw和movl等
MOVS:符号扩展传送,如movsbw、movswl等(有符号数)
MOVZ:零扩展传送,如movzwl、movzbl等(无符号数)
XCHG:数据交换(两个寄存器的内容)
PUSH/POP:入栈/出栈,如pushl,pushw,popl,popw等
–地址传送指令
LEA:加载有效地址,如leal (%edx,%eax), %eax”的功能为R[eax]←R[edx]+R[eax],执行前,若R[edx]=i,可 以做无符号的加法
R[eax]=j,则指令执行后,R[eax]=i+j
–输入输出指令
IN和OUT:I/O端口与寄存器之间的交换
–标志传送指令
PUSHF、POPF:将EFLAG压栈,或将栈顶内容送EFLAG
备注:b:字节,w:字(2个字节),l:双字(4个字节)
(2)定点算术运算指令
–加 / 减运算(影响标志、不区分无/带符号)
ADD:加,包括addb、addw、addl等
SUB:减,包括subb、subw、subl等
–增1 / 减1运算(影响除CF以外的标志、不区分无/带符号)
INC:加,包括incb、incw、incl等
DEC:减,包括decb、decw、decl等
–取负运算(影响标志、若对0取负,则结果为0且CF=0, 否则CF=1)
NEG:取负,包括negb、negw、negl等
–比较运算(做减法得到标志、不区分无/带符号)
CMP:比较,包括cmpb、cmpw、cmpl等
–乘 / 除运算(区分无/带符号)
MUL / IMUL:无符号乘 / 带符号乘(影响标志OF和CF)
DIV/ IDIV:带无符号除 / 带符号除
(3)整数乘除指令
乘法指令:可给出一个、两个或三个操作数
- 若给出一个操作数SRC,则另一个源操作数隐含在AL/AX/EAX中,将SRC和累加器内容相乘,结果存放在AX(16 位)或DX-AX(32位)或EDX-EAX(64位)中。DX-AX表示32位乘积的高、低16位分别在DX和AX中。 n位× n位=2n位
- 若指令中给出两个操作数DST和SRC,则将DST和SRC相乘,结果在DST中。n位× n位=n位
- 若指令中给出三个操作数REG、SRC和IMM,则将SRC和立即数IMM相乘,结果在REG中。n位× n位=n位
除法指令:只明显指出除数
- 若为8位,则16位被除数在AX寄存器中,商送回AL,余数在AH
- 若为16位,则32位被除数在DX-AX寄存器中,商送回AX,余数在DX
- 若为32位,则被除数在EDX-EAX寄存器中,商送EAX,余数在EDX
以上内容不要死记硬背,遇到具体指令时能查阅到并理解即可。
(4)定点算术运算指令汇总
(5)定点算术运算指令汇总
- 逻辑运算(仅NOT不影响标志,其他指令OF=CF=0,而ZF和SF根据结果设置:若全0,则ZF=1;若最高位为1,则SF=1 )NOT:非,包括 notb、notw、notl等
- AND:与,包括 andb、andw、andl等
- OR:或,包括 orb、orw、orl等
- XOR:异或,包括 xorb、xorw、xorl等
- TEST:做“与”操作测试,仅影响标志
移位运算(左/右移时,最高/最低位送CF)
- SHL/SHR:逻辑左/右移,包括 shlb、shrw、shrl等
- SAL/SAR:算术左/右移,左移判溢出,右移高位补符
(移位前、后符号位发生变化,则OF=1 ) - ROL/ROR: 循环左/右移,包括 rolb、rorw、roll等
- RCL/RCR: 带循环左/右移,将CF作为操作数一部分循环移位
以上内容不要死记硬背,遇到具体指令时能查阅到并理解即可。
(6)控制转移指令
指令执行可按顺序 或 跳转到转移目标指令处执行
无条件转移指令
- JMP DST:无条件转移到目标指令DST处执行
条件转移
- Jcc DST:cc为条件码,根据标志(条件码)判断是否满足条件,若满足,则转移到目标指令DST处执行,否则按顺序执行
条件设置
- SETcc DST:将条件码cc保存到DST(通常是一个8位寄存器 )
调用和返回指令 (用于过程调用)
- CALL DST:返回地址RA入栈,转DST处执行
- RET:从栈中取出返回地址RA,转到RA处执行
中断指令 (详见第7、8章)
转移指令主要分三类
- 根据单个标志的值转移
- 按无符号整数比较转移
- 按带符号整数比较转移
无符号:
- above >
- equals =
- below <
无符号:
- great >
- equals =
- less <
最后
以上就是坚强哑铃为你收集整理的Linux系统IA-32 —— 操作系统常用指令类型的全部内容,希望文章能够帮你解决Linux系统IA-32 —— 操作系统常用指令类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复