下面我有
.globl main
.data
prompt:
.asciiz "Hello world!"
.text
main:
addi $v0, $v0, 4
lui $a0, 0x1000
syscall
rtn:
jr $ra
现在,我不确定为什么字符串不打印,它运行时没有语法错误。此外,我不允许使用任何伪指令,所以这就是为什么我这样做的时间稍长。那是错误的来源,我不知道提示字符串存储在哪里?任何帮助表示赞赏!
谢谢!
答案 0 :(得分:1)
注意,如果地址为0x1000,则表示高16位全为零,低16位为0x1000。您正在加载高16位。因此,而不是lui $a0, 0x1000
尝试addiu $a0, $0, 0x1000
但是,汇编程序的符号操作表达式不应该算作伪指令,所以也应该允许这样的GAS代码(或汇编程序中的等价代码):
lui $a0, %hi(prompt)
ori $a0, $a0, %lo(prompt)
答案 1 :(得分:1)
在SPIM中,.data
部分默认从地址0x10010000开始。因此,要在不使用伪指令的情况下打印Hello World字符串,您可以使用:
.globl main
.data
prompt:
.asciiz "Hello world!"
.text
main:
addi $v0, $zero, 4
lui $a0, 0x1001 # $a0 = 0x10010000
syscall
rtn:
jr $ra