Ich habe gerade angefangen Assembly zu lernen und in einer Übung muss ich die Ausgabe des folgenden Codes finden, aber da ich sehr neu bin, bin ich mir nicht sicher was es ist und das liegt hauptsächlich an add
.Ausgabe des Assembly-Codes - Confusion with add?
Assembly Code:
addi $8, $0, 0 # $8 = $0 + 0 = 0 + 0 = 0
addi $9, $0, 8 # $9 = $0 + 8 = 0 + 8 = 8
L1:
add $4, $0, $8 # $4 = $0 + $8 = $8
addi $2, $0, 1 # $2 = $0 + 1 = 0 + 1 = 1
addi $8, $8, 1 # $8 = $8 + 1
syscall # show the number in $4
bne $8, $9, L1 # if $8 ≠ $9 go to L1 (line 3)
So wie ich es auch dreht, der obige Code sollte die Zahlen 0-7
, Ausgang, aber da ich auf Montage bin neu, ich dachte, den Code zu übersetzen zu C++, um es herauszufinden, aber in C++ ich habe 1-8
, weil ich geneigt war add $4, $0, $8
als $4 = &$8
zu übersetzen.
C++ Code:
#include <iostream>
using namespace std;
int main() {
int $0 = 0, $2, $8, $9, *$4;
$8 = $0 + 0; // $8 = 0
$9 = $0 + 8; // $9 = 8
do {
$4 = &$8;
$2 = $0 + 1;
$8 = $8 + 1;
cout << *$4 << endl;
}
while ($8 != $9);
return 0;
}
Frage: Ist Versammlung add $4, $0, $8
gedacht werden als $4
ein Zeiger auf $8
sein oder einfach gleich, was $8
ist die Zeit. (Die Verwirrung wurde durch den Kommentar neben add
) erstellt.
Während die C++ als Pseudo-Code _valid_ ist der Mips asm für Prototyping, in Erwägung ziehen (zB) '$ 0 'in' r0' [ebenfalls für andere], wenn aus keinem anderen Grunde, um es sauber zu machen kompilieren und leise LLs. Wie auch immer, IIRC, kann es eine Kompilierungsoption geben, um '$' in Symbolen trotzdem zuzulassen –
Danke für den Tipp @CraigEstey :) –