計算機組成與設計(二)——算術邏輯運
阿新 • • 發佈:2018-11-29
算術運算
計算機結構的簡化模型(模型機)
演示例項一
以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擴充套件,這也很容易理解,因為算術運算要保證數值的正確性,如符號擴充套件不會改變數值大小。