T b) Wo findet man den Arbeitsspeicher in einem Computersystem? Auf dem Prozessor-Kern? Auf dem Mainboard? Als externes Gerät?

Ähnliche Dokumente
T e) Wie unterscheiden sich die Opcodes von vorzeichenlosen und vorzeichenbehafteten Ladebefehlen?

Übungsblätter zur Vorlesung IT-Systeme 1. 1 Zahldarstellung und Codierung

T e) Welche Eigenschaft müssen Byte-, Wyde-, Tetra- und Octa-Adressen beim MMIX haben?

den Loader; der Loader ist derjenige Teil des Betriebssystems, der auszuführende Programme vom der Festplatte/SSD in den Speicher lädt

6.3 Speicher 233. Virtueller Speicher dreier Programme. realer Speicher Interrupt-Vektoren. Text-Segment.

6.5 MMIX Befehle 287. LOC $254 BYTE 1 WYDE #1234 OCTA #56789ABC 0x x x

0x01? 0x01. 0x12 0x34. 0x34 0x12 0xBC 0x00 0x00 0x9A 0x00 0x78. 0x00 0x56. 0x56 0x00 0x78 0x00 0x9A 0x00 0xBC 0x00. 6.

q) Geben Sie Befehle an, die ein neues globales Register anlegen und dieses mit Speicheradresse 0x initialisieren,

6.3 Speicher 233. Virtueller Speicher dreier Programme. realer Speicher Interrupt-Vektoren. Text-Segment.

k) Wie kann man beim MMIX auf die Parameter zugreifen? $1 + 8 $

Nachfolgende Tabelle übersetzt MMIX-Opcodes in diejenigen Zahlen, die im Befehlswort in den Bits abgelegt werden müssen.

T c) Daten welcher Größenordnung kann ein Register aufnehmen: Byte, kilobytes, megabytes, gigabytes or terabytes?

T a) Welche Wortgrößen kann der MMIX vom Speicher in Register laden? Die MMIX-Ladebefehle unterstützen Wortbreiten von 8, 16, 32 und 64 Bit.

276 6 MMIX-Prozessor. Befehl Operanden Name/Aktion Definition. $X,$Y,$Z Bitwise AND $X $Y & $Z $X,$Y,Z Bitwise AND immediate $X $Y & u64 0 ( u(z)) AND

q) Geben Sie Befehle an, die ein neues globales Register anlegen und dieses mit Speicheradresse 0x initialisieren,

T e) Wie wird im Speicher an der Adresse 0x die 32 Bit-Zahl

Aufgabenkatalog. Computersysteme 1 Dr. Michael Zwick. Technische Universität München

6 MMIX-Prozessor MMIX-Prozessor

MMIX Assembler Programmierung Dr. Michael Zwick. Zahldarstellung

MMIX Assembler Programmierung. Computersysteme 1 Dr. Michael Zwick

Aufgabenkatalog. Computersysteme 1 Dr. Michael Zwick. Technische Universität München

q) Geben Sie Befehle an, die ein neues globales Register anlegen und dieses mit Speicheradresse 0x initialisieren,

Nachfolgende Abbildung zeigt das Spezialregister ra, das Arithmetische Status Register. Interrupt Enable (Freischalten)

Bachelorprüfung Modul Computertechnik

6 MMIX-Prozessor MMIX-Prozessor

GOP Computertechnik. Computersysteme

GOP Computertechnik. Computersysteme

GOP Computertechnik. Computersysteme

GOP Computertechnik. Computersysteme Probeklausur 2

GOP Computertechnik. Computersysteme Probeklausur 2

6 MMIX-Prozessor. 6.1 Programmiermodell. S.219 alles wichtig. 6.2 Register. Allzweckregister

GOP Computertechnik. Computersysteme Probeklausur 1

Speicher. T c) Daten welcher Größenordnung kann ein Register aufnehmen: Byte, kilobytes, megabytes, gigabytes or terabytes? einige Byte.

6 MMIX-Prozessor MMIX-Prozessor

Aufgabenkatalog. Computersysteme 1 Dr. Michael Zwick. Technische Universität München

Nachfolgende Abbildung zeigt das Spezialregister ra, das Arithmetische Status Register. Interrupt Enable (Freischalten)

4. TÜ-Zusammenfassung zum Modul Computersysteme

Bachelorprüfung Modul Computertechnik

4 Prozessor-Datenpfad 4.1 Vom zu lösenden Problem abhängige Schaltung

RO.RO, ADD RO, 120,121 MUL 120,120,121 INPUT RO, MUL INPUT 120,0 ADD RO, INPUT 121,1 INPUT R 1,2 INPUT 121,2 RO, IN put 121,1 N RO, ROIRA SET 121,3

Nachfolgende Abbildung zeigt das Spezialregister ra, das Arithmetische Status Register. Interrupt Enable (Freischalten)

