iT邦幫忙

DAY 17
0

淺入淺出-計算機組織系列 第 17

淺入淺出計組之旅(17)算術運算與邏輯運算

  • 分享至 

  • xImage
  •  

本來想繼續補齊第二周前面的 x86 課程

不過卻發現已經有厲害的網友寫了 x86架構方興未艾 這個主題

所以就直接前進第三周的硬體實現部分好了XD

之前是使用 ADD R0, [6] 為例來說明一條指令是如何被執行的

請參考 淺入淺出計組之旅(05)計算機執行指令的過程

這條比較接近 x86 的指令,因為他可以直接對存儲器進行操作

而為了讓執行步驟精簡,接下來我們會採用先前介紹的 MIPS 來做範例

add $8, $9, $10 = 000000 01001 01010 01000 00000 10000

這條編碼將會儲存在存儲器中,當 CPU 要執行這條指令時

會如先前所說把它從存儲器搬到 IR 暫存器中進行譯碼

當翻譯出這是一條 R 型加法指令後控制電路會發出訊號給運算器

接這通過內部總線連接將 R9, R10 分別連到運算器的輸入兩端

運算器進行加法運算後再將結果通過內部總線傳到 R8 儲存,完成一次加法運算

接下來如果是有立即數的加法運算呢

addi $21 = $22 + (-50) = 001000 10110 10101 1111 1111 1100 1110

我們可以看到與上方不同的是當 CPU 知道有一個來源是立即數

他就會通過內部總線直接擷取指令的後 16bits 傳給運算器

值得注意的是因為立即數只有 16bits,而暫存器都是 32bits

所以這裡必須做 SignExtension = { 16 { imm[15] } , imm }

也就是在 imm 的前方補上 16位 imm 最高位數字

如果是正數當然是零,如果是負數則都補上一

如此一來就可以將原先的 16位數延伸成數值相同的 32位數

下圖就是算術運算的指令說明

除了算術運算還有一大類是邏輯運算,邏輯運算基本上與算術運算相同

差別在於立即數的擴展是通通補上零,因為在邏輯運算時並沒有正負數的考量

1'b0 一開始看不太懂,後來查了一下發現是 一位元二進制之值為1

明天將繼續說明這些運算是怎麼具體實現的~:)


上一篇
淺入淺出計組之旅(16)MIPS 體系結構 (6)
下一篇
淺入淺出計組之旅(18)邏輯門電路的基本原理
系列文
淺入淺出-計算機組織30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言