MIPS體系結構 1

2021-05-23 07:31:33 字數 2028 閱讀 1098

暫存器編號  助記符     用法

0            zero       永遠返回值為0

1            at         用做彙編器的暫時變數

2-3          v0, v1     子函式呼叫返回結果

4-7          a0-a3      子函式呼叫的引數

8-15         t0-t7      暫時變數,子函式使用時不需要儲存與恢復

24-25        t8-t9

16-23        s0-s7      子函式暫存器變數。子函式必須儲存和恢復使用過的變數在函式返回之前,從而呼叫函式知道這些暫存器的值沒有變化。

26,27        k0,k1      通常被中斷或異常處理程式使用作為儲存一些系統引數

28           gp         全域性指標。一些執行系統維護這個指標來更方便的訪問「static「和」extern"變數。

29           sp         堆疊指標

30           s8/fp      第9個暫存器變數。子函式可以用來做楨指標

31           ra         子函式的返回位址

*at: 這個暫存器被彙編的一些合成指令使用。如果你要顯式地使用這個暫存器(比如在異常處理程式中儲存和恢復暫存器),有乙個彙編directive 可被用來禁止彙編器在directive 之後再使用at 暫存器(但是彙編的一些巨集指令將因此不能再可用)。 

*v0, v1: 用來存放乙個子程式(函式)的非浮點運算的結果或返回值。如果這兩個暫存器不夠存放需要返回的值,編譯器將會通過記憶體來完成。

*a0-a3: 用來傳遞子函式呼叫時前4 個非浮點引數。在有些情況下,這是不對的。

* t0-t9: 依照約定,乙個子函式可以不用儲存並隨便的使用這些暫存器。在作表示式計算時,這些暫存器是非常好的暫時變數。編譯器/程式設計師必須注意的是,當呼叫乙個子函式時,這些暫存器中的值有可能被子函式破壞掉。

*s0-s8: 依照約定,子函式必須保證當函式返回時這些暫存器的內容必須恢復到函式呼叫以前的值,或者在子函式裡不用這些暫存器或把它們儲存在堆疊上並在函式退出時恢復。這種約定使得這些暫存器非常適合作為暫存器變數或存放一些在函式呼叫期間必須儲存原來值。

* k0, k1: 被os 的異常或中斷處理程式使用。被使用後將不會恢復原來的值。因此它們很少在別的地方被使用。

* gp: 如果存在乙個全域性指標,它將指向執行時決定的,你的靜態資料(static data)區域的乙個位置。這意味著,利用gp 作基指標,在gp 指標32k 左右的資料訪問,系統只需要一條指令就可完成。如果沒有全域性指標,訪問乙個靜態資料區域的值需要兩條指令:一條是獲取有編譯器和loader 決定好的32 位的位址常量。另外一條是對資料

的真正訪問。為了使用gp, 編譯器在編譯時刻必須知道乙個資料是否在gp 的64k 範圍之內。通常這是不可能的,只能靠猜測。一般的做法是把small global data (小的全域性資料)放在gp 覆蓋的範圍內(比如乙個變數是8 位元組或更小),並且讓linker 報警如果小的全域性資料仍然太大從而超過gp 作為乙個基指標所能訪問的範圍。並不是所有的編譯和執行系統支援gp 的使用。

*sp: 堆疊指標的上下需要顯示的通過指令來實現。因此mips 通常只在子函式進入和退出的時刻才調整堆疊的指標。這通過被呼叫的子函式來實現。sp 通常被調整到這個被呼叫的子函式需要的堆疊的最低的地方,從而編譯器可以通過相對於sp 的偏移量來訪問堆疊上的堆疊變數。詳細可參閱10.1 節堆疊使用。

* fp: fp 的另外的約定名是s8。如果子函式想要在執行時動態擴充套件堆疊大小,fp 作為楨指標可以被子函式用來記錄堆疊的情況。一些程式語言顯示的支援這一點。彙編程式設計員經常會利用fp 的這個用法。c 語言的庫函式alloca()就是利用了fp 來動態調整堆疊的。如果堆疊的底部在編譯時刻不能被決定,你就不能通過sp 來訪問堆疊變數,因此fp 被初始化為乙個相對與該函式堆疊的乙個常量的位置。這種用法對其他函式是不可見的。

* ra: 當呼叫任何乙個子函式時,返回位址存放在ra 暫存器中,因此通常乙個子程式的最後乙個指令是jr ra.

子函式如果還要呼叫其他的子函式,必須儲存ra 的值,通常通過堆疊。

MIPS體系結構剖析,程式設計與實踐 1

第一章 mips cpu 體系結構概述 陳懷臨1。序言 本文介紹mips體系結構,著重於其暫存器約定,mmu及儲存管理,異常和中斷處理等等。通過本文,希望能提供乙個基本的輪廓概念給對mips cpu及之上os有興趣的讀者。並能開始閱讀更詳細的歸約 specification 資料。mips是最早的,...

軟體體系結構 1概論

工程 廣義 由一群人為達到某種目的,在乙個較長時間週期內進行協作活動的過程 軟體工程 是一門研究用工程化方法,構建和維護有效的 實用的和高質量的軟體的學科 軟體危機主要表現 成本日益增長 開發進度難以控制 軟體質量差 維護困難 軟體危機產生原因 使用者需求不明確 缺乏正確的理論指導 軟體規模越來越大...

PCI Express體系結構導讀(1)

前言1 深入理解處理器體系結構是理解pci匯流排的重要基礎,超越pci自身,去理解系統的區域性匯流排。2004年開始pcie取代pci和agp,成為區域性匯流排工業標準。pci 並行共享架構,pcie序列 剛剛接觸pci不要去讀規範文件,規範文件適合查閱,不便於學習。2 第一篇,pci匯流排基礎知識...