MIPS — print einen Wert in eine variable
Folgenden code:
.text
.ent main
.type main, @function
main:
.frame $fp,24,$31 # vars= 8, regs= 1/0, args= 0, gp= 8
addiu $sp,$sp,-24
sw $fp,20($sp)
move $fp,$sp
li $2,1 # 0x1
sw $2,12($fp)
li $2,1 # 0x1
sw $2,8($fp)
# now print -------------------------------------
li $2,1
li $a0,10
syscall
move $2,$0
move $sp,$fp
lw $fp,20($sp)
addiu $sp,$sp,24
j $31
nop
Wie habe ich generieren, diese durch das schreiben eines einzigen Programm:
int main(){
int i = 1;
}
Und dann einfach Hinzugefügt, die syscall-Aussagen selbst. Ich bin nicht sicher, ob dies richtig oder falsch ist.
- Funktioniert es wie erwartet? Sonst wirst du angeben müssen, die Umgebung, die Sie versuchen zu kompilieren/diesen code ausführen, und die Fehler, die Sie hier bekommen.
- Ich meine, es ordnungsgemäß kompiliert und läuft ohne Fehler. Was Sie nicht tun — ist, drucken Sie das verdammte Ding!
- Und was sind Sie mit diesem? SPIM/MARS? Was ist, wenn Sie ein Programm ausführen, druckt nur ein integer ist und nichts anderes (also keine, die stack-frame setup-code ein, die Sie vom compiler)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code, den Sie Hinzugefügt:
druckt die ganze Zahl 10 in der standard-Ausgabe.
Wenn Sie möchten, drucken variable
i
Sie zum laden Ihrer ersten Wert in register$a0
.Vorausgesetzt es ist nicht bereits gespeichert sind, in einem register (, die übrigens in Ihrem Fall), und dass es wird auf dem stack gespeichert (im Ort 8 relativ zu
$fp
) müsstest du:Die Art, wie ich es gelöst wurde, einfach mit printf () aufrufen, nachdem alle. Syscalls nie für mich gearbeitet; auch die Art und Weise beschrieben, in der Antwort.
So drucken Sie einen Wert 10, ich Tue das folgende:-