計算機組成原理學習筆記————計算機指令,MIPS指令集,存儲器操作數,數據傳送指令,取數存數指令

計算機語言

現在計算機編程常用的語言是C,C++,Java等高級語言,但計算機第層是將高級編程語言的代碼編譯成二進制代碼形式的指令才能執行。所以計算機語言中的基本單詞是二進制形式的指令,一臺計算機的全部指令稱爲該計算機的指令集。 二進制的指令是很難編寫且理解的,所以在高級語言和二進制語言之間還有一個彙編語言,進行兩者轉換時的銜接。彙編語言與二進制語言存在着一一對應的關係。接下來要講的指令就是彙編語言層面的指令。

MIPS操作數

MIPS是常用的一個指令集。有32個操作數。

名字 示例 註釋
32個寄存器 $ s0~ $ s7, $ t0~ $ t9, $ zero, $ a0~$ a3, $ v0 ~ $ v1, $ gp, $ fp, $ sp, $ra, $at 寄存器用於數據的快速取.在MIPS中,只能對存放在寄存器中的數據執行算術操作,寄存器$ zero的值恆爲0,寄存器$at被彙編器保留,用於處理大的常數
230個存儲器字 Memory[0], Memory[4], …Memory[4294967292] 存儲器只能通過數據傳輸指令訪問。MIPS使用字節編址,所以連續的字地址相差4。存儲器用於保存數據結構、數組和溢出的寄存器

計算機硬件的操作

計算機的指令一般有三個操作數:兩個進行運算的數和一個保存結果的數。MIPS算術運算中指令的操作數必須來自寄存器。寄存器是硬件的基本構成元素,可以理解爲用於暫存數據的一個存儲單元。容量小但運行速度快。在MIPS體系結構中寄存器的大小爲32位,計算機中的存儲單元也經常以32位爲一組,所以將32爲一組的基本訪問單位稱爲字。
在MIPS指令體系中用一個“ $ ”符號後面跟兩個字符來代表一個寄存器。例如$ s0, $ t0 。

加法減法指令

加法指令格式: add $ t0, $ s1,$ s2
減法指令格式: sub $ t0, $ s1,$ s2

$ s1, $ s2爲進行運算的兩個寄存器,$ t0 是用來保存計算結果的寄存器。 運算操作數不能大於2個,寄存器不能只能爲三個。
例題:在這裏插入圖片描述

存儲器操作數

因爲MIPS只有32個寄存器,也就是一次最多隻能存放32個數據,這肯定是遠遠不能滿足需求的。有的時候我們用的數組或者結構這樣的數據類型,存儲的數據量就會大於32,那該如何訪問和表示這樣的結構呢?
因此除了寄存器外,還有一個存儲器。存儲器用來存放較大的數據結構。那麼就需要一個指令來將數據從存儲器中讀取到寄存器中,或者從寄存器存儲到存儲器中。這就是數據傳送指令。一個數據傳送指令給出了存儲器地址。

數據傳送指令

數據傳送指令:在存儲器和寄存器之間移動數據的命令。
地址: 用於在存儲器空間中知名某特定數據元素位置的值。

取數指令

取數指令(load,lw):從存儲器讀取數據複製到寄存器中的數據傳送指令。取數指令的格式是操作碼後接着目標寄存器,再後面是用來訪問存儲器的常數和寄存器。常數和第二寄存器中的值相加得到存儲器地址
例如讀取含有100個字的數組A中的第8個元素,數組A的起始地址(基址)存放在寄存器$ s3中。 指令爲**lw $ t0, 8($ s3) ** 其中lw即爲操作碼 $ t0 爲目標寄存器, 8爲常數,即相對於數組A起始地址的偏移量, $ s3爲要讀取的寄存器。

基址寄存器: 存放基址的寄存器
當然,讀取的寄存器不一定非得是數組的基址寄存器,還可以的一個變量的寄存器,比如:
lw $ t0 1($s3)

在MIPS體系結構中,連續字的地址相差4,因爲一個字的地址由4個字節組成。因此在上面去A[ 8 ]的例子中,偏移量應該是4*8=32,所以正確的指令是lw $ t0, 32($ s3)

存數指令

有取數必定有存數,將數據從寄存器複製到存儲器中。指令格式依舊是 操作碼+目標寄存器+偏移量(基址寄存器) ,在MIPS中存數指令爲sw,即store word。
例題:
假設變量h存放在寄存器$ s2中,數組A的基址放在$ s3中,試編譯下面的C賦值語句:
A[ 12 ] = h + A[ 8 ] ;
答案如下:
lw $ t0, 32($ s3)
add $ t0, $ s2, $ t0
sw $ t0, 48($ s3)

在這裏插入圖片描述

常數或立即數操作數

前面講的都是關於變量的操作,即在計算機中有明確分配內存的數據,內存可能分配在存儲器中,也可能分配在寄存器中。但有時我們需要用到一個常數,即沒有分配內存,而直接使用的數,比如將某個變量加1,將數組下標加1.因此有了立即數加法,addi。指令示例如下:
addi $ s3 , $ s3 , 4 即 $ s3 = $ s3 + 4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章