1. ホーム
  2. assembly

[解決済み] ミップスアセンブリの文字列の長さ

2022-02-05 10:51:12

質問事項

以下のコードを実行するたびに

#counts length of a string

.data
 .data
string: .asciiz "Hello"

printedMessage: .asciiz "The length of the string: "

    .text
main:
  la $a0, string             # Load address of string.
        jal strlen              # Call strlen procedure.
        jal print
        addi $a1, $a0, 0        # Move address of string to $a1
        addi $v1, $v0, 0        # Move length of string to $v1
        addi $v0, $0, 11        # System call code for message.
        la $a0, printedMessage            # Address of message.
        syscall
        addi $v0, $0, 10        # System call code for exit.
        syscall


strlen:
li $t0, 0 # initialize the count to zero
loop:
lb $t1, 0($a0) # load the next character into t1
beqz $t1, exit # check for the null character
addi $a0, $a0, 1 # increment the string pointer
addi $t0, $t0, 1 # increment the count
j loop # return to the top of the loop
exit:
jr $ra

print:
li $v0, 4
  la $a0, printedMessage
  syscall

  li $v0, 1
  move $a0, $t1
  syscall


jr $ra

QtSpimコンソールは、"文字列の長さを表示します。0-"と表示されます。printメソッドを少し弄ってみたのですが、何が問題なのかよくわかりません。 そこで質問です。 どうすればプリントアウトを修正できますか?t0はカウンタなので、$t0の情報をプリントアウトする必要があります。

ありがとうございました。

どのように解決するのですか?

プリントアウトを修正するというのが何を意味するのかよくわかりませんが、一つの問題は、strlen関数のカウントレジスタが $t0 での2番目のシステムコールが print: が引数で呼び出されます。 $t1

を変更する $t1 から $t0 を実行すると、出力5が得られます。