私は現在、MIPS-アセンブラでいくつかのものを書いていますし、私はいくつかの問題があります。私は、この関数を書いた を:アセンブラ - スキップ指示
PRINT_FLOAT:
addi $sp, $sp, -4 #stackpointer um ein wort weiterrücken
sw $ra, 0($sp) #rücksprungadresse auf stack speichern
la $a0, strFloat
add $a1, $s0, $zero
jal printf
lw $ra, 0($sp) #rücksprungadresse aus stack holen
addi $sp, $sp, 4 #stackpointer um ein wort zurückrücken
jr $ra
私は命令は$ A1、$ S0を追加し、このプログラムを実行する場合、私はGDBと、このプログラムデバッグする場合、
もう面白い... $ゼロがスキップされ、なぜ私にはわからない:
main:
addi $t0, $zero, 3
addi $t0, $zero, 3
addi $t0, $zero, 3
jal READ_FLOAT
jal PRINT_FLOAT
をメインにブレークポイントを設定し、ブレークポイントがあります3番目の「addi $ t0、$ zero、3」に設定します ここではどうなりますか?
最適化で組み立てていますか?それは3つの 'addi'ステートメントで意味をなさないでしょう。なぜなら、それらのステートメントはすべて同じものを2つ作るからです。 –
あなたのアセンブラは分岐遅延スロットにaddを入れていますか?あなたの分解はこのコードのために何を示していますか?私はgnuアセンブラを最後に使ったときに、単に命令をブランチとスワップしただけで、明示的にそれを指示しなくてはなりませんでした。またはアーキテクチャに分岐遅延スロットがないことを伝えます。 –