那么下面就是练习题了。
给出下面的数据段,写出打印字符串 "你好 "的代码。
.data
.asciiz “A”
.asciiz “Hello”
.globl main
main:
我在main下写了什么。
main:
lui $a0, 0x1001
addi $v0, $0, 4
syscall
我接收到的输出是 "A",很明显是因为Lui的地址不对。我的问题是,如何打印 "你好"。我是否要递增lui地址?如果是,递增多少?
我找了一下类似的答案,可惜大家都很聪明,用的是pesudo指令,我是不会用的。
先谢谢大家的帮助。
定义标签,避免在代码中使用未知的常量作为地址,这是一个很好的做法。你的代码可以改写为
.data
str1: .asciiz “A”
str2: .asciiz “Hello”
.globl main
main:
lui $a0, $str2
addi $v0, $0, 4
syscall
但为了回答你的问题,ASCII A
(0x41
)取一个单字节,null终止第一个字符串取另一个,所以 Hello
应 高出两个字节 A
. 这里的问题是,你的编译器可能会尝试对齐你的数据。最好检查你的编译器选项以完全确定。