# 我也...可以跟電腦娘說話嗎 ###### tags: `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。 ![](https://i.imgur.com/9CnRj8M.png) ## 甚麼是ISA ISA的全名為**Instruction Set Architecture**,如果說電腦有不同的文化,ISA就是不同的語言,ISA決定了CPU可以執行怎麼樣的指令,或是同樣的一個行為,需要多少個指令才能完成。 杰哥只有碰過兩種ISA,分別為MIPs跟,RISC-V。 MIPS已經存在許久,杰哥一年前修課的時候,教授已經全部使用RISC-V教學了,近期甚至聽說了[MIPS要徹底退出](https://technews.tw/2021/03/12/mips-risc-v/),也就是說未來的CPU都不會支援MIPS的ISA了。 不過基本上學會了一種ISA,他的邏輯或是想法基本上都已經接觸過了,換成另外一種不會太困難啦,我也是聽說的,但就現在讀書沒有遇到太大的困難。 ## 指令長怎樣 因為我們寫出來的指令會經過兩層翻譯,第一層稱為**Assembly language**(組合語言),第二層稱為**Machine language**,杰哥認為兩者需要分開介紹。 ### Assembly language 首先是Assembly language,他就是很簡單的語言,我們不能宣告變數,只能使用特定的編號,編號對應到每個Register,MIPS支援的指令如下圖。 ![instruction](https://i.imgur.com/6mCyUqn.png) 舉例來說,如果我們需要將Register S1跟Register S2中的值相加放進Register S3,那個Assembly language的寫法就會是: > add $S3 $S1 $S2 MIPS規定目的地要放在第一個,另外兩個放在後面。 ### Machine language 另一個是Machine language,就是我們看到駭客任務中那些0和1,因為電腦只看得懂那些東西。 ![the matrix](https://i.imgur.com/YRArVFq.jpg) 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 | | -------- | -------- | | ![code](https://i.imgur.com/67LVDW6.png) | ![code2](https://i.imgur.com/jL65QDb.png) | 比如說剛剛的**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進位喔~ ![register](https://i.imgur.com/2csOh0I.png) ## 小試身手 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? 答案下回揭曉囉~ | 上一篇 | 下一篇 | |-|-| |[杰哥的考研紀錄](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/HkSnrzVRd)|[小學數學(bit ver.)](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/HyOUUA8RO)| ## 做出來 派大星 ![派大星](https://i.imgur.com/qQIkLVw.png)