MIPS寄存器约定:
寄存器编号/助记符/用法
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 子函数的返回地
===============================================
在bootloader下,MIPS核的初始化用汇编语言写成,基本过程是
1〉清除CP0的WATCH寄存器
mtc0 zero, C0_WATCHLO /* First thing: clear watch regs */
mtc0 zero, C0_WATCHHI
2〉初始化CP0状态寄存器,禁止软硬件中断以及选择boot异常向量地址
3〉根据需要建立MIPS的状态和控制寄存器,通常会清除(ERL、EXL位)
4〉初始化cache,先初始化ICACHE,在初始化DCACHE(具体过程)
5〉开始初始化外围接口(init_platform),主要是初始化时钟系统、EMIF接口等。