Beim Programmieren mit MMIX habt ihr vielleicht schon öfter eine der folgenden Fehlermeldungen von MMIXAL bekommen:

4.3 Assembler. Assembler als leicht verständliche hardwarenahe Sprache Prozessor-Datenpfad

Welche Register werden zur Parameterübergabe verwendet? In welcher Reihenfolge werden die Parameter auf dem Stack bzw. in den Registern abgelegt?

4.3 Assembler 207 SET R0,0 INPUT R1,0 MUL R1,R1,R1 ADD R0,R0,R1 INPUT R1,1 MUL R1,R1,R1 ADD R0,R0,R1 INPUT R1,2 MUL R1,R1,R1 ADD R0,R0,R1 SQRT R0,R0

2 Darstellung von Zahlen und Zeichen

Assembler als Übersetzer

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Arithmetik, Register und Speicherzugriff. Grundlagen der Rechnerarchitektur Assembler 9

Einstieg in die Informatik mit Java

Übersicht. Quelle: Kapitel 3, 4 und 5 aus Anlauff, Böttcher, Ruckert: Das MMIX-Buch. Springer, 2002

Merke: Mit jedem zusätzlichen Bit verdoppelt sich die Anzahl der darstellbaren Zahlen bzw. Zustände

5 Befehlssätze und deren Klassifikation

Grundlagen der Rechnerarchitektur. MIPS Assembler

Technische Informatik II Rechnerarchitektur

Assembler am Beispiel der MIPS Architektur

4.2 Universalrechner: Schaltung unabhängig vom Problem 185

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 11

LOC Data_Segment A OCTA a) Bestimmen Sie das 32 Bit breite Befehlswort des Befehls JMP Start.

MMIX - Crashkurs. TI-II Rechnerarchitektur

2 Darstellung von Zahlen und Zeichen

Übungsblatt 10 (Block C 2) (16 Punkte)

SUB $2,$5,10 Zeile 1 LDO $5,$0,2*8 Zeile 2 OR $1,$2,$3 Zeile 3 SRU $1,$5,$1 Zeile 4.

Technische Informatik II Rechnerarchitektur

68000 Assembler. WAS ist ein Assembler? Ein System, das den Programmierer hilft, eine maschinennahe Programmierung zu realisieren.

Programmieren in C Einführung

Datentypen printf und scanf. Programmieren in C Dr. Michael Zwick

MMIX: Einführung. Einführung. Ressourcen. Aussprache: em-micks Autor: Donald Knuth

Eine Reihe häufig benötigter Datentypen ist in C vordefiniert

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Thema 1 -- Fortsetzung. Computersystem, Informationsdarstellung

Programmiersprachen Einführung in C

Kapitel 2: Darstellung von Information. Inhalt. Einfache Datentypen (Fortsetzung) Erste Programme (mit Ausgabe) Exkurs: Grammatiken

IM P label = Bedingte Verzweigungen

Rechnerstrukturen. Michael Engel und Peter Marwedel. Sommer TU Dortmund, Fakultät für Informatik

2 Darstellung von Zahlen und Zeichen

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Namensräume - der PREFIX-Befehl

Wie werden die Barcode Prüfziffern berechnet?

Assembler als Übersetzer

Rechnerstrukturen. 7. Assembler. Inhalt. Vorlesung Rechnerstrukturen. Assemblerprogrammierung SML-CPU. SML-Assembler. Binden

Clevere Algorithmen programmieren

ARM-Cortex-M4 / Thumb-2-Befehlssatz Adressierungsarten und arithmetische Operationen

9. Die Adressierungsarten des MSP 430

Wie werden die Barcode Prüfziffern berechnet?

Escape-Sequenzen. Dr. Norbert Spangler

32 Bit Konstanten und Adressierung. Grundlagen der Rechnerarchitektur Assembler 78

Protokollgrundlagen (Schicht 2)

, 2014W Übungsgruppen: Mo., Mi.,

Selbststudium Informationssysteme - H1102 Christian Bontekoe & Felix Rohrer

Hinweise. Auswertung. Einführung in die Technische Informatik WS 2006/2007 Bachelor-Klausur. Aachen, 07. März 2007 SWS: V2/Ü2, ECTS: 4

Algorithmen und Datenstrukturen (für ET/IT)

Variablen und Datentypen

Einführung in die Programmierung Wintersemester 2008/09

M. Befehle in Installationsdateien

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Was sind primitive Datentypen? Primitive Datentypen

Transkript:

234 6 MMIX-Prozessor Aufgaben Verständnis Speicher T a) Wozu verwendet ein Computer Arbeitsspeicher? T b) Wo findet man den Arbeitsspeicher in einem Computersystem? Auf dem Prozessor-Kern? Auf dem Mainboard? Als externes Gerät? T c) Sind Zugriffe auf den Arbeitsspeicher in der Regel schneller oder langsamer als Zugriffe auf Register? T d) Begründen Sie Ihre Antwort auf die letzte Frage

