计算机组成与设计(二)——算术逻辑运

 算术运算

计算机结构的简化模型(模型机)

 

演示实例一

add $8,$9,$10格式被Latex强行改变,不知道怎么办555。。。演示加法运算

1、首先取指令,即得到得到指令的编码

  • 查指令编码表知opcode = 0,function = 0x20,shamt = 0(非移位指令)
  • opcode = 0说明这是一个R型指令(其实,所有的R型指令opcode都为0,所有opcode=0的指令也都是R型指令),根据指令操作数得到:rd = 8(目的寄存器),rs = 9(第一个源寄存器),rt=10(第二个源寄存器)

2、进行运算

CPU通过取指,就会把这条指令从内存中取出,并放入IR寄存器中,也就是指令编码的寄存器。指令译码将指令指定的寄存器(9号和10号)通过内部总线传到ALU,控制电路还会将ALU的输出通过总线传送到8号寄存器的输入。

像这样两个源寄存器、一个目的寄存器的指令编码称为R型指令,还有:

add  rd,rs,rt        //产生溢出时,会向控制器报告异常,由控制器进行相关联的处理
addu  rd,rs,rt      //发生溢出时不会报告异常
sub  rd,rs,rt        
subu  rd,rs,rt

 演示实例二

这里的源操作数都是寄存器,若有一个源操作数是立即数的话,就需要采用另一种指令——I型指令。

add  $$21,$22,-50为例

1、首先取指令,即得到得到指令的编码

  • 查指令编码表得到opcode = 8
  • 分析指令得到rs = 22(源寄存器编号),rt = 21(目的寄存器编号),immediate = -50(立即数)

2、执行过程如图,与上面的类似

这样的I型指令还有

addi  rt,rs,imm         #R[rt] = R[rs] + SignExtImm(符号扩展)
addiu  rt,rs,imm        #R[rt] = R[rs] + SignExtImm(符号扩展)

逻辑运算指令

R型

and  rd,rs,rt         #R[rd] = R[rs] & R[st]
or  rd,rs,rt         #R[rd] = R[rs] | R[rt]
nor  rd,rs,rt         #R[rd] = ~(R[rs] | R[rd])

I型

andi rt,rs,imm        #R[rt] = R[rs] & ZeroExtImm(0扩展)        
ori  rt,rs,imm        #R[rt] = R[rs] | ZeroExtImm(0扩展)

注意:在算术运算中,立即数都是采用符号扩展,而在逻辑运算中,立即数采用0扩展,这也很容易理解,因为算术运算要保证数值的正确性,如符号扩展不会改变数值大小。

参考链接:https://www.coursera.org/learn/jisuanji-zucheng/lecture/uYju6/301-suan-zhu-yun-suan-he-luo-ji-yun-suan

猜你喜欢

转载自www.cnblogs.com/lfri/p/10040377.html