MIPS CPU寄存器和系统控制协处理器CP0 分析

来源:互联网 发布:淘宝的英树是正品吗 编辑:程序博客网 时间:2024/05/22 14:04
    MIPS CPU 寄存器包括:32个通用寄存器,3个特殊功能寄存器和MIPS FPU寄存器。
    MIPS的寄存器比X86(X86系统的寄存器有14个,划分为四类:通用寄存器,指令指针寄存器,标志寄存器,段寄存器)要多,有35个,但其中有32个(r0~31)是通用寄存器,两个(HI,LO)是特殊功能寄存器(用于存储整数乘除和乘/累加操作的结果),还有一个是特殊功能程序计数器PC(program counter),由特定指令直接操作,对程序员不可见。也就是说,程序员面对的寄存器只有两种:通用寄存器和特殊功能寄存器。也就是说,程序员面对的寄存器只有两种:通用寄存器和特殊功能寄存器。关于FPU寄存器可以参考【1】
------------------------
32个通用寄存器:
0 zero 永远返回值为0
1 at 用做汇编器的暂时变量
2-3 v0, v1 子函数调用返回结果
4-7 a0-a3 子函数调用的参数
8-15 t0-t7 暂时变量,子函数使用时不需要保存与恢复
24-25 t8-t9
16-25 s0-s7 子函数寄存器变量。子函数必须保存和恢复使用过的变量在函数返回之前,从而调用函数知道这些寄存器的值没有变化。
26,27 k0,k1 通常被中断或异常处理程序使用作为保存一些系统参数
28 gp 全局指针。一些运行系统维护这个指针来更方便的存取“static“和”extern"变量。
29 sp 堆栈指针
30 s8/fp 第9个寄存器变量。子函数可以用来做桢指针
31 ra 子函数的返回地
------------------
MIPS 指令
LONG_L        t2, 0(a1)        //把a0的内容+0,存储到t2中。即从内存中读取内容到寄存器t2.
LONG_S        sp, 0(t2)        //把sp的内容存储到t2的内容+0的位置处。即从寄存器sp中读取内容存储到内存中。
.......
-------------------
MIPS的协处理器CP0
    在MIPS体系结构中,最多支持4个协处理器(Co-Processor)。其中,协处理器CP0是体系结构中必须实现的。它起到控制CPU的作用。MMU、异常处理、乘除法等功能,都依赖于协处理器CP0来实现。MIPS的CP0包含32个寄存器。
如何访问这些寄存器:
mtc0        rs, <nn>        #把数据从rs送到CP0
dmtc0    rs,     <nn>    #把双字数据从rs送到CP0
----
mfc0        rd, <nn>        #从CP0中取出数据放入rd中
dmfc0    rd, <nn>        #从CP0中取出双字数据放入rd中
--------------------
【1】《MIPS体系结构与编程》,刘佩林/谭志明    , 科学出版社
原创粉丝点击