63 Speicher 235 Alignment T a) Welche Wortbreiten werden bei Speicherzugriffen vom MMIX unterstützt? Wie werden diese genannt? T b) Wofür steht der Begriff Alignment? T c) Warum wird Alignment angewendet? T d) Was würde passieren, wenn ein 64 Bit breites Datenwort an einer durch 4, aber nicht durch 8 teilbaren Adresse abgelegt werden würde?

236 6 MMIX-Prozessor T e) Welche Eigenschaft müssen Byte-, Wyde-, Tetra- und Octa-Adressen beim MMIX haben? Big- und Little-Endian a) Welche Art von Daten betrifft die Abspeicherung als Big- oder Little-Endian? Daten work Byte b) Verwendet der MMIX-Prozessor Big- oder Little-Endian? Big, die aus mehreren - bestehen Endian c) Was bedeutet Big- und Little-Endian? Was ist der Unterschied? höherwertigem Big Endian : Adressierung des Byte Little Endian : Das niederwertigsk Bgk wird adressiert d) Wie wird die 16 Bit-Zahl 0x1234 im Speicher an der Adresse 0x2000000000000000 abgelegt im Falle einer Big-Endian- und einer Little-Endian-Maschine? Adresse Big Endian Little Endian 0x2000000000000000 0x2000000000000001 0 12 0 34 0 34 0 12

63 Speicher 237 T e) Wie wird im Speicher an der Adresse 0x2000000000000008 die 32 Bit-Zahl 0x12345678 abgelegt im Falle einer Big-Endian- und einer Little-Endian-Maschine? Adresse Big Endian Little Endian 0x2000000000000008 0x2000000000000009 0x200000000000000A 0x200000000000000B f) Wie wird im Speicher an der Adresse 0x2000000000000008 die 64 Bit-Zahl 12345678 abgelegt im Falle einer Big-Endian- und einer Little-Endian-Maschine? 0 0 00 0 78 Adresse Big Endian Little Endian 0x2000000000000008 0x2000000000000009 0x200000000000000A 0x200000000000000B 0x200000000000000c 0x200000000000000D 0x200000000000000E 0x200000000000000F 0 00 0 56 UXOO 0 45 OROO 0 12 0 12 0 00 0 34 0 00 0 56 0 00 0 78 0 00

238 6 MMIX-Prozessor Speicherorganisation T a) Was wird im Textsegment gespeichert? T b) Was ist ein Interrupt? T c) Nennen Sie ein Ereignis, bei dem ein Interrupt auftreten kann T d) Was sind Interruptvektoren? T e) Was wird im Datensegment gespeichert?

00 63 Speicher 239 T f) Was wird im Poolsegment gespeichert? Gegeben ist die nachfolgend abgebildete ASCII-Tabelle: ASCII-Zeichentabelle, hexadezimale Nummerierung Code 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI 1 DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US 2 SP! " # $ % & ' ( ) * +, - / 3 0 1 2 3 4 5 6 7 8 9 : ; < = >? 4 @ A B C D E F G H I J K L M N O 5 P Q R S T U V W X Y Z [ \ ] ^ _ 6 ` a b c d e f g h i j k l m n o 7 p q r s t u v w x y z { } ~ DEL g) Geben Sie den Inhalt des Poolsegments für das Programm ls an, das mit dem Parameter -la aufgerufen wird (Aufruf: ls -la) 0x4000000000000000 0 40-030 0x4000000000000008 0 400-020 0x4000000000000010 0 400-028 0x4000000000000018 0x4000000000000020 0x4000000000000028 0 0 OXGC 7300 0 2364100-0 uo Es - la 0x4000000000000030 0x4000000000000038

240 6 MMIX-Prozessor T h) Geben Sie den Inhalt des Poolsegments für das Programm rm an, das mit dem Parameter -rf und * aufgerufen wird (Aufruf: rm -rf *) 0x4000000000000000 0x4000000000000008 0x4000000000000010 0x4000000000000018 0x4000000000000020 0x4000000000000028 0x4000000000000030 0x4000000000000038 i) Wie werden in der Programmiersprache C einem Programm Parameter übergeben? int char # argv EJ ) mainlintgnrgc, Anzahl Parameter der T Zugereiste j) Wie kann man in der Programmiersprache C auf die Parameter zugreifen? argv [ 03, argues,

63 Speicher 241 k) Wie kann man beim MMIX auf die Parameter zugreifen? arge argv = $0 = M Virtueller Speicher a) Wenn alle Programme an Adresse 0x100 beginnen bzw alle Programme ihre Daten ab Adresse 0x2000000000000000 im Speicher ablegen: Überschreiben die verschiedenen Programme dann nicht gegenseitig ihre Daten? Ja/nein und warum? Nein, da virtuelle Adressen ; Werden Betriebssystem von Hardware und in reale Adressen übersetzt b) Was bedeutet virtueller Speicher? realer Speicher = physikalisch verbannter Speicher I Speicher wodul virtueller Speicher : Adnss bereich, der auf den realen Adresse bereich abgebildet c) Wozu ist virtueller Speicher gut? Unabhängig wird vom installierten Speicher Trennen der Speicher beneide verschiedener Programme

