0

下面我有

.globl main
.data
prompt:
        .asciiz  "Hello world!"
.text
main:
    addi $v0, $v0, 4
    lui $a0, 0x1000
    syscall
rtn:
    jr $ra

现在,我不确定为什么字符串没有打印,它运行时没有语法错误。另外,我不允许使用任何伪指令,所以这就是为什么我这样做的时间稍长一些。那就是错误出现的地方,我不知道提示字符串存储在哪里?任何帮助表示赞赏!

谢谢!

4

2 回答 2

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
于 2013-10-14T16:36:29.507 回答
1

请注意,如果地址为 0x1000,则表示高 16 位全为零,低 16 位为 0x1000。您正在加载高 16 位。所以不要lui $a0, 0x1000尝试addiu $a0, $0, 0x1000

然而,你的汇编器的符号操作表达式不应该算作伪指令,所以像这样的 GAS 代码(或你的汇编器中的等效代码)也应该被允许:

lui $a0, %hi(prompt)
ori $a0, $a0, %lo(prompt)
于 2013-10-14T16:13:43.187 回答