定点算术运算常用指令
–加 / 减运算(影响标志、不区分无/带符号)
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:带无符号除 / 带符号除
定点运算指令具体执行
继续使用上一节的add的函数
-
此处的lea作用与 add %edx, %eax相同
此时EIP=80483e0
-
eax即通用寄存器的0号寄存器
edx为通用寄存器的2号寄存器
IR=8d040289 -
译码后,得知功能R[eax]<-R[edx]+R[eax]*1
将了两寄存器送入ALU计算 -
回忆:ALU有哪些部件如下图
补码加/减器
逻辑运算部件
乘法器?无 除法器?无
乘法/除法可用加减+移位实现,也可有独立乘法/除法器
带符号乘和无符号乘是独立部件
带符号除和无符号除是独立部件
-
补码加减器:
-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
参考:南大计算机系统基础(一)