Skip to content

mips

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" MIPS 指令集合
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|------+--------------+------------------------------------|
| name | type         | explanation                        |
|------+--------------+------------------------------------|
| add  | add $1,$2,$3 | $1 = $2+$3                         |
| addu |              | 无符号数                           |
| addi |              |                                    |
| and  | and $1,$2,$3 |                                    |
| nor  |              | $1=~($2\|$3)                       |
| sll  | sll $1,$2,10 | $1 = $2 << 10                      |
| srl  |              |                                    |
| sra  |              | 算术移位                           |
|------+--------------+------------------------------------|
| slt  | slt $1,$2,$3 | $1 = ($2 < $3) ? 1 : 0             |
| sltu |              | $2和$3无符号比较                   |
|------+--------------+------------------------------------|
| lw   | lw $1,8($2)  | $1 = M[$2+8]                       |
| sw   | sw $1,8($2)  | M[$2+8] = $1 (四个字节)            |
| sh   | sh $1,8($2)  | M[$2+8] = $1 (两个字节)            |
| sb   | sb $1,8($2)  | M[$2+8] = $1 (一个字节)            |
|------+--------------+------------------------------------|
| jr   | jr $31       | PC = $31                           |
| j    | j num        | PC = (PC+4)[31..28] ++ num/4 ++ 00 |
| jal  | jal num      | $31 = PC+4; PC = j num             |
|------+--------------+------------------------------------|


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" MIPS 寄存器
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|-------+--------+----------------------------------------|
| name  | number | explanation                            |
|-------+--------+----------------------------------------|
| zero  | 0      | 储存0                                  |
| v0,v1 | 2,3    | 子程序返回值                           |
| a0-a3 | 4-7    | 函数调用的参数                         |
| t0-t7 | 8-15   | 临时值                                 |
| s0-s7 | 16-23  | 如果子程序对其更改,最后要把值还原回去 |
| sp    | 29     | 堆栈指针                               |
| ra    | 31     | 子程序返回地址                         |
|-------+--------+----------------------------------------|


""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" MIPS的寻址方式
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|----------------+----------------+-----------------|
| name           | MIPS example   | X86 example     |
|----------------+----------------+-----------------|
| 立即寻址       | addi $1,$2,100 | MOV AX,0        |
| 直接寻址       | 无             | MOV AX,[200H]   |
| 一次间接寻址   |                |                 |
| 寄存器寻址     | add $1,$2,$3   | MOV AX,BX       |
| 寄存器间接寻址 |                | MOV AX,[BX]     |
| 相对寻址       |                | MOV AX,[SI+10H] |
| 基址寻址       |                |                 |
| 变址寻址       |                |                 |
|----------------+----------------+-----------------|
相对寻址 : 某个确定的数(PC/寄存器)+指令中的数,不涉及内存
间接寻址 : 指令拿到一个数之后还要到内存里面再去拿另外一个数
基址寻址,变址寻址

Comments