Ich habe versucht, C-Code in MIPS-Assembly zu konvertieren. Hier ist ein Ausschnitt. Das Problem ist, dass ich nicht sicher bin, ob ich auf dem richtigen Weg bin. Ich hoffe, jemand könnte helfen.C-Code zu Assembly
Dies war die ursprüngliche Frage:
void swap(int v[], int k, int j) {
int temp;
temp = v[k];
v[k] = v[j];
v[j] = temp;
}
und das ist, wie weit ich habe haben:
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
Okay dies so weit ist, wie ich bekommen haben. Mache ich das richtig oder bin ich völlig verloren?
Ich sehe keine Frage. Bitte konsultieren Sie die Hilfe-Schaltfläche in der oberen Reihe, um zu erfahren, wie Sie Fragen zu SO stellen können. Für das Problem, das Assembler aus C-Code erzeugt, haben alle Compiler, die ich kenne, einen Befehlszeilenschalter, um das zu erzeugen. ZB gcc hat '-S'. Was ist dein Problem? –
Nun, Sie haben eine Schleife, der C-Code hat keine Schleife. Die Arrays sind von int, die wir 4 Bytes oder 32 Bits annehmen können. also musst du k mit 4 multiplizieren oder nach links 2 verschieben, dann das zu v hinzufügen und das in temp laden. Dann erzeuge ein j mal 4 versetze das in v und speichere in v plus k mal 4. dann lege temp in v plus j mal 4. Ist dein Code dabei? –
Es scheint, dass das Poster versucht, MIPS Assembler- und C-Aufrufkonventionen zu lernen. Scheint mir eine faire Frage zu sein. Aber da nur wenige MIPS-Experten hier sind, ist der Vorschlag, aus dem angegebenen c-Compiler eine asm-Datei zu generieren, eine gute Idee. –