MIPS架构知识点

Last Updated: 2023-12-08 13:03:20 Friday

-- TOC --

MIPS架构知识点:

寄存器

32位MIPS架构共32个通用寄存器,从0开始编号,其命名规则如下:

命名 编号
$zero $0
$at $1
$v0 $2
$v1 $3
$a0 $4
$a1 $5
$a2 $6
$a3 $7
$t0 $8
$t1 $9
$t2 $10
$t3 $11
$t4 $12
$t5 $13
$t6 $14
$t7 $15
$s0 $16
$s1 $17
$s2 $18
$s3 $19
$s4 $20
$s5 $21
$s6 $22
$s7 $23
$t8 $24
$t9 $25
$k0 $26
$k1 $27
$gp $28
$sp $29
$fp $30
$ra $31

MIPS浮点数部分,有另外32个用于浮点数计算的寄存器,也许我们应该将浮点数看做一个CPU内部相对独立的部分,正如x86-64中的SIMD部分一样。只不过,编译器能很好的编译浮点数计算,确不能够自动编译出SIMD指令(也许未来会实现)。CPU内部的这些相对独立的部分越来越多,比如我们说的核显,集成的GPU,还有集成的NPU。这就是异构计算吧...难为了程序员,如何充分调用CPU的内部的计算资源,成了一个问题...

Calling Convention

指令格式

所有指令均统一4字节长!

         6        5        5        5       5          6
R:  |   op   |   rs   |   rt   |   rd   |  shamt  |  funct  | 
I:  |   op   |   rs   |   rt   |       imm or address       |
J:  |   op   |                  address                     |

只有jjal这两条指令使用J-format,此时寻址也是PC-relative方式,PC的值为当前指令地址+4,即下一条指令的地址,但只需要PC的前4bits,26bits的地址,需要乘4,即左移2位,得到28位地址,加上PC的前4位,组合乘32位地址。

在线MIPS模拟器

推荐一个还不错的在线MIPS模拟器:https://cpulator.01xz.net/?sys=mipsr5-spim

MIPS系统调用

现在一些大学依然采用MIPS教学,在做Lab的时候,需要了解MIPS体系的系统调用,来实现在模拟器上的输入和输出。MIPS系统调用整理如下表:

system call Code in $v0 Arguments Result
print_int 1 $a0=integer
print_float 2 $f12=float
print_double 3 $f12=double
print_string 4 $a0=address of string
read_int 5 int in $v0
read_float 6 float in $f0
read_double 7 double in $f0 ?
read_string 8 $a0=buffer address, $a1=length
sbrk 9 $a0=amount address in $v0
exit 10

这些应该足够应付Lab了...

本文链接:https://cs.pynote.net/hd/asm/202310145/

-- EOF --

-- MORE --