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. 105ASCIIではEありませんi。試してください151(または、より正常になるために0x69)。

  3. beqではなくと比較したいbneq

  4. ループ内では、文字列を出力する11現在使用している syscall ではなく、単一の文字を出力する syscall を使用する必要4があります。

  5. あなたのプログラムは最後に exit syscall ( ) を作成しません10

syscall のリストについては、このリンクを参照してください。

参照用の完全な作業プログラムは次のとおりです。

    .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 に答える