IT鐵人
首篇不會給大家太多壓力,簡單介紹我們寫出來的程式往下是怎麼被電腦讀取的,本篇以MIPS為ISA討論。
所謂的電腦,英文稱為Computer,而compute的中文為計算,所以電腦的基本功能就是能夠計算,並且如果需要大量快速運算,必定需要存取數據,所以為了造出一台電腦,我們必定需要計算的單元以及儲存的單元。
運算的單元最著名的為ALU(Arithmetic logic unit),它提供了多種運算功能如加減法以及邏輯的AND、OR、XOR等等。
儲存的單元則是有必須在CPU中快速拿出計算的Register、程式當下需要的存取空間Memory,不過以上的儲存空間大小從Register的KB到Memory的MB而已,另外我們會裝的HDD跟SSD才會往上做到GB甚至TB,不過那個不在這次的討論範圍,容杰哥跳過一下。
下圖為CPU以及儲存裝置的示意圖,右邊就是我們插在主機板上一條一條的Memory,底下指的就是HDD或是SSD。
ISA的全名為Instruction Set Architecture,如果說電腦有不同的文化,ISA就是不同的語言,ISA決定了CPU可以執行怎麼樣的指令,或是同樣的一個行為,需要多少個指令才能完成。
杰哥只有碰過兩種ISA,分別為MIPs跟,RISC-V。
MIPS已經存在許久,杰哥一年前修課的時候,教授已經全部使用RISC-V教學了,近期甚至聽說了MIPS要徹底退出,也就是說未來的CPU都不會支援MIPS的ISA了。
不過基本上學會了一種ISA,他的邏輯或是想法基本上都已經接觸過了,換成另外一種不會太困難啦,我也是聽說的,但就現在讀書沒有遇到太大的困難。
因為我們寫出來的指令會經過兩層翻譯,第一層稱為Assembly language(組合語言),第二層稱為Machine language,杰哥認為兩者需要分開介紹。
首先是Assembly language,他就是很簡單的語言,我們不能宣告變數,只能使用特定的編號,編號對應到每個Register,MIPS支援的指令如下圖。
舉例來說,如果我們需要將Register S1跟Register S2中的值相加放進Register S3,那個Assembly language的寫法就會是:
add $S3 $S1 $S2
MIPS規定目的地要放在第一個,另外兩個放在後面。
另一個是Machine language,就是我們看到駭客任務中那些0和1,因為電腦只看得懂那些東西。
MIPS只有三種類型的指令,分別為R-type、I-type、J-type。
R-type:指定三個Register
I-type:指定兩個Register
J-type:跳躍
每個指令都是32bits,也就是說由32個0或1組成。
只要對照底下的表格,我們就能在Assembly language跟Machine language之間轉換了。
![type](https://i.imgur.com/cg5S3QX.png =50%x50%)
R-type | I-type |
---|---|
比如說剛剛的add $S3 $S1 $S2就變成
000000 10001 10010 10011 00000 100000
跟R-type好好比對就是
op(6) | rs(5) | rt(5) | rd(5) | shamt(5) | funct(6) |
---|---|---|---|---|---|
000000 | 10001 | 10010 | 10011 | 00000 | 100000 |
底下是Register的10進位對照表,別忘記轉換成2進位喔~
In the following problems, the data table contains the values of various fields of MIPS instructions.
a. | op = 0, rs = 1, rt = 2, rd = 3, shamt = 0, funct = 32 |
b. | op = 43, rs = 16, rt = 5, immediate = 4 |
What is the MIPS assembly instruction described above?
What type instruction do the instructions above represent?
What is the binary representation of the instructions above?
答案下回揭曉囉~
上一篇 | 下一篇 |
---|---|
杰哥的考研紀錄 | 小學數學(bit ver.) |