1

我从 mips32 开始,当我试图从字符串中获取一个字母来打印它时我被卡住了。代码应该获取字符串,逐个字符地打印它,当它找到一个iprint时iiing

.data
msg: .asciiz "testing"
i: .asciiz "iiing"

.text

.globl main

main:           
    la $t0, msg
    la $t1, i
    li $t2, 0
loop:
     bneq $t0, 105, end #$t0=i?
     lb $a0, ($t0)
     li $v0, 4
     syscall
     addi $t0, $t0, 1
     b loop

end:
     move $a0, $t1
     li $v0, 4
     syscall

哪里有问题?

4

1 回答 1

0

你有几个问题。

  1. 您正在比较$t0,这是当前字符的地址,而不是字符本身。将该测试移到该lb行下方并针对$a0.

  2. 105在 ASCII 中是E,不是i。尝试151(或者更正常,0x69)。

  3. 你想比较beq,不是bneq

  4. 在循环内部,您应该使用11打印单个字符的 syscall ,而不是4打印字符串的当前系统调用。

  5. 您的程序最后不会进行退出系统调用 ( 10)。

您可以查看此链接以获取系统调用列表。

这是一个完整的工作程序供参考:

    .data

msg: .asciiz "testing"
i:   .asciiz "iiing"

    .text
    .globl main

main:           
    la $t0, msg
    la $t1, i
    li $t2, 0

loop:
    lb $a0, ($t0)
    beq $a0, 0x69, end
    li $v0, 11
    syscall
    addi $t0, $t0, 1
    b loop

end:
    move $a0, $t1
    li $v0, 4
    syscall
    li $v0, 10
    syscall
于 2012-12-20T23:39:33.980 回答