2012-04-14 12 views
1

Ich habe in x86-Architektur für meine vorherige Schule programmiert, und in einer neuen Klasse, die ich nehme, erfordert Kenntnisse von MIPS. Was sind die Hauptunterschiede zwischen Konzepten und Architekturen zwischen den beiden Welten? Dankx86 Assembly Programmer Konvertierung zu MIPS, was soll ich wissen?

+3

Wenn Sie keine Ahnung haben, dann sollten Sie wirklich zuerst eine MIPS-Klasse nehmen. SO ist kein Ersatz für Bildung, wir können kein Semester in eine Antwort stopfen. –

Antwort

1

Es ist eine Weile her, seit ich bei MIPS ASM aussah, aber von dem, was ich ... erinnern Sie

Je nachdem, wie gut bereits wissen x86 Assembler-Sprache, ich glaube nicht, MIPS ASM zu schwierig sein wird, abholen. Offensichtlich ist es ein sehr reiner RISC-Befehlssatz, der viel einfacher ist als x86. Sie haben einige Datenbewegungsanweisungen (Laden/Speichern), einige arithmetische Anweisungen (addieren, subtrahieren, multiplizieren, Bit verschieben und maskieren) und Verzweigen (un/bedingter Sprung). Es gibt nicht zu viele Verzierungen zu diesen Themen.

Sie könnten sich ein wenig verwöhnt fühlen, wenn Sie MIPS ausprobieren und die unglaubliche Anzahl von Mehrzweckregistern zu Ihrer Verfügung haben. Sie wissen, wie x86 dazu neigt, mit 7-8 Allzweckregs zu kämpfen (abhängig davon, ob Sie ESP zählen)? Sie haben 32 GP-Regs in MIPS.

Eine Sache, an die man sich gewöhnen muss, ist das Pipelining, oder vielmehr die Implikationen des Pipelining. Wenn ein Befehl eine Addition ausführt und das Ergebnis in das Register r5 gehen soll, wird die Summe möglicherweise nicht verfügbar sein, wenn der nächste Befehl ausgeführt wird. Es kann einen anderen Zyklus oder 2 (erinnere mich nicht an die Besonderheiten) benötigen, bevor r5 die Summe hält. Also müssen Sie in Ihrem Code dafür planen. Eine weitere Implikation ist, dass ein Verzweigungsbefehl nicht sofort verzweigt (aufgrund des Pipelining kann es wiederum einen Zyklus oder 2 dauern). Daher müssen Sie sicherstellen, dass die Anweisung, die sich nach der Verzweigung befindet, den Programmzustand nicht auf seltsame Weise durcheinanderbringt (setzen Sie im Zweifelsfall einen NO-OP nach der Verzweigung).

Ich habe immer gefunden, dass die beste Art, ASM zu lernen, ein Programm in ASM zerlegen und anfangen, die Anweisungen nachzuschlagen. Laden Sie zu diesem Zweck eine MIPS-Toolchain herunter und installieren Sie sie (here's a great place to get up to date, cross-compiling toolchains for numerous architectures, including MIPS). Verwenden Sie es, um ein "Hello World" C-Programm sowie einige grundlegende mathematische Formeln zu kompilieren und führen Sie dann die MIPS-Version von 'objdump -d' auf der ausführbaren Datei aus. Studieren Sie die Ausgabe, beginnend mit der Funktion main(). Verstehen Sie, wie das C math auf MIPS ASM abbildet.

Viel Glück! Es ist nicht gerade trivial, aber wenn du bereits x86-Kenntnisse hast, denke ich, dass du wahrscheinlich andere ASM-Sets lernen kannst, ohne einen semesterlangen Kurs in diesem Thema belegen zu müssen.

+0

danke! genau was ich brauchte! – Bonk