int 242 6 MMIX-Prozessor bi int mainc { iwt ai - ) 64 MMIX-Programme J MMIX-Programme bzw Assembler-Programme für den MMIX-Prozessor sind Quelltext- Dateien mit Befehlen für den MMIX-Prozessor; die vom MMIX unterstützen Befehle nennt man auch Befehlssatz-Befehle den Loader; der Loader ist derjenige Teil des Betriebssystems, der auszuführende Programme vom der Festplatte/SSD in den Speicher lädt den Assemblierer; der Assemblierer, oft auch Assembler genannt, ist das Computerprogramm, das MMIX-Quelltext in Binärdateien mit MMIX-Befehlen und Loader-Anweisungen übersetzt Aufbau Nachfolgende Abbildung zeigt, wie MMIX-Programme (Quelltext) aus vier durch Leerzeichen und Tabulatoren voneinander getrennte Spalten aufgebaut sind Marke Befehl Operanden Kommentar LOC Data_Segment GREG @ SP GREG Pool_Segment A OCTA 123456 A initialisieren a IS $1 Name für $1 LOC #100 Beginne an 0x100 Main LDO a,a A in Reg a laden Start SUB SP,SP,8 STO a,:sp,0 In der ersten Spalte stehen Marken Marken sind Namen, über die Speicherstellen (Befehle oder Daten) angesprochen werden können Bis auf die Marke Main (Programm-Beginn) sind Marken optional

64 MMIX-Programme 243 Enthält eine Zeile Befehle, jedoch keine Marke, dann muss die Zeile mit einem Leerzeichen oder Tabulator beginnen Anderenfalls würde der Befehl als Marke interpretiert und die Operanden als Befehl, was zu Fehlern führen würde Beginnt eine Zeile mit einem Zeichen /2 {a z, AZ, 09}, so wird diese Zeile als Kommentar ignoriert In der zweiten Spalte stehen Befehle, dh sowohl Befehle aus dem Befehlssatz des MMIX-Prozessors, als auch Anweisungen für den Assembler oder Loader In der dritten Spalte stehen die Operanden Mehrere Operanden werden durch Komma (ohne Leerzeichen) getrennt In der vierten Spalte stehen Kommentare Kommentare sind optional Sie können Leerzeichen enthalten Assembler- und Loader-Befehle Der IS-Befehl Der IS-Befehl ist eine Assemblierer-Anweisung, dh er wird von dem Assemblierungs- Programm ausgeführt, das in Assembler-Sprache geschriebene Befehle in Maschinensprache (Nuller und Einser) übersetzt Der IS-Befehl dient dazu, Allzweck-Register sinnvoll benennen zu können Die Syntax des Befehls lautet: Name IS Register Name ist der neue Name, Register das entsprechende Register Ein Beispiel für die Anwendung des IS-Befehls lautet: Seitenlaenge IS $3 Dieser Befehl veranlasst den Assemblierer dazu, im Quelltext nach den Zeichenketten Seitenlaenge zu suchen und diese durch die Zeichenkette $3 zu ersetzen Dieser Schritt wird wie der Präprozessor in C vor der Übersetzung des Programms in Maschinensprache ausgeführt Der GREG-Befehl Der GREG-Befehl ist ein Loader-Befehl, dh er wird vom Loader beim Laden eines auszuführenden Programms von der Festplatte/SSD in den Arbeitsspeicher ausgeführt Der GREG-Befehl reserviert das nächste freie globale Register (dh er verringert die in rg stehende Zahl um den Wert 1) Wenn für den GREG-Befehl ein Parameter angegeben

244 6 MMIX-Prozessor ist, wird das globale Register mit dem entsprechenden Wert initialisiert Die Syntax des GREG-Befehls lautet: Name GREG Wert Name ist der Wert, über den das neue globale Register ansprechbar sein soll (wie beim IS-Befehl), Wert ist der Initialisierungs-Wert Name und Wert sind optional Beispiel: Steht in Register rg der Wert 255, dann hat der Befehl SP GREG #4000000000000000 folgende Auswirkungen: Der in rg abgespeicherte Wert wird von 255 auf 254 geändert In Register 254 wird der Wert 0x4000000000000000 abgespeichert; beim MMIX- Assemblierer werden hexadezimale Zahlen mit einer führenden Raute ( # ) statt mit führendem 0x gekennzeichnet Register 254 kann auch über den Namen SP angesprochen werden Der LOC-Befehl Der LOC-Befehl ist ein Loader-Befehl LOC steht für locate an address und setzt die Eingabemarke des Loaders auf die als Parameter angegebene Adresse Der Befehl teilt dem Loader beim Laden einer ausführbaren MMIX-Datei in den Arbeitsspeicher mit, ab welcher Adresse Befehlscode in den Speicher geschrieben oder ab welcher Speicher-Adresse Variable angelegt werden sollen Die Syntax des Befehls lautet: LOC Adresse Als Adresse kann entweder eine Zahl, oder ein Segmentname (zb Data_Segment) angegeben werden Der Befehl LOC #100 zeigt dem Loader beispielsweise an, dass die nachfolgenden Daten im Speicher ab Adresse 0x100 abgelegt werden sollen Die vom Loader aktuell betrachtete Adresse wird beim MMIX mit dem Zeichen @ bezeichnet @ meint dabei the place where we are at

