MIPS打印字符串

时间:2015-05-23 18:41:31

标签: mips

所以这是练习题:

鉴于下面的数据段,编写代码以打印字符串“Hello”

.data
     .asciiz    “A”
     .asciiz    “Hello”
.globl main
main:

我在main下写的内容:

main:
lui $a0, 0x1001
addi $v0, $0, 4
syscall

我收到的输出是" A",显然它是因为lui地址错误。我的问题是,我如何打印"你好"。我是否增加了lui地址?如果是这样,通过什么?

我一直在寻找类似的答案,不幸的是人们很聪明并且使用了伪造的指令,我无法使用。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

定义标签并避免在代码中使用未知常量作为地址是一种很好的做法。您的代码可以重写为

.data
     str1: .asciiz    “A”
     str2: .asciiz    “Hello”
.globl main
main:
    lui $a0, $str2
    addi $v0, $0, 4
    syscall

但是要回答你的问题,ASCII A0x41)只占用一个字节,null终止第一个字符串需要另一个字符串,因此Hello 应该A高两个字节。这里的问题是您的编译器可能会尝试对齐您的数据。更好地检查您的编译器选项是否完全确定。