这段代码中的"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发布于 2022-10-14 10:52:38
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 Yhttps://stackoverflow.com/questions/74068042
复制相似问题