64 MMIX-Programme 245 Die Befehle BYTE, WYDE, TETRA und OCTA Die Befehle BYTE, WYDE, TETRA und OCTA sind Loader-Befehle, die Datenworte der Größe 8 Bit (BYTE), 16 Bit (WYDE), 32 Bit (TETRA) und 64 Bit (OCTA) im Speicher allozieren (anlegen) und diesen bei Angabe von Parametern auch initialisieren Die Syntax lautet: Marke Befehl Wert Befehl ist einer der Anweisungen BYTE, WYDE, TETRA, OCTA, Marke ist der Name (auch Marke genannt), über den auf die Adresse der allozierten Daten zugegriffen werden kann, und Wert der Zahlenwert, mit dem das Datenwort initialisiert werden soll; werden mehrere Werte durch Komma (ohne Leerzeichen) getrennt, werden mehrere Datenworte desselben Typs angelegt Beispiel: Die Befehle LOC Vektor BYTE 1,2,3 Data_Segment reservieren im Speicher an Adresse 0x20000000000000000 drei Byte und initialisieren diese mit den Werten 1, 2 und 3 Nachfolgende MMIX-Befehle können auf die Adresse des ersten Byte (das Byte, in dem die 1 gespeichert ist) über die Marke Vektor zugreifen Beim MMIX werden aus mehreren Byte zusammengesetzte Datenworte (Wyde, Tetra, Octa) an Adressen ausgerichtet, die dem ganzzahligen Vielfachen ihrer Datenwortbreite entsprechen (Alignment) Zur Einhaltung des Alignments werden ggf Leer-Byte eingefügt Die Codierung der Datenworte folgt dem Big-Endian-Schema Mit jedem durch BYTE, WYDE, TETRA oder OCTA allozierten Datenwort wird die aktuelle Adresse @ um die entsprechende Byteanzahl erhöht Müssen aufgrund des Alignments Leer-Byte eingefügt werden, so werden diese bei der Erhöhung ebenfalls berücksichtigt

246 6 MMIX-Prozessor Aufgaben T a) Aus wievielen/welchen Spalten bestehen MMIX-Programme? T b) Wie werden die Spalten im Programmcode getrennt? T c) Wie muss man MMIX-Codezeilen schreiben, die keine Marke verwenden? T d) Wie kann man beim MMIX-Assembler eine komplette Zeile auskommentieren? T e) Werden alle vier Spalten eines MMIX-Programms für den Übersetzungsvorgang herangezogen? Gehen Sie auf die einzelnen Spalten ein

64 MMIX-Programme 247 f) Geben Sie Anweisungen an, mit denen Sie die Register 0, 1 und 2 durch die Namen a, b und c ansprechbar machen a Is $0 er ls $1 c ls SLZ T g) Geben Sie Anweisungen an, mit denen Sie die Register 1, 2 und 3 durch die Namen ankathete, gegenkathete und hypothenuse ansprechbar machen h) Geben Sie die Anweisung an, mit denen Sie ein globales Register anlegen, dieses über den Namen PI ansprechbar machen und mit 0x400921FB54442EEA initialisieren PI GREG # 400921 FB 54442 EEA T i) Geben Sie die Anweisung an, mit denen Sie ein globales Register anlegen und dieses über den Namen A ansprechbar machen

248 6 MMIX-Prozessor T j) Mit welchen Befehlen können Sie Worte der Länge 8, 16, 32 und 64 Bit im Speicher reservieren? T k) Was ist der Loader? l) Geben Sie Befehle an, mit denen Sie an Speicheradresse #2000000000000000 vier Bytes reservieren, die über die Marken A, B, C und D angesprochen werden können A soll mit 1 und B mit 2 initialisiert werden Fügen Sie auch einen geeigneten Befehl zur Reservierung und Initialisierung eines globalen Registers mit dem Wert 0x2000000000000000 ein LOC # 20 - -0 GREG @ $254 EOXZO O A BYTE 1 B BYTE 2 D C BYTE BKTE

