MIPS打印字符串

问题描述 投票:1回答:1

那么下面就是练习题了。

给出下面的数据段,写出打印字符串 "你好 "的代码。

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

我在main下写了什么。

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

我接收到的输出是 "A",很明显是因为Lui的地址不对。我的问题是,如何打印 "你好"。我是否要递增lui地址?如果是,递增多少?

我找了一下类似的答案,可惜大家都很聪明,用的是pesudo指令,我是不会用的。

先谢谢大家的帮助。

mips
1个回答
2
投票

定义标签,避免在代码中使用未知的常量作为地址,这是一个很好的做法。你的代码可以改写为

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

但为了回答你的问题,ASCII A (0x41)取一个单字节,null终止第一个字符串取另一个,所以 Hello 高出两个字节 A. 这里的问题是,你的编译器可能会尝试对齐你的数据。最好检查你的编译器选项以完全确定。

© www.soinside.com 2019 - 2024. All rights reserved.