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

  1. 越簡單越好,簡單的指令才能再要求高效能時有最低的運算消耗
  2. 越小的東西越快(因此資料都在register做而不是memory做)
  3. 資料要處理一定要放到register,不能在memory上處理,因此要透過(loadword,saveword,lw,sw)。因為保證instruction的資料來源都是register的話,硬體方面時做比較容易,circuit path都是那幾條,不用區分說來源是memory或register要走不同條circuit path
  4. make common op fast(例如常數加法, ++之類的),長樹就不用特別再去memory讀,可以直接在register裡用(addi)
  5. 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的值環回來