首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我们要在MMIX中保留一个全球注册?

为什么我们要在MMIX中保留一个全球注册?
EN

Stack Overflow用户
提问于 2022-10-14 10:44:44
回答 1查看 37关注 0票数 2

这段代码中的"GREG @"是做什么的?我知道它保留了一个全球注册,但我们为什么需要它呢?

代码语言:javascript
复制
            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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-14 10:52:38

MMIX指令集没有绝对寻址模式。相反,与RISC体系结构一样,唯一可用的寻址模式是具有基本寄存器和8位即时或寄存器索引的索引寻址模式。因此,从内存中加载变量需要首先将附近的地址加载到寄存器中。这是通过GREG @指令实现的:它用当前地址分配全局寄存器,允许访问附近的全局变量(在本例中是变量Y)。

在更复杂的程序中,您可能希望选择一种不同的方法,因为很快就会耗尽全局寄存器。一种解决方案是在代码旁边存储一个地址池,并使用如下的GETA指令加载该池的地址:

代码语言:javascript
复制
        ...
        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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74068042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档