0 20 64 MMIX-Programme 249 T m) Geben Sie Befehle an, mit denen Sie an Speicheradresse #2000000000000000 zwei 64 Bit Werte reservieren, die über die Marken Null, NaN und Inf angesprochen werden können Null soll mit der Gleitkommazahl 00 initialisiert werden, NaN mit der Gleitkomma-Codierung Not a Number und Inf mit der Gleitkomma- Codierung unendlich Fügen Sie auch einen geeigneten Befehl zur Reservierung und Initialisierung eines globalen Registers mit dem Wert 0x2000000000000000 ein Betrachten Sie die folgenden Befehle: X Y Z LOC #2000000000000000 BYTE WYDE OCTA n) Geben Sie die Adressen an, an denen X und Y im Speicher abgelegt werden X : 0 20 - - 0 4 02 bis 0 20-03 o) An welchen Adressen wird Z abgelegt? z : oxzo - 08

250 6 MMIX-Prozessor Betrachten Sie die folgenden Befehle: A B C D LOC #2000000000000000 WYDE TETRA BYTE OCTA T p) Geben Sie die Adressen an, an denen A, B, C und D im Speicher abgelegt werden

64 MMIX-Programme 251 q) Geben Sie Befehle an, die ein neues globales Register anlegen und dieses mit Speicheradresse 0x2000000000000000 initialisieren, an dieser Speicheradresse ein 64 Bit breites Datenwort anlegen, das mit 4 initialisiert wird und über die Marke N angesprochen werden kann, an den darauffolgenden Speicheradressen zwei 4-dimensionale Vektoren wie folgt anlegen: Der erste Vektor soll über ADR_A1 ansprechbar sein und mit den 64 Bit-Zahlen [1, 2, 3, 4] initialisert werden; der zweite Vektor soll über ADR_A2 ansprechbar sein und mit den 64 Bit-Zahlen [10, 20, 30, 40] initialisiert werden GREG # 20 - LOC # 20 O - 0 N OCTA 4 ADR - A 1 OCTA 1 OCTA 2 OCTA 3 OCTA 4 ADRAZ OOTA 10,20, 30,40

252 6 MMIX-Prozessor T r) Geben Sie Befehle an, die ein neues globales Register anlegen und dieses mit Speicheradresse 0x2000000000000000 initialisieren, an dieser Speicheradresse ein 64 Bit breites Datenwort anlegen, das mit der Marke Erg angesprochen werden kann, an den darauffolgenden Speicheradressen zwei 3-dimensionale Vektoren wie folgt anlegen: Der erste Vektor soll über V1 ansprechbar sein und mit den 32 Bit-Zahlen [100, 200, 300] initialisert werden; der zweite Vektor soll über V2 ansprechbar sein und mit den 32 Bit-Zahlen [10, 20, 30] initialisiert werden

64 MMIX-Programme 253 Übersetzungsprozess Nachfolgende Abbildung zeigt den Übersetzungsprozess, mit dem MMIX-Quelldateien in MMIX-Objektdateien umgewandelt werden um anschließend vom MMIX-Simulator ausgeführt werden zu können Quelldatei *mms LOC Data_Segment GREG @ A OCTA 3 a IS $1 LOC #100 Main LDO a,a ADD a,a,8 STO a,a mmixal *mms Assembler (Präprozessor) LOC Data_Segment GREG @ A OCTA 3 a IS $1 LOC #100 Main LDO $1,$254,0 ADD $1,$1,8 STO $1,$254,0 Assembler Binärdatei *mmo xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxx 8D01FE0020010108AD01FE00 xxxxxxxxxxxxxxxxxxxxxxxx Loader-Anweisungen MMIX-Befehle Symboltabelle mmix -i *mmo MMIX-Simulator MMIX-Quelldateien werden mit einem Texteditor erstellt Die Quelldateien haben die Endung mms (MMIX source) Mit einem Aufruf des Assemblierungsprogramms mmixal

