4. Mikroprogrammierung 4a - 1

Ähnliche Dokumente
Übung Praktische Informatik II

4. Mikroprogrammierung 4a - 1

Computerarchitektur. Übung 3

Struktur der CPU (1) Die Adress- und Datenpfad der CPU: Befehl holen. Vorlesung Rechnerarchitektur und Rechnertechnik SS Memory Adress Register


Datenpfad einer einfachen MIPS CPU

4. Mikroprogrammierung (Firmware)

Kap.3 Mikroarchitektur. Prozessoren, interne Sicht

Die Mikroprogrammebene eines Rechners

Technische Informatik I - HS 18

Grundlagen der Rechnerarchitektur

Teil 2: Rechnerorganisation

Datenpfad einer einfachen MIPS CPU

Technische Informatik I - HS 18

Prinzipieller Aufbau und Funktionsweise eines Prozessors

Steuerwerk einer CPU. Einführung in die Technische Informatik Falko Dressler, Stefan Podlipnig Universität Innsbruck

Datenpfad einer einfachen MIPS CPU

Arithmetik, Register und Speicherzugriff. Grundlagen der Rechnerarchitektur Assembler 9

Datenpfad einer einfachen MIPS CPU

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab...

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Von-Neumann-Architektur

Prozessorarchitektur. Kapitel 1 - Wiederholung. M. Schölzel

Was ist die Performance Ratio?

Übungen zu Grundlagen der Rechnerarchitektur und -organisation: Bonusaufgaben Übung 8 und Präsenzaufgaben Übung 9

Rechnernetze und Organisation

Pipelining. Die Pipelining Idee. Grundlagen der Rechnerarchitektur Prozessor 45

Grundbegriffe der Informatik

Java-Prozessoren. Die Java Virtual Machine spezifiziert... Java Instruktions-Satz. Datentypen. Operanden-Stack. Konstanten-Pool.

Computer-Architektur Ein Überblick

Assembler - Adressierungsarten

Lösungsvorschlag 9. Übung Technische Grundlagen der Informatik II Sommersemester 2009

Assembler am Beispiel der MIPS Architektur

Tutorium Rechnerorganisation

Praktikum Compilerbau Sitzung 9 Java Bytecode

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

Datenpfaderweiterung Der Single Cycle Datenpfad des MIPS Prozessors soll um die Instruktion min $t0, $t1, $t2 erweitert werden, welche den kleineren

Just-In-Time-Compiler (2)

Rechnergrundlagen SS Vorlesung

