私はCコードをMIPSアセンブリに変換しようとしていました。ここにはスニペットがあります。問題は、私が正しい道に沿って行くのかどうか確信が持てないということです。私は、誰かが助けてくれることを願っています。 アセンブリへのCコード
この
は、元の質問だった:void swap(int v[], int k, int j) {
int temp;
temp = v[k];
v[k] = v[j];
v[j] = temp;
}
、これは私が持っているどのくらいです:
swap:
addi $sp, $sp, -4
sw $s0, 0($sp)
add $s0, $zero, $zero
L1: add $t1, $s0, $a1
lb $t2, 0($t1)
add $t3, $s0, $a0
sb $t2, 0($t3)
beq $t2, $zero, L2
addi $s0, $s0, 1
j L1
L2: lw $s0, 0($sp)
addi $sp, $sp, 4
jr $ra
さてさて、これは私の知る限りが持っているようです。この権利をしているのですか、それとも完全に失ってしまったのですか?
質問は表示されません。 SOの質問方法については、一番上の行のヘルプボタンを参照してください。手元にある問題、つまりCコードからアセンブラを生成するために、私が知っているすべてのコンパイラは、それを生成するコマンドラインスイッチを持っています。例:gccには '-S'があります。あなたの問題は何ですか? –
ループがありますが、Cコードにはループがありません。配列は、4バイトまたは32ビットと仮定できるint型です。だから、kを4倍したり、左に2シフトしたり、それをvに加えてtempにロードする必要があります。その後、vにj回目のオフセットを4回作成し、v + k回に格納します。4. tempをvプラスj回に入れます。4.コードはそれを実行していますか? –
ポスターは、MIPSアセンブラとC呼び出し規約を学んでいるようです。私には公正な質問のようです。しかし、ここではMIPSの専門家がほとんどいないため、与えられたCコンパイラからasmファイルを生成することをお勧めします。 –