MIPS32寄存器詳解


通用寄存器

MIPS32包含32個通用寄存器,硬件沒有強制性的指定寄存器的使用規則,但是在實際使用中,這些寄存器的用法都遵循一系列的約定。

$0 不管寫入什么值,讀該寄存器永遠返回零;

$31 永遠存在正常函數調用指令(JAL/JR)的返回地址;

$v0, $v1 用來存放一個子程序(函數)的非浮點運算的結果或者返回值,如果這兩個寄存器不夠存放需要返回的值,則通過內存完成;

$a0~a3 用來傳遞子函數調用時前4個非浮點參數,從左到右,超過4個參數使用任務棧傳遞;

$t0~t9 函數執行過程中存放臨時變量,當調用子函數時,這些寄存器中的值可以被隨意更改,無需保存;

$s0~s8 子函數必須保證當函數返回時,這些寄存器的內容必須回復到函數調用之前的值,一般是在函數入口將s0~s8壓棧,函數返回時,退棧;

$k0, $k1 異常或者中斷處理程序使用,可以隨意使用,ISR結束不需要恢復寄存器值;

$gp 全局指針,指向運行時君頂的靜態數據(static data)區域的一個位置,將gp指針作為基地址,前后32KB的數據存取,只需要一條指令即可實現;

$sp 棧頂指針,MIPS是大端模式,棧的增長方向是從高地址向低地址增長;

 

協處理器0寄存器

MIPS協處理器0是系統控制協處理器,主要實現CPU配置、高速緩存控制、異常和中斷控制、定時器、事件計數器、奇偶校驗、錯誤檢測等功能。

MIPS協處理器1是浮點協處理器,是浮點運算單元。

MIPS協處理器2偶爾用於定制的ISA擴展或者在幾個SoC應用中提供專用的寄存器。

MIPS協處理器3是浮點指令處理器,主要處理浮點運算指令,即浮點運算的控制單元。

協處理器0操作指令

1、寫CP0協處理器寄存器

mtc0    s, <n>    #把CPU通用寄存器s的值寫入CP0寄存器n中

當MIPS剛問世時,最多可以支持32個CP0寄存器,但是后續的MIPS32/64最多可以支持256個CP0寄存器。為了保持指令向前兼容,通過在CP0寄存器號(實際上是指令中以前編碼為0的域)后附加3位的select域來實現。這樣就出現了CP0 12.1這種寫法的寄存器,訪問方式如下:

mtc0    s, $12, 1 #把CPU通用寄存器s的值寫入CP0寄存器12.1中

2、讀CP0協處理器寄存器

mfc0    d, <n>    #從CP0寄存器n取值寫入CPU通用寄存器d中

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM