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上)是如何做这件事的。