mips Tutorial
Erste Schritte mit Mips
Suche…
Bemerkungen
In diesem Abschnitt erhalten Sie einen Überblick darüber, was Mips sind und warum ein Entwickler sie verwenden möchte.
Es sollte auch alle großen Themen in Mips erwähnen und auf die verwandten Themen verweisen. Da die Dokumentation für mips neu ist, müssen Sie möglicherweise erste Versionen dieser verwandten Themen erstellen.
Installation oder Setup
Detaillierte Anweisungen zum Einrichten oder Installieren von Mips.
QtSpim für Windows
- Laden Sie QtSpim hier herunter. 32.6 MB
- Installieren Sie es einfach zu installieren
- Erstellen Sie Ihre erste Assembly-Datei (.s) oder verwenden Sie das Beispiel C: \ Program Files (x86) \ QtSpim \ helloworld.s
- Führen Sie das Programm über die Desktop-Verknüpfung oder über C: \ Programme (x86) \ QtSpim \ QtSpim.exe aus
Es gibt zwei Fenster für das Programm, das Hauptfenster mit der Bezeichnung QtSpim. Hier sehen Sie das von Ihnen ausgeführte Programm (beschrifteter Text), den Speicher (beschriftete Daten), die Werte der Register (bezeichnet als FP Regs für Fließkomma und Int Regs für Ganzzahl) und die Steuerung für den Simulator
Im anderen Fenster mit der Bezeichnung Konsole sehen Sie die Ausgabe und geben ggf. die Eingabe Ihres Programms ein
- Laden Sie die Datei mit Datei -> Datei laden
- Sie können Click Run (F5) verwenden, um das Endergebnis anzuzeigen, oder Schritt für Schritt (S10), um den Status des Registers und des Speichers anzuzeigen, während das Programm das Debugging ausführt
MARS MIPS Simulator
Der MARS MIPS-Simulator ist ein Assembler, Assembler, Simulator und Debugger für den MIPS-Prozessor, der von Pete Sanderson und Kenneth Vollmar an der Missouri State University ( src ) entwickelt wurde.
Sie erhalten die MARS kostenlos hier . Zur Installation der Version 4.5 benötigen Sie von hier aus möglicherweise das für Ihr System geeignete Java SDK
Vor dem Zusammenbauen kann die Umgebung dieses Simulators vereinfacht in drei Segmente aufgeteilt werden: Der Editor oben links, in dem der gesamte Code geschrieben wird, der Compiler / die Ausgabe rechts unter dem Editor und die Liste der Register , die die "CPU" darstellen. für unser Programm.
Nach dem Zusammenfügen (durch einfaches Drücken von F3) ändert sich die Umgebung, wobei zwei neue Segmente die Position des Editors erhalten: das Textsegment wohin
i) In jeder Zeile des Assembler-Codes werden in der Spalte "Basis" und "Pseudoinstruktionen" (wir sprechen in Sekunden) darüber gesprochen
ii) den Maschinencode für jede Anweisung in der Spalte "Code",
und das Datensegment, in dem wir eine Darstellung des Speichers eines Prozessors mit Little-Endian-Reihenfolge betrachten können .
Nach dem Zusammensetzen können wir unseren Code entweder alle gleichzeitig (F5) oder schrittweise (F7) ausführen und die Ausführung um einige Schritte zurück nach hinten (F8) zurückspulen.
Nun sehen wir uns den Beispielcode von oben an und erläutern jede Zeile:
.text
.globl main
main: #main function
li $v0, 11 #11=system code for printing a character, $v0=register that gets the system code for printing as value
la $a0, 'a' #'a'=our example character, $a0=register that accepts the character for printing
syscall #Call to the System to execute our instructions and print the character at the a0 register
li $v0, 10 #11=system code for terminating, $v0=register that gets the system code for terminating (optional, but desirable)
syscall #Call to the System to terminate the execution
MARS akzeptiert und exportiert Dateien mit dem .asm-Dateityp
Aber der obige Code gibt nur einen Buchstaben aus. Wie sieht es mit der guten alten "Hallo Welt" aus? Was ist, weißt du nicht, eine Zahl oder etwas hinzuzufügen? Nun, wir können das ändern, was wir gerade für das hatten:
.data #data section
str: .asciiz "Hello world\n"
number: .word 256
.text #code section
.globl main
main:
li $v0, 4 #system call for printing strings
la $a0, str #loading our string from data section to the $a0 register
syscall
la $t0, number #loading our number from data section to the $t0 register
lw $s1, 0($t0) #loading our number as a word to another register, $s1
addi $t2, $s1, 8 #adding our number ($s1) with 8 and leaving the sum to register $t2
sw $t2, 0($t0) #storing the sum of register $t2 as a word at the first place of $t0
li $v0, 10 # system call for terminating the execution
syscall
Bevor Sie die Ergebnisse mit MARS veranschaulichen, müssen Sie diese Befehle ein wenig näher erläutern:
Systemaufrufe sind eine Reihe von Diensten, die vom Betriebssystem bereitgestellt werden. Um einen Systemaufruf zu verwenden, wird ein Anruf - Code benötigt , um für die notwendige Operation $ v0 Register zu setzen. Wenn ein Systemaufruf Argumente enthält, werden diese in die Register $ a0- $ a2 gestellt. Hier sind alle Systemaufrufe.
li
(load instant) ist eine Pseudo-Anweisung (wir sprechen später darüber), die ein Register sofort mit einem Wert lädt.la
(Adresse laden) ist auch ein Pseudo-Befehl, der eine Adresse in ein Register lädt. Mitli $v0, 4
das $ v0 Register hat nun4
als Wert, währendla $a0, str
die Zeichenfolge von lädtstr
an die$a0
Register.Ein Wort ist (so viel wie wir über MIPS sprechen) eine 32-Bit-Sequenz, wobei Bit 31 das höchstwertige Bit und Bit 0 das geringste signifikante Bit ist.
lw
(lw
) wird vom Speicher in ein Register übertragen, währendsw
(Speicherwort) von einem Register in den Speicher übertragen wird. Mit demlw $s1, 0($t0)
haben wir den Wert des Registers$s1
Registers$t0
(das ist, was die0
hier symbolisiert, der Versatz des Wortes), alias256
, in das Register$s1
geladen.$t0
hier die Adresse, während$s1
den Wert hat.sw $t2, 0($t0)
führt genau den umgekehrten Job aus.MARS verwendet den Little Endian , was bedeutet, dass das LSB eines Wortes in der kleinsten Byteadresse des Speichers gespeichert wird.
MIPS verwendet Byteadressen , so dass sich eine Adresse um 4 von der vorherigen und der nächsten unterscheidet.
Durch das Zusammenstellen des Codes von vorhin können wir besser verstehen, wie Speicher und Register ausgetauscht werden, wobei "Hexadezimalwerte" aus dem Datensegment deaktiviert werden:
oder Aktivieren von "ASCII" aus dem Datensegment:
Starten Sie es so
$ java -jar Mars4_5.jar
Erstellen Sie diese Datei und speichern Sie sie.
.text
main:
li $s0,0x30
loop:
move $a0,$s0 # copy from s0 to a0
li $v0,11 # syscall with v0 = 11 will print out
syscall # one byte from a0 to the Run I/O window
addi $s0,$s0,3 # what happens if the constant is changed?
li $t0,0x5d
bne $s0,$t0,loop
nop # delay slot filler (just in case)
stop: j stop # loop forever here
nop # delay slot filler (just in case)
Drücke F3, um es zusammenzubauen, und drücke dann Run. Nun werden Sie mit dem Kompilieren und Ausführen von MIPS-Code begonnen.