Rechnerorganisation. (10,11) Informationskodierung (12,13,14) TECHNISCHE UNIVERSITÄT ILMENAU. IHS, H.- D. Wuttke `09

J.5 Die Java Virtual Machine

Grundlagen der Rechnerarchitektur. MIPS Assembler

Auch hier wieder. Control. RegDst Branch MemRead MemtoReg ALUOp MemWrite ALUSrc RegWrite. Instruction[31 26] (also: das Opcode Field der Instruktion)

Musterlösungen Technische Informatik 2 (T2) Prof. Dr.-Ing. D. P. F. Möller

Just-In-Time-Compiler (2)

Die HAM. Die Hypothetische Akku-Maschine

Der von Neumann Computer

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

2. Computer (Hardware) K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Rechnerstrukturen 1: Der Sehr Einfache Computer

Rechnerstrukturen Sommersemester 2003

Assembler Integer-Arithmetik

Hochschule Düsseldorf University of Applied Sciences HSD RISC &CISC

... Adressierung und Befehlsfolgen (1) Speicherbelegung. Hauptspeicheradressen. Inhalt von Speicherbelegungen: Operanden - Zahlen - Zeichen Befehle

Teil 1: Prozessorstrukturen

Kap.3 Mikroarchitektur. Prozessoren, interne Sicht

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

Übungsblatt 7 Implementierung von Programmsteuerbefehlen in einer Befehlspipeline Abgabefrist: Mittwoch , 14:00 Uhr

Selbststudium Informationssysteme - H1102 Christian Bontekoe & Felix Rohrer

Vorlesung Rechnerarchitektur. Einführung

Sprungbefehle und Kontroll-Strukturen

Teil VIII Von Neumann Rechner 1

Datapath. Data Register# Register# PC Address instruction. Register#

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht

FAKULTÄT FÜR INFORMATIK

RO-Tutorien 3 / 6 / 12

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

32 Bit Konstanten und Adressierung. Grundlagen der Rechnerarchitektur Assembler 78

Data Hazards. Grundlagen der Rechnerarchitektur Prozessor 74

Rechnergrundlagen SS Vorlesung

Mikroprozessor (CPU)

10. Die Adressierungsarten des MSP 430

Technische Informatik I Übung 3: Assembler

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

Das Prinzip an einem alltäglichen Beispiel

14.3 Kontrollogik. Allgemeines: Kontrollogik wird in 3 Stufen realisiert: Clock - Erzeugung. 2 Uhrzeit. PALs. /ck. Kontrollsignale.

9. Die Adressierungsarten des MSP 430

2.2 Rechnerorganisation: Aufbau und Funktionsweise

System-Architektur und -Software

Johann Wolfgang Goethe-Universität

CPU Speicher I/O. Abbildung 11.1: Kommunikation über Busse

DieÜbersetzung funktionaler Programmiersprachen

Praktikum ASP Blatt 2 1. LEHRSTUHL FÜR RECHNERARCHITEKTUR UND PARALLELE SYSTEME Aspekte der systemnahen Programmierung bei der Spieleentwicklung

RISC-Prozessoren (1)

Arithmetische und Logische Einheit (ALU)

Transkript:

4. Mikroprogrammierung 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die Integer Java Virtual Machine und der Stack 4.4 Die Mikroprogrammiersprache MAL 4.5 Optimierung der Mikroarchitektur 4. Mikroprogrammierung 4a - 1

4.1 Motivation Die Aufgabe des Mikroprogramms ist das Ausführen der Maschinenbefehle der ISA-Ebene (Instruction Set Architecture) in Hardware. Das Mikroprogramm verwendet die Ebene der digitalen Logik (die Gatter-Schaltwerke und Schaltnetze und die Register) der digitalen Logik direkt. Es handelt sich also sozusagen um einen Hardware-Interpreter für Maschinenbefehle. Je nach Komplexität der Maschinenbefehle kann die Mikroarchitektur eines Mikroprozessors sehr einfach oder sehr aufwändig sein 4. Mikroprogrammierung 4a - 2

4.2 Eine einfache Mikroarchitektur Als Beispiel entwickeln wir eine Mikroarchitektur, die JVM-Befehle in Hardware ausführen kann. Dabei beschränken wir uns auf Integer-Operationen. Wir nennen sie IJVM (Integer Java Virtual Machine). Stufe 4 Stufe 3 Assembler Betriebssystemmaschine Stufe 2 ISA (Instruktionssatz-Architektur) Stufe 1 Mikroarchitektur Stufe 0 Digitale Logik (Gatter, Register) 4. Mikroprogrammierung 4a - 3

Das Prinzip der IJVM In einer Endlosschleife: Hole den nächsten IJVM Befehl. Führe den IJVM Befehl durch ein kleines Mikroprogramm aus Ein Mikroprogramm besteht aus Mikroinstruktionen. Eine Mikroinstruktion ist eine Folge von Bits. Die Bits beschreiben den Zustand von Schaltern auf der Ebene der digitalen Logik: ein (1) aus (0) Eine Mikroinstruktion wird in einem Maschinenzyklus ausgeführt. 4. Mikroprogrammierung 4a - 4

Der Datenpfad der IJVM (1) 1. Register (alle 32 Bits breit, bis auf MBR): Speicherzugriff: MDR: Memory Data Register MAR: Memory Address Register PC: Program Counter MBR (8 Bit): Memory Buffer Register SP: Stack Pointer LV: Local Variables CPP: Constant Pool Pointer TOS: Top Of Stack OPC: Offset Program Counter H: Help register 4. Mikroprogrammierung 4a - 5

Datenpfad der IJVM (2) 2. Zwei Busse: Bus B: Inhalt eines Registers auf den B-Eingang der ALU legen Bus C: Ergebnis einer ALU-Operation auf die Eingänge (fast) aller Register legen 3. ALU (Arithmetic and Logic Unit, Rechenwerk): sechs Eingangssignale zum Steuern der ALU-Operation Das Ergebnis geht an den Shifter und zwei Signale N und Z als Aus-gänge 4. Shifter: modifiziert das Ergebnis durch Shifting Steuerung mit zwei Signalen 4. Mikroprogrammierung 4a - 6

Zugriff auf die Register Auslesen ( Register auf den Bus B legen ): Kontrollsignal anlegen Besonderheiten: MAR wird für den Speicherzugriff verwendet und kann nicht auf B gelegt werden MBR behandeln wir später (zusätzliches Kontrollsignal) H wird automatisch auf den A-Eingang der ALU gelegt Speichern ( Register vom C-Bus laden ) Kontrollsignal anlegen Besonderheiten: MDR kann aus dem Speicher oder von C aus geladen werden MBR wird immer aus dem Speicher geladen 4. Mikroprogrammierung 4a - 7

Die Arithmetic Logic Unit (ALU) Wir verwenden die folgende (stark vereinfachte) ALU: hier: Logik für ein Bit. Die ALU entsteht durch Verketten von 32 dieser Schaltungen! 4. Mikroprogrammierung 4a - 8

Steuerung der ALU 0 0 1 Increment = Carry in Bit 0 auf 1 setzen! 4. Mikroprogrammierung 4a - 9

Shifter Ermöglicht eine Manipulation der ALU Ausgabe: Zwei Signale ( 8 SLL8 (Shift Left Logical verschiebe alle Bits um 8 Stellen nach links fülle untere 8 Bits mit 0 auf SRA (Shift Right Arithmetic 1) verschiebe alle Bits um 1 Stelle nach rechts verändere das höchstwertige Bit nicht 4. Mikroprogrammierung 4a - 10

Zeitlicher Ablauf einer Mikroinstruktion (ein Zyklus) Wie kann man innerhalb einer Mikroinstruktion dasselbe Register lesen und schreiben? 4. Mikroprogrammierung 4a - 11

Speicherzugriff auf Daten (1) per MAR/MDR Immer ein Wort gleichzeitig (= 4 Byte) MAR enthält die Adresse MDR enthält den Inhalt Beispiel: MAR = 2 dann enthält MDR die Bytes 8-11 Realisierung des MAR in Hardware: 4. Mikroprogrammierung 4a - 12

Speicherzugriff auf Daten (2) Speichern: lade MAR mit der Speicher-Adresse (erster Zyklus) lade MDR mit dem Inhalt, signalisiere, dass gespeichert werden soll (zweiter Zyklus) Die Daten sind am Ende des dritten Zyklus im Speicher, MDR darf im dritten Zyklus wieder verwendet werden! Lesen: lade MAR mit der Speicher-Adresse, signalisiere, dass geladen werden soll ( Zyklus.1) Ergebnis liegt ab Ende 2. Zyklus im MDR, ursprünglicher Inhalt des MDR kann im 2. Zyklus noch verwendet werden im 2. Zyklus darf nicht vom C Bus ins MDR geschrieben werden 4. Mikroprogrammierung 4a - 13

Speicherzugriff auf Maschinenbefehle (ISA-Instruktionen) per PC/MBR byteweise MBR wird zur Ansteuerung des Mikroprogramms für diesen Maschinenbefehl (diese ISA-Instruktion) verwendet (später dazu mehr) Speichern gibt es nicht! Lesen analog zum Lesen von Daten nur ein Byte FETCH-Signal zum Ansteuern Bei allen Speicherzugriffen: Annahme, dass die Daten zu 100% im Cache gefunden werden, da sonst mehr als ein Zyklus für den Speicherzugriff gebraucht würde 4. Mikroprogrammierung 4a - 14

Mikroinstruktion Eine Mikroinstruktion besteht aus 36 Bits: 8 Bits (ALU) für die Steuerung der ALU 9 Bits (C) für das Schreiben in die Register 3 Bits (MEM) für den Speicherzugriff 4 Bits (B) für das Legen der Register auf den B-Bus 9 Bits (Addr), um die nächste Mikroinstruktion zu adressieren 3 Bits (JAM) für bedingte Sprünge 4. Mikroprogrammierung 4a - 15

Kontrollpfad Control store für das Mikroprogramm (512 Plätze für Instruktionen) Micro Instruction Register (MIR): enthält die aktuelle Mikroinstruktion Micro Program Counter (MPC): zeigt auf die nächste auszuführende Mikroinstruktion 4-to-16 Decoder: Bildet das 4-Bit-Signal für den B-Bus auf die Enable-Signale für die einzelnen Register ab 4. Mikroprogrammierung 4a - 16

Ablauf eines Zyklus (1) Lade neue Mikroinstruktion: gemäß MPC aus dem control store in das MIR 4. Mikroprogrammierung 4a - 17

Ablauf eines Zyklus (2) Stabilisieren der ALU-Eingänge: 4-Bit B-Teil des MIR wird dekodiert Das entsprechende Register wird auf den B-Bus gelegt B-Bus stabilisiert sich und liegt am B-Eingang der ALU an H-Register liegt am A Eingang der Alu an 4. Mikroprogrammierung 4a - 18

Ablauf eines Zyklus (3) Berechnung: die ALU rechnet der Shifter modifiziert das Ergebnis 4. Mikroprogrammierung 4a - 19

Ablauf eines Zyklus (4) Stabilisieren des C-Buses: die Ausgabe des Shifters auf dem C-Bus stabilisiert sich 4. Mikroprogrammierung 4a - 20

Ablauf eines Zyklus (5) Speichern in Registern: Laden der Register vom C-Bus Das geschieht sehr schnell, als Reaktion auf steigende Flanke des Taktgebers 4. Mikroprogrammierung 4a - 21

Ablauf eines Zyklus (6) Berechnen des neuen MPC: Generell steht die Adresse der nächsten Mikroinstruktion im Addr-Feld der aktuellen Mikroinstruktion. Ausnahmen: verzweigen (JAMN, JAMZ) ( JMPC ) springen 4. Mikroprogrammierung 4a - 22

Bedingte Sprünge Bei bedingten Sprüngen ist typischerweise das oberste Bit von NEXT_ADDR auf 0 gesetzt (NEXT_ADDR[8] = 0). Wenn das JAMN(Jump on Negative)-Bit gesetzt ist, wird zu NEXT_ADDRESS[8] der ALU-Ausgang N hinzugeodert : MPC[8] = NEXT_ADDRESS[8] OR N Analog dazu wird JAMZ (Jump on Zero) gehandhabt. Insgesamt gilt: MPC[8] = (JAMZ AND Z) OR (JAMN AND N) OR NEXT_ADDRESS[8] Das N-Bit ist gesetzt, wenn das Ergebnis der letzten ALU-Operation eine 1 im höchstwertigen Bit hatte. Das Z-Bit ist gesetzt, wenn das Ergebnis der letzten ALU-Operation 0 war. 4. Mikroprogrammierung 4a - 23

Beispiel für JAMZ 4. Mikroprogrammierung 4a - 24

JMPC (Jump on PC) Verwendung: für direkte Sprünge zu einer Mikroinstruktion im control store die Adresse, an die gesprungen wird, wird aus dem MBR gelesen und mit NEXT_ADDR verodert. Idee: Ins MBR wird immer der aktuelle Maschinenbefehl geladen. Dieser wird als Index in den control store verwendet. An der Stelle, auf die der Index zeigt, steht die erste Mikroinstruktion zur Ausführung des Maschinenbefehls. 4. Mikroprogrammierung 4a - 25

4.3 Die Integer Java Virtual Machine und der Stack Wir entwickeln jetzt ein Mikroprogramm, das die Integer Java Virtual Machine (IJVM) implementiert. Dazu wird auch eine Stack-Verwaltung in Hardware benötigt. 4. Mikroprogrammierung 4a - 26

Der Stack Der Stack ist ein Bereich im Hauptspeicher. Er wächst von unten nach oben. Man kann ein 32-Bit Wort oben auf den Stack legen, ein 32-Bit Wort von oben vom Stack herunternehmen. Das Register SP (Stack Pointer) zeigt auf das oberste Wort des Stacks. Beispiel: SP = 2: verweist auf das zweite Wort im Hauptspeicher. Dieses Wort enthält die Bytes 8, 9, 10 und 11. Das Register TOS (Top of Stack) soll immer den Wert des obersten Wortes auf dem Stack enthalten: Dies macht den Speicherzugriff effizienter. Aber: Es muss im Mikroprogramm explizit verwaltet werden. SP Operand 2 Operand 1... TOS = Operand 2 4. Mikroprogrammierung 4a - 27

( PC ) Der Program Counter Der PC ist ein besonderes Register. Der PC addressiert Bytes (nicht Worte). Er verweist auf die aktuelle Stelle im zu interpretierenden IJVM- Programm. Bei der Ausführung wird das nächste Byte des IJVM-Programms geholt: PC um eins erhöhen Fetch-Signal anlegen einen Zyklus warten dann steht des nächste Byte in MBR. PC... 0x60 0x64... 4. Mikroprogrammierung 4a - 28

Zur Orientierung Wir bauen eine JVM die Java-Bytecode ausführen (interpretieren) kann mit signifikanten Einschränkungen, daher IJVM Java-Programm compilieren Java Bytecode Üblicherweise ist die JVM ein gewöhnliches Programm. Wir wollen aber jetzt die JVM hardwarenah als Mikroprogramm realisieren. In unserem Fall: Java Bytecode = Maschinenbefehl (ISA Instruktion) (entspricht Assembler) Lernziel: Analog zur Interpretation von Java-Bytecode erfolgt auch die Interpretation von Assembler-Instruktionen. 4. Mikroprogrammierung 4a - 29

Beispiel für einen Integer-Befehl: iadd Die Funktionsweise des Befehls iadd Vorher: SP Operand 2 Operand 1... PC... 0x60 0x64 TOS = Operand 2... Nachher: SP Summe... PC... 0x60 0x64 TOS = Summe... 4. Mikroprogrammierung 4a - 30

Mikroprogramm für iadd 0x100: 0x101 000 00110101 000000100 001 0001 PC=PC+1;fetch;goto 0x101 (! warten ) 0x101: 0x102 000 00000000 000000000 000 0000 goto 0x102 0x102: 0x000 100 00000000 000000000 000 0000 goto MBR 0x060: 0x061 000 00110110 000001001 010 0100 MAR=SP=SP-1;rd;goto 0x061 0x061: 0x062 000 00010100 100000000 000 0111 H=TOS;goto 0x062 0x062: 0x100 000 00111100 001000010 100 0000 MDR=TOS=MDR+H;wr;goto 0x100 4. Mikroprogrammierung 4a - 31

Stackbehandlung Der Stack dient zur Speicherung von Operanden und Ergebnis lokalen Variablen einer Methode/Funktion. Frage: Warum haben lokale Variablen nicht einfach eine feste Speicheradresse? Antwort: weil eine Methode rekursiv aufgerufen werden kann. Das Register LV enthält immer die Adresse des Wortes, bei dem die lokalen Variablen für die aktuelle Methode beginnen. 4. Mikroprogrammierung 4a - 32

IJVM-Speichermodell Current Local Variable Frame und Current Operand Stack sind bekannt. Der Constant Pool enthält unter anderem Konstanten und Information zu Methoden. Die Method Area enthält das eigentliche IJVM Programm in Form von IJVM-Instruktionen. 4. Mikroprogrammierung 4a - 33

( ISA-Instruktionen ) IJVM-Instruktionssatz 4. Mikroprogrammierung 4a - 34

IJVM -Instruktionen: invokevirtual und ireturn invokevirtual und ireturn: erlauben den Aufruf von Methoden hier vereinfacht dargestellt: man darf nur Funktionen für ein Objekt aufrufen. keine Objektorientierung mehr Prinzipieller Ablauf: speichere Adresse des Objektes auf dem Stack, für das die Methode aufgerufen wird ( Vereinfachung (überflüssig, da speichere Parameter des Funktionsaufrufes auf dem Stack rufe invokevirtual auf invokevirtual hat einen 2 Byte langen Parameter Dieser beschreibt einen Eintrag im Constant Pool. Der Eintrag enthält die Adresse. an der die IJVM Instruktionen für die Methode liegen. 4. Mikroprogrammierung 4a - 35

Auffinden der Methode aufgerufene Methode Adresse disp disp2 disp1 invokevirtual 4. Mikroprogrammierung 4a - 36

Zusätzliche Daten An der Stelle, die durch die Adresse im CPP beschrieben wird, steht folgendes: zwei Bytes, die die Anzahl der übergebenen Parameter enthalten zwei Bytes, die den Speicherplatz für lokalen Variablen für diese Funktion enthalten als 5. Byte die erste Instruktion der aufgerufenen Funktion. 4. Mikroprogrammierung 4a - 37

Stack bei invokevirtual 4. Mikroprogrammierung 4a - 38

Stack bei ireturn 4. Mikroprogrammierung 4a - 39

Compilieren: Java nach IJVM i i 4. Mikroprogrammierung 4a - 40

4.4 Die Mikroprogrammiersprache MAL Prinzipiell: Inhalt des control stores aufschreiben 512 Mikroinstruktionen, je 36 Bit Problem: sehr unübersichtlich und fehleranfällig man muss sich genau überlegen, an welche Stelle welche Mikroinstruktion geschrieben wird: 0x99 erste Instruktion von IFEQU 0x9B erste Instruktion von IFLT -> kein lineares Ablegen von Instruktionen Außerdem: die Zweige von bedingten Anweisungen unterscheiden sich nur im 9. Bit, müssen also genau 256 Speicherpätze auseinander liegen Lösung: Einführen einer symbolischen Micro Assembly Language textuelle Beschreibung von Mikroinstruktionen, wird compiliert, Adressen werden dabei automatisch vergeben. 4. Mikroprogrammierung 4a - 41

MAL (1) Jede Zeile entspricht einer Mikroinstruktion. ALU-Operationen und Registerzugriff: Beispiel: SP = MDR = SP+1 Illegal: MDR = SP+MDR Illegal: H = H-MDR Speicheroperationen: rd und wr zum Schreiben von MDR fetch zum Lesen in MBR Illegal: erste Instruktion: MAR=SP;rd zweite Instruktion: MDR=H 4. Mikroprogrammierung 4a - 42

MAL (2) Direkte Bestimmung des nachfolgenden Befehls: entweder explizit mit goto <Marke> Zum Beispiel: goto Main1 Jede MAL-Zeile hat eine Marke. oder implizit, dann weglassen von goto Beispiel: iadd1 iadd2 iadd3 MAR=SP=SP-1;rd H=TOS MDR=TOS=MDR+H;wr;goto Main1 4. Mikroprogrammierung 4a - 43

MAL (3) Verzweigung aufgrund der Z- und N-Flags der ALU Beispiel: if(z) goto L1; else goto L2 Überprüfen von Registerinhalten auf Z/N: Beispiel: Z = TOS TOS wird auf B gelegt ALU erzeugt B als Ausgabe kein Register wird geschrieben 4. Mikroprogrammierung 4a - 44

MAL (4) Springen durch JMPC: ( value goto (MBR or ( MBR ) Oder, falls value=0, goto In der Mikroinstruktion steht value in NEXT_ADDRESS. 4. Mikroprogrammierung 4a - 45

Der Interpreter Auszug: Es folgen einige Beispiele. 4. Mikroprogrammierung 4a - 46

Main Voraussetzung: PC zeigt auf die als nächstes auszuführende IJVM-Instruktion. Diese ist bereits ins MBR geladen. Ausführen: PC um 1 erhöhen Fetch-Signal anlegen (am Ende des nächsten Zyklus steht die nächste IJVM- ( MBR Instruktion im zur Mikroinstruktion springen, mit der die Ausführung der aktuellen IJVM-Instruktion beginnt 4. Mikroprogrammierung 4a - 47

iadd Voraussetzung: TOS beinhaltet oberstes Wort auf Stack (= Operand 2) Ausführen: ( 1 SP um 1 dekrementieren (zeigt jetzt auf Operand Read-Signal anlegen Operand 2 in H laden summieren, Ergebnis schreiben: auf die aktuelle Position im Stack in TOS nach Main1 springen 4. Mikroprogrammierung 4a - 48

pop und iload<varnum> Achtung! Der Befehl iload <varnum> besteht aus 2 Bytes: 0x15 für iload ( LV <varnum> beschreibt den Offset der zu ladenden Variablen (relativ zu 4. Mikroprogrammierung 4a - 49

wide und wide_iload (1) Was machen wir, wenn eine lokale Variable mehr als 256 Wörter von LV entfernt ist? wide als IJVM-Instruktion davor schreiben: Wide soll auch für andere Operationen (z.b. istore) funktionieren. 4. Mikroprogrammierung 4a - 50

wide und wide_iload (2) 4. Mikroprogrammierung 4a - 51

goto <offset> Sprünge erfolgen relativ zum aktuellen PC. OPC dient zum Speichern des PC. Das erste Byte des Offset wird vorzeichenbehaftet auf den B-Bus gelegt (mit sign extension): Das oberste Bit des Inhalts von MBR wird in allen 24 Bits wiederholt, die ergänzt werden, um zu einem 32-Bit-Wort zu kommen. Das zweite Byte wird ohne Berücksichtigung des Vorzeichens auf den B-Bus gelegt (ohne sign extension): Die obersten 24 Bits sind auf 0 gesetzt. Daher sind Sprünge in beide Richtungen möglich. 4. Mikroprogrammierung 4a - 52

Beispiel für Sign Extension Problem: Gegeben sei eine ganze Zahl, kodiert in 8 Bit. Wie konvertiert man diese in die gleiche Zahl bei Darstellung mit 32 Bit? Beispiel: -6 = 11111010 naive Lösung: 00000000000000000000000011111010 (=128+64+32+16+8+2) Lösung: Sign extension: wiederhole das oberste Bit in allen Stellen die man hinzufügt: 11111111111111111111111111111010 (=-6) Nur,wenn die umzuwandelnde Zahl im 2er Komplement dargestellt ist: bei natürlichen Zahlen (>0) einfach Nullen davor schreiben. 4. Mikroprogrammierung 4a - 53

Bedingter Sprung: if_icmpeq1 <offset> Bedeutung: hole die obersten beiden Worte vom Stack wenn gleich, dann springe um Offset 4. Mikroprogrammierung 4a - 54

invokevirtual <disp> 4. Mikroprogrammierung 4a - 55

ireturn 4. Mikroprogrammierung 4a - 56