[解決済み] ミップスアセンブリの文字列の長さ
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が得られます。
関連
-
[解決済み] テスト
-
[解決済み] NASMでscanfを使うには?
-
[解決済み] DOSBox - このプログラムはDOSモードでは実行できません (アセンブリ)
-
[解決済み] CPUのParity Flagは何のためにあるのですか?
-
[解決済み] アセンブリで命令セテは何をするのですか?
-
[解決済み] BL命令ARM - その仕組み
-
[解決済み] ARMv8でリテラル0ではなく、xzrレジスタを使用するのはなぜですか?
-
[解決済み] x86アセンブリでレジスタに使用されるpush/pop命令の機能は何ですか?
-
[解決済み] インテルアセンブリの%ripレジスタを理解する
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】MARIEアセンブリ言語で`Skipcond`はどのように動作しますか?
-
[解決済み] popまたはadd esp、4 ? その差は何ですか?
-
[解決済み] アセンブリで数字をASCIIに変換する
-
[解決済み] MIPSプログラムの中で`lw`と`sw`が実際にどのように機能するかを理解する
-
[解決済み] ビットシフト演算子を使って10進数を2進数で表示するMIPS
-
[解決済み] MIPS浮動小数点:SWC1対S.S.
-
[解決済み] アセンブリMIPS .ALIGNとメモリアドレスの理解
-
[解決済み] objdumpの出力にあるdata16とはどういう意味ですか?
-
[解決済み] MIPSのオペコードにおけるlaとliの違いは何ですか?
-
[解決済み] LC3 LEA 命令と格納された値