計算機組成原理與介面技術筆記(一)

溺死在知識的海洋發表於2018-03-30
一、MIPS運算元
32個暫存器:用於快速存取,且只能對暫存器中的數執行算數操作
2^30個儲存器字:只能通過資料傳輸指令訪問。
處理器只將少量的資料儲存在暫存器中,但儲存器有大量的資料元素,因此,複雜資料結構是存放在儲存器中的。

常數或立即數運算元
由於要使用常數必須先將其從儲存器中取出,這種操作效率低下。專門使用addi指令,這種有一個常數運算元的快速加法指令叫做立即數,這樣,只需寫成:
addi $s3,$s3,4;

例1:編譯一個運算元在儲存器中的C賦值語句
g=h+A[8];
lw $t0,8($s3);陣列基址在$s3中,偏移地址為8*4
add $s1,$s2,$t0;

例2:假設變數h放在暫存器$s2中,陣列A的基址放在$s3中。則A[12]=h+A[8];
lw $t0,32($s3)
add $t0,$t2,$t0;
sw $t0,48($s3);

二、MIPS組合語言
1.算術
2.資料傳輸
3.邏輯
例如:

邏輯右移(sll):sll $t2,$s0,4;

00161040
oprsrtrdshamtfunct
sll的編碼在op欄位和funct欄位都為0,rd為10(暫存器$t2),rt為16(暫存器$s0),shamt為4,rs欄位沒有使用,被置為0。
按位與(AND):and $t0,$t1,$t2

4.條件分支
beq register1,register2,L1該指令表示:register1和register2數值相等,則轉到標籤為L1的語句執行。
bne register1,register2,L1不相等則轉到標籤L1
例如將c語言if語句編譯後形成的MIPS程式碼。
if(i==j)f=g+h;else f=g-h;
bne $s3,$s4,Else
add $s0,$s1,$s2
j Exit
Else:sub $s0,$s1,$s2
Exit:

無條件跳轉

三、有符號數與無符號數
0000 0000 0000 0000 0000 0000 0000 0000=0;
0000 0000 0000 0000 0000 0000 0000 0001=1;
0000 0000 0000 0000 0000 0000 0000 0010=2;
~~~~
0111 1111 1111 1111 1111 1111 1111 1101=2147483645
0111 1111 1111 1111 1111 1111 1111 1110=2147483646
0111 1111 1111 1111 1111 1111 1111 1111=2147483647
1000 0000 0000 0000 0000 0000 0000 0000=-2147483648
1000 0000 0000 0000 0000 0000 0000 0001=-2147483647
1000 0000 0000 0000 0000 0000 0000 0010=-2147483646
~~~~
1111 1111 1111 1111 1111 1111 1111 1101=-3
1111 1111 1111 1111 1111 1111 1111 1110=-2
1111 1111 1111 1111 1111 1111 1111 1111=-1

二進位制補碼中最大負數-2147483648沒有相應的正數與之對應,這種不平衡會帶來一定的麻煩,但是不會給硬體設計人員帶來困擾上述表示方法可以使用2的冪次的方式來表示正的和負的32位數:
(x31*(-2^31))+(x30*2^30)+(x29*2^29)+....+(x1*2^1)+(x0*2^0)
符號為被-2^31乘,其餘的為仍按前面的方法計算。
例如:
1111 1111 1111 1111 1111 1111 1111 1100
=(-1*2^31)+(1*2^20)+(1*2^29)+...+(1*2^2)+(0*2^1)+(0*2^0)
=-2147483648+2147483644
=-4
【注:求反的捷徑】
1.對2求反,然後通過對-2求反來對結果進行檢查。
取反再加1
2+(-2)=0

四、計算機指令的表示
指令的各部分都可以看成一個獨立的數,將這些數拼接在一起就形成了指令。
暫存器$s0~$s7影射到暫存器16~23,同時,暫存器$t0~$t7對映到暫存器8~15.因此,$s0表示暫存器16,$s1表示暫存器17
例如:將一條MIPS組合語言指令翻譯成一條機器指令
add $t0,$t1,$t2的MIPS指令,首先給出其十進位制數表示形式。
0  17  18  8  0  32
(17=$s1)(18=$s2)(8=$t0),第五個欄位在這條指令中沒有用到,故置為0,第一個欄位和最後一個欄位(0和32)組合起來告訴MIPS計算機,該指令要完成加法運算。

也可以表示成二進位制的形式:

00000010001100100100000000100000
6位5位5位5位5位6位
為了將它與組合語言區別分開來,把指令的數字形式稱為機器語言,這樣的指令序列叫做機器碼。

MIPS欄位

R型指令(用於暫存器):為了是討論變得簡單,給MIPS指令的欄位命名如下:
op      rs     rt     rd     shamt     funct
6位     5位    5位    5位    5位       6位
.op:指令的基本操作,通常稱為操作碼。
.rs:第一個源運算元暫存器。
.rt:第二個源運算元暫存器。
.rd:用於存放操作結果的目的暫存器
.shamt:移位量。(移位指令和該術語,指令不使用該欄位)
.funct:功能。一般稱為功能碼,用於指明op欄位中操作的特定變式。

I型指令(用於立即數):立即數和資料傳送指令用的就是這種格式。
op      rs      rt      constant or address
6位     5位     5位     16位

例如:lw $t0,32($s3) #temporary reg $t0 gets A[8]
這裡,19(暫存器$s3)存放在rs欄位,8(暫存器$t0)存放於rt欄位,32存放於address欄位
35     19     8      32
lw     $s3    $t0    adress

相關文章