Grundlagen Informatik - 17: Einstieg Assemblersprache R-Format Maschinenbefehl umwandeln MIPS32 chriss code support https://www.youtube.com/watch?v=hcBFZTxpUKE Transkript (automatisch erstellt) 0:00 zum Einstieg in die MIPS 32 Assemblersprache schauen wir uns die Umwandlung von einem Maschinenbefehl in einen assemblerbefehl an wir können 0:09 daran schon erkennen dass der Maschinenbefehl für uns wesentlich schwieriger zu interpretieren ist als eben dasselbe Befehl als Assembler 0:18 Befehl dargestellt es handelt sich hier um eine arithmetische Operation das können wir im assemblerbefehl direkt sehen im 0:27 Maschinenbefehl eben nicht und die MIPS 32 Architektur verwendet bei den meisten Befehlen Register von diesen Registern stehen 32 Stück zur Verfügung diese 32 0:40 Register sind hier mit ihrem Dezimalwert jeweils dargestellt von 0 bis 31 jedes Register hat seinen eigenen Verwendungszweck und für bestimmte 0:50 Befehle kann man auch nur bestimmte Register verwenden die m 22 Architektur verwendet ausd dem ein Register Register ausführungsmodell und falls euch der der 1:00 Begriff Word schon begegnet ist könnt ihr jetzt noch mal kurz auf Pause drücken und durchlesen was sich dahinter verbirgt oder meiner Meinung nach eine 1:08 gute Definition ist jeder Befehl verwendet einen Opcode dieser Opcode verrätt uns welche Operation ausgeführt wird und wir können 1:19 außerdem das Format ablesen am Opcode nämlich ob es sich um ein R i oder J Format handelt Befehle im rformat verwenden 1:29 alle den Opcode Null das widerspricht natürlich dem dass man direkt die Anweisung oder den Befehl ablesen kann der ausgeführt wird die 1:41 rformatbefehle behelfen sich da einem Funktionscode der sich ganz am Ende dann befindet also die sechs Bits ganz rechts im rformat interpretieren wir als 1:51 Funktionscode und anhand dieses Funktionscodes können wir dann erst den Befehl erkennen der hier ausgeführt wird der obcode und der Funktionscode haben 2:00 jeweils 6ch bit der ganze Befehl ist 32 Bit lang 12 Bits zusammen sind also Funktionscode und obcode von 32 abgezogen bleibt 20 übrig und 20 ge 4 2:12 sind jeweils 5 Bit so konnte ich mir das immer ganz gut merken wie dieser Befehl aufzuteilen ist allerdings auf die Reihenfolge hier Register source 2:21 Register target Register Destination muss man achten auf die anderen beiden Formate werden wir zum späteren Zeitpunkt näher 2:31 eingehen wir schauen uns jetzt wie gesagt erstmal das rformat an das definitiv das komplexeste Format ist ansonsten kann man hier mal kurz auf 2:40 Pause drücken das sind definitiv ein paar gute Infos die da stehen und dann kommen wir schon zu einem Beispiel und zwar dasselbe Beispiel das oben auch 2:48 schon stand und wir wollen jetzt diesen Befehl in einen Assembler Befehl umwandeln wie bereits erwähnt als erstes schauen wir auf den operationscode 2:58 erkennen daran es handelt sich um einen rformatbefehl da alle sechs Bits ganz links auf Null gestellt sind und nachdem wir den Dezimalwert des 3:10 Funktionscodes ermittelt haben oder wir könnten auch die binäre Darstellung verwenden aber die ist natürlich nicht so schön zu 3:17 lesen brauchen wir eine Tabelle in der alle Befehle stehen und da sehen wir hier der Funktionscode 100 entspricht dem Befehl add 3:41 um zu erkennen um welche Register es sich hier handelt benötigen wir eben auch wieder die Tabelle wir kennen hier das Register 8 das ate Register ist das 3:50 Register t00 das neunte Register ist dann das nächste nämlich das Register T1 und die 4:00 16 ist das Register S0 und um jetzt jetzt haben wir alle einzelnen Komponenten bestimmt des Befehls jetzt müssen wir ihn im Grunde 4:08 nur noch zusammensetzen aber hier ist auch noch mal Fehlerpotenzial da im der Assembler Schreibweise eine andere Reihenfolge der Register verwendet wird 4:18 wir haben hier source target Destination im Maschinenbefehl aber im Assembler Befehl haben wir erst die 4:27 Destination dann die SCE und dann das Target und man kann die Register jeweils mit einem Komma voneinander trennen ist 4:43 aber nicht verpflichtend hier handelt es sich um den Befehl @ doollar t0 doar T1 doollar 4:51 S0 vergleichen wir es noch mal mit dem obigen Beispiel sollte derselbe Befehl sein @ Dollar t0 Dollar T1 Dollar S0