IA-32定点算术指令

定点算术运算常用指令

–加 / 减运算(影响标志、不区分无/带符号)
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:无符号乘 / 带符号乘
DIV/ IDIV:带无符号除 / 带符号除

1


定点运算指令具体执行

继续使用上一节的add的函数
2

  • 此处的lea作用与 add %edx, %eax相同
    此时EIP=80483e0
    执行前

  • eax即通用寄存器的0号寄存器
    edx为通用寄存器的2号寄存器
    IR=8d040289

  • 译码后,得知功能R[eax]<-R[edx]+R[eax]*1
    将了两寄存器送入ALU计算

  • 回忆:ALU有哪些部件如下图
    补码加/减器
    逻辑运算部件
    乘法器?无 除法器?无
    乘法/除法可用加减+移位实现,也可有独立乘法/除法器
    带符号乘和无符号乘是独立部件
    带符号除和无符号除是独立部件
    3

  • 补码加减器:
    4
    -ALU运算结束后,标志信息送到标志寄存器中,通过多路选择器,把加法器选择输出送回0号寄存器,0号寄存器为80000001
    执行后
    关于正反补的计算和溢出不再赘述

乘除法指令

  • 乘法指令:可给出一个、两个或三个操作数
    –若给出一个操作数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位
  • 除法指令:只明显指出除数,用EDX-EAX中内容除以指定的除数
    –若为8位,则16位被除数在AX寄存器中,商送回AL,余数在AH
    –若为16位,则32位被除数在DX-AX寄存器中,商送回AX,余数在DX
    –若为32位,则被除数在EDX-EAX寄存器中,商送EAX,余数在EDX

参考:南大计算机系统基础(一)

猜你喜欢

转载自blog.csdn.net/weixin_61631200/article/details/127360820