所以这是练习题:
鉴于下面的数据段,编写代码以打印字符串“Hello”
.data
.asciiz “A”
.asciiz “Hello”
.globl main
main:
我在main下写的内容:
main:
lui $a0, 0x1001
addi $v0, $0, 4
syscall
我收到的输出是" A",显然它是因为lui地址错误。我的问题是,我如何打印"你好"。我是否增加了lui地址?如果是这样,通过什么?
我一直在寻找类似的答案,不幸的是人们很聪明并且使用了伪造的指令,我无法使用。
提前感谢您的帮助。
答案 0 :(得分:1)
定义标签并避免在代码中使用未知常量作为地址是一种很好的做法。您的代码可以重写为
.data
str1: .asciiz “A”
str2: .asciiz “Hello”
.globl main
main:
lui $a0, $str2
addi $v0, $0, 4
syscall
但是要回答你的问题,ASCII A
(0x41
)只占用一个字节,null终止第一个字符串需要另一个字符串,因此Hello
应该比A
高两个字节。这里的问题是您的编译器可能会尝试对齐您的数据。更好地检查您的编译器选项是否完全确定。