1. 程式人生 > >計算機組成與設計(二)——算術邏輯運

計算機組成與設計(二)——算術邏輯運

 算術運算

計算機結構的簡化模型(模型機)

 

 

演示例項一

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