Befehlsformat und Aufbau der ULM

Ein Computerprogramm besteht aus einer Folge von Befehlen, die in einer festgelegten Reihenfolge ausgeführt werden. Mit jedem Befehl kann eine Komponente des Computers gesteuert werden. Man muss also wissen, welche Komponenten gesteuert werden können, welche Befehle man verwenden kann

Gemeinsamkeiten mit der Mini-ALU

Befehle für die ULM bestehen aus 32 Bits, haben aber im Prinzip das gleiche Format wie die Befehle der Mini-ALU:

. . . Op X Y Z

Die Felder Op, X, Y, Y bestehen aus jeweils 8 Bits. Es bietet sich deshalb an, dass Befehle in der Hexadezimaldarstellung aufgeschrieben werden, womit jedes Feld mit zwei hexadezimalen Ziffern beschrieben wird. In Darstellung wie beispielsweise

. . . 30 01 02 03

kann das Präfix 0x weggelassen werden, da klar ist, dass hier hexadezimal Ziffern gemeint sind und die Bitmuster der Felder mit Op = 0x30, X = 0x01, Y = 0x02 und Z = 0x03 beschrieben werden.

Wie bei der Mini-ALU bezeichnet Op den Opcode, also den Befehlstyp und X, Y und Z werden als Operanden benutzt. Beispielsweise ist Op=0x30 ein Befehl, um Register zu addieren. Hier ein Auszug aus dem Befehlssatz, mit Befehlen und Bezeichnungen analog zum Befehlssatz der Mini-ALU:

\[\begin{array}{ll}\text{Op} & \text{Effekt} \\\text{0x56} & \bigl(u(\text{%00}) + u(\text{XY})\bigr) \bmod 2^{64} \to u(\text{%}Z) \\\text{0x5D} & \bigl(u(\text{%}Z)\cdot 2^{16} + u(\text{XY})\bigr) \bmod 2^{64} \to u(\text{%}Z) \\\text{0x30} & \bigl(u(\text{%}Y) + u(\text{%}X)\bigr) \bmod 2^{64} \to u(\text{%}Z) \\\text{0x31} & \bigl(u(\text{%}Y) - u(\text{%}X)\bigr) \bmod 2^{64} \to u(\text{%}Z) \\\end{array}\]

Gilt also wie bei obigen Befehl Op = 0x30, X = 0x01, Y = 0x02 und Z = 0x03, dann kann dessen Effekt mit

\[\bigl(u(\text{%0x02}) + u(\text{%0x01})\bigr) \bmod 2^{64} \to u(\text{%0x03})\]

beschrieben werden, d.h. das Register %0x01 wird mit Register %0x02 addiert und das Ergebnis in Register %0x03 geschrieben. Im Unterschied zur Mini-ALU sind die Arbeitsregister der ULM jeweils 64-Bit-Register. Bei der Addition wird also Modulo \(2^{64}\) gerechnet. Die Flags CF, OF, SF und ZF im Statusregister werden aber nach den gleichen Regeln gesetzt.

Aufbau im Groben

Speicher Eingabegerät Ausgab egerät Bus CPU(central p ro cessing unit) Steuerwerk Befehlszeiger(%IP) Befehlsregister(%IR) ALU(a rithmetical logical unit) Register 0 Register 255 Statusregister

Die Komponenten im Detail

ALU

Speicher

. . . 0x00 . 0x01 . 0x02 . 0x03 . 0x04 . 0x05 . 0x06 . 0x07 . 0x08 . 0x09 . 0x0A . 0x0B . 0x0C . 0x0D . Speic herzelle mit A ddresse 0x09 .

Steuerwerk