254 6 MMIX-Prozessor werden die Quelldateien in Objektdateien übersetzt Der Assembler verarbeitet zunächst die Assembler-Anweisungen (zb IS-Befehle) mit einem Präprozessor und löst Namen und Marken auf Anschließend übersetzt er die MMIX-Befehle (mit den aufgelösten Marken) in entsprechende Binärwerte Die durch Namen und Marken gegebenen Anweisungen sind somit implizit in den MMIX-Befehlen enthalten (Nummer des Registers, Speicheradresse, ) Aus den Sprung-Marken erstellt der Assembler eine Symboltabelle, in der für jedes vorkommende Symbol die entsprechende Adresse eingetragen wird Auf diese Weise kann zb der Loader über die Symboltabelle die Adresse der Marke Main ermitteln und zum Programmstart an diese Adresse verzweigen Befehlswort Das Befehlswort beim MMIX ist für alle Befehle 32 Bit breit, dh die Länge des Befehlsworts (in Byte) ist konstant Dies ist ein typisches Merkmal für RISC-Prozessoren Durch die konstante Befehlswortbreite ist es sehr einfach, Befehle im Voraus aus dem Befehlsspeicher zu laden: Da alle Befehle vier Byte breit sind, können durch Laden der nächsten 4 n Byte die nächsten n Befehle aus dem Speicher geladen werden Bei CISC-Prozessoren ist die Länge des Befehlsworts nicht konstant sondern abhängig vom jeweiligen Befehl Bei x86 sind Befehlsworte beispielsweise zwischen 1 und 15 Byte lang Beim MMIX gliedert sich das 32 Bit breite Befehlswort in vier Byte, die Opcode, X, Y und Z genannt werden 31 24 23 16 15 8 7 0 OP X Y Z Der Opcode ist eine 8 Bit breite Zahl die festlegt, um welchen Befehl es sich handelt (Addieren, Subtrahieren, ) Die Zuordnung Opcode $ Befehl wird durch eine Tabelle (su) spezifiziert X ist (bis auf Speicherbefehle) der Ziel-Operand, dh eine 8 Bit breite Zahl, die festlegt, in welches Register (0 bis 255 bei Allzweckregistern bzw 0 bis 31 bei Spezialregistern) das Ergebnis der Operation abgelegt werden soll Die Codierung von X entspricht der Registernummer, dh Register 1 wird als X = 0000 0001 2 =0x01 codiert Y und Z sind die Quelloperanden, dh zwei 8 Bit breite Zahlen, die festlegen, in welchen Registern die Quelloperanden stehen Die Codierung entspricht der von X

64 MMIX-Programme 255 Spezialregister werden im Befehlswort wie folgt codiert: x S(x) x S(x) x S(x) x S(x) 0x00 rb 0x08 rc 0x10 rq 0x18 rw 0x01 rd 0x09 rn 0x11 ru 0x19 rx 0x02 re 0x0A ro 0x12 rv 0x1A ry 0x03 rh 0x0B rs 0x13 rg 0x1B rz 0x04 rj 0x0C ri 0x14 rl 0x1C rww 0x05 rm 0x0D rt 0x15 ra 0x1D rxx 0x06 rr 0x0E rtt 0x16 rf 0x1E ryy 0x07 rbb 0x0F rk 0x17 rp 0x1F rzz Viele MMIX-Befehle verwenden sog Direktoperanden (engl immediate operands), dh Operanden, die direkt im Befehlswort stehen Beim MMIX sind folgende Direktoperanden möglich: Z: Die Bits 7 0 des Befehlsworts enthalten eine 8 Bit breite Zahl Y: Die Bits 15 8 des Befehlsworts enthalten eine 8 Bit breite Zahl YZ: Die Bits 15 0 des Befehlsworts enthalten eine 16 Bit breite Zahl XYZ: Die Bits 23 0 des Befehlsworts enthalten eine 24 Bit breite Zahl

256 6 MMIX-Prozessor Nachfolgende Tabelle übersetzt MMIX-Opcodes in diejenigen Zahlen, die im Befehlswort in den Bits 3124 abgelegt werden müssen! 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF! 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 TRAP 5ν FCMP ν FUN ν FEQL ν FADD 4ν FIX 4ν FSUB 4ν FIXU 4ν FLOT[I] 4ν FLOTU[I] 4ν SFLOT[I] 4ν SFLOTU[I] 4ν FMUL 4ν FCMPE 4ν FUNE ν FEQLE 4ν FDIV 40ν FSQRT 40ν FREM 4ν FINT 4ν MUL[I] 10ν MULU[I] 10ν DIV[I] 60ν DIVU[I] 60ν ADD[I] ν 2ADDU[I] ν CMP[I] ν SL[I] ν BN[B] ν+π BNN[B] ν+π PBN[B] 3ν-π PBNN[B] 3ν-π CSN[I] ν ADDU[I] ν 4ADDU[I] ν CMPU[I] ν SLU[I] ν BZ[B] ν+π BNZ[B] ν+π PBZ[B] 3ν-π PBNZ[B] 3ν-π CSZ[I] ν SUB[I] ν 8ADDU[I] ν NEG[I] ν SR[I] ν BP[B] ν+π BNP[B] ν+π PBP[B] 3ν-π PBNP[B] 3ν-π CSP[I] ν SUBU[I] ν 16ADDU[I] ν NEGU[I] ν SRU[I]ν BOD[B] ν+π BEV[B] ν+π PBOD[B] 3ν-π PBEV[B] 3ν-π CSOD[I] ν CSNN[I] ν ZSN[I] ν CSNZ[I] ν ZSZ[I] ν CSNP[I] ν ZSP[I] ν CSEV[I] ν ZSOD[I] ν ZSNN[I] ν ZSNZ[I] ν ZSNP[I] ν ZSEV[I] ν LDB[I] µ+ν LDBU[I] µ+ν LDW[I] µ+ν LDWU[I] µ+ν LDT[I] µ+ν LDTU[I] µ+ν LDO[I] µ+ν LDOU[I] µ+ν LDSF[I] µ+ν LDHT[I] µ+ν CSWAP[I] 2µ+2ν LDUNC[I] µ+ν LDVTS[I] ν PRELD[I] ν PREGO[I] ν GO[I] 3ν STB[I] µ+ν STBU[I] µ+ν STW[I] µ+ν STWU[I] µ+ν STT[I] µ+ν STTU[I] µ+ν STO[I] µ+ν STOU[I] µ+ν STSF[I] µ+ν STHT[I] µ+ν STCO[I] µ+ν STUNC[I] µ+ν SYNCD[I] ν PREST[I] ν SYNCID[I] ν PUSHGO[I] 3ν OR[I] ν ORN[I] ν NOR[I] ν XOR[I] ν AND[I] ν ANDN[I] ν NAND[I] ν NXOR[I] ν BDIF[I] ν WDIF[I] ν TDIF[I] ν ODIF[I] ν MUX[I] ν SADD[I] ν MOR[I] ν MXOR[I] ν SETH ν SETMH ν SETML ν SETL ν INCH ν INCHM ν INCML ν INCL ν ORH ν ORMH ν ORML ν ORL ν ANDNH ν ANDNMH ν ANDNML ν ANDNL ν JMP[B] ν PUSHJ[B] ν GETA[B] ν PUT[I] ν POP 3ν RESUME 5ν [UN]SAVE 20µ+ν SYNC ν SWYM ν GET ν TRIP 5ν 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xA 0xB 0xC 0xD 0xE 0xF! Die Übersetzung erfolgt folgendermaßen: Befehl suchen Doppelzeile ermitteln, in der der Befehl steht An der Seite der Tabelle das obere Nibble (= die oberen 4 Bits) des Opcodes ablesen, zb ADD ) 0x2 Prüfen, ob der Befehl im oberen oder im unteren Teil der Doppelzeile steht Steht der Befehl im oberen Teil der Doppelzeile, kann man das untere Nibble (= die unteren 4 Bits) des Opcodes an der ersten Tabellenzeile ablesen, zb ADD ) 0x0 oder 0x1 Steht der Befehl im unteren Teil der Doppelzeile, kann man das

