這段代碼中的“GREG @”有什么作用?我知道它保留了一個全域暫存器,但為什么我們需要它呢?
LOC Data_Segment
GREG @
Y OCTA 0
x IS $1
buf1 IS $2
buf2 IS $3
LOC #100
Main FLOT buf1,157
FLOT buf2,50
FDIV x,buf1,buf2
STO x,Y
TRAP 0,Halt,0
uj5u.com熱心網友回復:
MMIX 指令集沒有絕對尋址模式。相反,與 RISC 架構一樣,唯一可用的尋址模式是帶有基址暫存器和 8 位立即數或暫存器索引的索引尋址模式。因此,從記憶體中加載變數需要您首先將附近的地址加載到暫存器中。這是通過GREG @指令實作的:它使用當前地址分配一個全域暫存器,允許訪問附近的全域變數(在這種情況下,即變數Y)。
在更復雜的程式中,您可能希望選擇不同的方法,因為您將很快用完全域暫存器。一種解決方案是在代碼旁邊存盤一個地址池,并使用GETA如下指令加載該池的地址:
...
GETA $4, pool @ obtain the address of the pool
LDOU $5, $4, 0 @ load the address of Y from the pool
STO x, $5, 0 @ store x to Y
...
pool OCTA Y @ literal pool holding Y
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/515476.html
