###### tags: `computer organization` `note` `thu`
{%hackmd theme-dark %}
# computer organization Chapter 2
## R-Type

### Addressing mode: ***Register addressing***
* 使用5 bit的資料來指定放資料的register (共三組)
* `shamt`: shift amount
* `funct`: function code (op code的延伸)
### 數值運算類
1. `add`, `addu` (unsigned)
2. `sub`, `subu` (unsigned)
3. `mul` (沒有overflow), `mult`, `multu` (unsigned)
4. `div`, `divu` (unsigned)
### 邏輯/位元運算類
1. `and`, `or`, `nor`, `xor`
2. `sll`, `srl` (左移/右移)
3. `sllv`, `srlv` (使用register內的偏移量左移/右移)
### 流程控制類
1. `jr` (跳至register內的地址)
2. `slt` (把比大小的結果存起來)
## I-Type

### Addressing mode: ***Base addressing***
* `rs`裡的 base address + `constant or address`裡的offset
1. 資料存取類
a. `sb`, `lb`, `lbu` (unsigned)
b. `sh`, `lh`, `lhu` (unsigned)
c. `sw`, `lw`, `lwu` (unsigned)
### Addressing mode: ***Immediate addressing***
* `constant or address` 直接放資料
1. 運算類
a. `addi`, `addiu` (unsigned)
b. `andi`, `ori`, `xori`,
2. 資料存取類
a. `lui` (載入upper 16 bit 的 immediate value)
### Addressing mode: ***PC-relative addressing***
* `PC`(program counter) + `constant or address`
1. 流程控制類 (branch on...)
a. `beq`, `bne` ($=$ / $\neq$)
b. `bgtz`, `bgez` ($>0$ / $\geq 0$)
c. `bltz`, `blez` ($<0$ / $\leq 0$)
## J-Type

### Addressing mode: ***Pseudodirect addressing***
* (幾乎)直接存取address內的address
* 因為MIPS的架構下,記憶體為32bit
* 但26bit是不夠拿來直接定址的
* 因此我們使用PC裡比較高的4bit加上最後的兩個0
* 就可以進行直接定址了(因為MIPS的指令都為4byte)
1. 流程控制類
a. `j`, `jal`
## Pseudo Instruction
* 無此指令,但可用別的指令組合而成
1. 流程控制類 (branch on...)
a. `bgt`, `bge` ($>$ / $\geq$)
b. `blt`, `ble` ($<$ / $\leq$)
2. 資料移動
a. `move $t0, $t1` -> `add $t0, $zero, $t1`
## Register 對應的編號

## 參考資料
https://www.d.umn.edu/~gshute/mips/rtype.xhtml
https://www.d.umn.edu/~gshute/mips/itype.xhtml
https://www.dsi.unive.it/~gasparetto/materials/MIPS_Instruction_Set.pdf
https://rmd.ac.in/dept/ece/Supporting_Online_%20Materials/5/CAO/unit2.pdf
https://phoenix.goucher.edu/~kelliher/f2009/cs220/mipsir.html