64 MMIX-Programme 257 untere Nibble (=die unteren 4 Bits) des Opcodes an der untersten Tabellenzeile ablesen, zb 2ADDU ) 0x8 oder 0x9 Anschließend muss nur noch unterschieden werden, ob es sich um die linke oder die rechte Variante des Befehls handelt, beispielsweise ob man in der oberen Zeile 0x0 oder 0x1 auswählen muss oder ob man in der unteren Zeile 0x8 oder 0x9 auswählen muss Dazu wird der in der Tabelle nach dem Befehlsnamen in Klammern stehende Buchstabe verwendet; I bedeutet immediate, dh Direktoperand; Beispiel: Bei ADD $1,$2,$3 wird ADD mit 0x20 codiert, bei ADD $1,$2,3 mit 0x21 B bedeutet backward, dh Rückwärtssprung; erhöht sich bei einem Sprung die Adresse, wird der linke Zahlenwert verwendet (Vorwärts- Sprung); verringert sich bei einem Sprung die Adresse, wird der rechte Zahlenwert verwendet (Rückwerts-Sprung) Aus der Tabelle lassen sich auch die von Donald Knuth für den MMIX-Simulator spezifizierten Ausführungszeiten ermitteln: entspricht der Dauer von 1 Takt µ ist die Anzahl der Takte für einen Speicherzugriff bedeutet 2, wenn gesprungen wird, und 0, wenn nicht gesprungen wird

258 6 MMIX-Prozessor Aufgaben T a) Wie breit (in Bit) ist das MMIX Befehlswort? T b) Skizzieren Sie das MMIX Befehlswort und geben Sie den Inhalt jedes Bytes an T c) In welchen Byte des Befehlsworts wird im Allgemeinen Information über die Quelloperanden bzw über die Zieloperanden abgespeichert? T d) Was ist ein Direktoperand? e) Wieviele Taktzyklen benötigen die meisten Befehlen zur Ausführung? 1 Takt f) Welcher Befehl benötigt die längste Zeit zur Ausführung, wenn man von Speicherbefehlen absieht? Division : 60 Table g) Wieviele Takte benötigt der BZ-Befehl, wenn gesprungen wird? V + IT = 1+2 =3 Takte

64 MMIX-Programme 259 h) Wieviele Takte benötigt der BZ-Befehl, wenn nicht gesprungen wird? Uta = 1+0 Table = 1 Tawt i) Wieviele Takte benötigt der PBZ-Befehl, wenn gesprungen wird? Iv - T = 3-2=1 Tahf j) Wieviele Takte benötigt der PBZ-Befehl, wenn nicht gesprungen wird? Iv - IT = 3-0 =3 Takte k) Geben Sie das 32 Bit breite Befehlswort des Befehls SL $1,$2,3 an 0 39010203 T l) Geben Sie das 32 Bit breite Befehlswort des Befehls SUB $5,$6,7 an