Assembly 如何在MIPS中访问全局变量?

Assembly 如何在MIPS中访问全局变量?,assembly,compiler-construction,mips,Assembly,Compiler Construction,Mips,我见过通过名称直接访问全局变量,例如在以下视频中: 例如: .data sum: .word 0 .text .globl main main: sw $a0, sum 这在MARS 4.2上无法编译,我得到以下错误: line 13 column 9: "sw": Too few or incorrectly formatted operands. Expected: sw $t1,-100($t2 我还看到在以

我见过通过名称直接访问全局变量,例如在以下视频中:

例如:

        .data
sum:    .word 0
        .text
        .globl  main

main:
        sw $a0, sum
这在MARS 4.2上无法编译,我得到以下错误:

line 13 column 9: "sw": Too few or incorrectly formatted operands. Expected: sw $t1,-100($t2

我还看到在以下网站上使用sum($gp):

所以我写了

        .data
sum:    .word 0
        .text
        .globl  main

main:
        lw $a0, sum($gp)
也无法编译,出现以下错误:

line 11 column 17: "sum": operand is of incorrect type

背景信息:

我正在写一个编译器。我知道我可以通过$gp的文本偏移量访问全局变量,但我正试图避免需要的枚举和查找过程。请告诉我,我可以通过名字访问它们,我只是使用了一些不可靠的火星版本。

我从火星4.2(我的学校上学期强迫我们使用)更新到火星4.5,这解决了我的问题。

sum
是一个地址,即32位的数量。它太大,无法装入16位寄存器偏移量。汇编语言由汇编程序定义,即进行汇编的程序。所以这并不是MIPS的事情,而是汇编程序X(发生在目标MIPS上)是如何做这件事的。