MIPS introduction
10 May 2019
Instruction Set Architecture(ISA) - MIPS
連接software跟hardware中間的interface,software,hardware implement instruction set裡的指令,這樣就可以把對應的software code轉成hardware能做的指令
MIPS有32個32bits的register,運算都在register做
word: 32-bit data
Memory資料儲存方式為Big Endian: MSB的bytes在address最低處
register s0-s7: 儲存資料(變數值)
register t0-t7: 暫存資料
Design principle
- 越簡單越好,簡單的指令才能再要求高效能時有最低的運算消耗
- 越小的東西越快(因此資料都在register做而不是memory做)
- 資料要處理一定要放到register,不能在memory上處理,因此要透過(loadword,saveword,lw,sw)。因為保證instruction的資料來源都是register的話,硬體方面時做比較容易,circuit path都是那幾條,不用區分說來源是memory或register要走不同條circuit path
- make common op fast(例如常數加法, ++之類的),長樹就不用特別再去memory讀,可以直接在register裡用(addi)
- good design demands good compromise(所以有r-format, i-format,不能只有單一種format,不然處理constant運算會麻煩)
2’s complement
x’ 為x的complement(0變成1,1變成0)
x + x’ = 1111…11 = -1 故 -x = x’ + 1
因此x的負數為x的complement+1
sign extension
在上述執行addi加常數的內容,要把常數變成32/16 bit
extension方法就是把MSB繼續複製延伸
MIPS instruction
instruction是binary的形式 一個instruction是32bit word instruction包含opcode, register…
R-format
op | rs | rt | rd | shamt | funct |
---|---|---|---|---|---|
opcode | source register | second source register | destination reg | shift | extends opcode |
I-format
包含addi之類指令或者lw,sw(load/store)
op | rs | rt | constant/addr |
---|---|---|---|
Basic operation
Not
- MIPS沒有not,用nor實作(nor $t0, $t1, $zero)
conditional Op
beq rs, rt, l1 #l1: tag, true的話跳到tag l1
bne rs, rt, l1
j l1
risc(mips)沒有ble,bge,可以用bne做出來
call function
$a0 - $a4: 傳進去的參數
$v0, $v1: return value
$sp: stack pointer
$fp: frame pointer(base pointer,$ebp)
$ra: return addr
$gp global pointer for static data
$t0 - $t9: tmp變數,可以直接overwrite,不用保存原本存在裡面的值
$s0 - $s7: saved
register,要用s0,s7的暫存器時,要先把他的資料存回memory在用,用完要把存在memory的值環回來