MIPS 打印字符串
MIPS printing string
下面是练习题:
给定下面的数据段,编写代码打印字符串“Hello”
.data
.asciiz “A”
.asciiz “Hello”
.globl main
main:
我在main下写的:
main:
lui $a0, 0x1001
addi $v0, [=11=], 4
syscall
我收到的输出是"A",显然是因为lui地址错误。我的问题是,如何打印 "Hello"。我要增加 lui 地址吗?如果是,通过什么?
我搜索了类似的答案,不幸的是人们很聪明并且使用伪指令,我无法使用。
提前感谢您的帮助。
最好定义标签并避免在代码中使用未知常量作为地址。您的代码可以重写为
.data
str1: .asciiz “A”
str2: .asciiz “Hello”
.globl main
main:
lui $a0, $str2
addi $v0, [=10=], 4
syscall
但是为了回答你的问题,ASCII A
(0x41
) 占用一个字节,以空字符结尾的第一个字符串占用另一个字节,因此 Hello
应该 比 A
高两个字节。这里的问题是您的编译器可能会尝试对齐您的数据。最好检查您的编译器选项以完全确定。
下面是练习题:
给定下面的数据段,编写代码打印字符串“Hello”
.data
.asciiz “A”
.asciiz “Hello”
.globl main
main:
我在main下写的:
main:
lui $a0, 0x1001
addi $v0, [=11=], 4
syscall
我收到的输出是"A",显然是因为lui地址错误。我的问题是,如何打印 "Hello"。我要增加 lui 地址吗?如果是,通过什么?
我搜索了类似的答案,不幸的是人们很聪明并且使用伪指令,我无法使用。
提前感谢您的帮助。
最好定义标签并避免在代码中使用未知常量作为地址。您的代码可以重写为
.data
str1: .asciiz “A”
str2: .asciiz “Hello”
.globl main
main:
lui $a0, $str2
addi $v0, [=10=], 4
syscall
但是为了回答你的问题,ASCII A
(0x41
) 占用一个字节,以空字符结尾的第一个字符串占用另一个字节,因此 Hello
应该 比 A
高两个字节。这里的问题是您的编译器可能会尝试对齐您的数据。最好检查您的编译器选项以完全确定。