Mips 打印字符串

Mips 打印字符串,mips,Mips,这就是实践问题: 给定下面的数据段,编写代码以打印字符串“Hello” .data .asciiz “A” .asciiz “Hello” .globl main main: 我在main下面写的是: main: lui $a0, 0x1001 addi $v0, $0, 4 syscall 我收到的输出是“A”,显然是因为lui地址错误。我的问题是,如何打印“你好”。我是否增加lui地址?如果是,用什么 我到处寻找类似的答案,不幸的是,人们很聪明,使用pes

这就是实践问题:

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

.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
高两个字节。这里的问题是编译器可能会尝试对齐数据。最好检查编译器选项以完全确定

我通过添加这行代码解决了这个问题:ori$a0,$A00006 Si有一个更简单的方法吗?看起来你的内存在增长,而不是在增长。如果是这样,
0x10010000+0x0005(“Hello”的长度)+0x0001(“\0”)
将生成
0x10010006