N64程式設計/CPU概述
外觀
< N64程式設計

處理器:93.75 MHz NEC VR4300,基於MIPS R4300i系列64位RISC CPU (資訊)
32個通用暫存器,任天堂為其制定了命名約定。
- R0 = 始終為零。任何修改此暫存器的嘗試都會靜默失敗。
- T0-T9 = 臨時暫存器。CPU RAM。
- S0-S7 = 函式協議儲存的暫存器。如果您知道如何操作,可以隨意使用。
- A0-A3 = 傳遞給子程式的引數。正式但並不嚴格。
- RA = 子程式的返回地址。不從“堆疊”中提取。可以根據需要更改。
- V0-V1 = 算術值,函式返回值。
- SP = 堆疊指標。非正式的。
- AT = 彙編器臨時暫存器。自由使用。
這些是正式定義,但除了R0是硬連線外,並沒有嚴格執行。
指令為字大小(32位)。

除了CPU之外,還有三個其他協處理器。
- COP0 = 儲存器管理單元(MMU)。更廣為人知的是“虛擬記憶體”。
- COP1 = 浮點運算單元(FPU)。
- COP2 = 影片協處理器(RCP)。
執行分支時,會產生1個週期延遲。這意味著像beq r0,r0,8006D234h這樣的分支指令也會執行其後的指令。延遲槽中可以放置的指令操作碼是有限制的。
請注意,“beq r0,r0,TARGET”實際上是“bra TARGET”。
以下機器程式碼可以在馬里奧高爾夫中找到。
[1120:0027] 800B0130: BEQ t1[800FBBD0],r0[00000000],800B01D0h [0000:0000] 800B0134: NOP
在從記憶體中獲取下一條指令之前,執行NOP(無操作)。
[0c02:c0d7] 800B01B4: JAL 800B035C [0120:2021] 800B01B8: ADDU a0[00000038],t1[800FBBD0],r0[00000000]
當程式計數器設定為地址800B035C時,執行ADDU(無符號加法)。
出於我們的愛好者目的,始終在槽中低效地浪費一個NOP(無操作)並且在必要時進行最佳化,這樣會更安全。
使用MIPS指令的無符號系列時需要小心,因為符號性僅指指令是否會在溢位時生成陷阱。無論使用ADDI還是ADDIU,MIPS都會對運算元進行符號擴充套件。
LI $A0, 8013 ;A0 = 0x80130000 ADDIU $A0, $A0, FFFF ;A0 = 0x8012FFFF
基本上,即使使用無符號加法指令,當新增大於0x7FFF的值時,其效果就像該值為負數一樣。這也影響相對定址,例如:
LI $A0, 8013 ;A0 = 0x80130000 LW $A1, FFFF($A0) ;load word from 0x8012FFFF