Technische Informatik II Rechnerarchitektur

Ähnliche Dokumente
Technische Informatik II Rechnerarchitektur

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

Computersysteme. Stacks Anwendung in der Assembler-Programmierung

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

MMIX Crashkurs Teil 3 Unterprogramme und Parameterübergabe. Freiling/Wienzek/Mink Vorlesung Rechnerstrukturen RWTH Aachen Sommersemester 2005

Unterprogramme. Unterprogramme

Vorlesung Rechnerarchitektur

TI II. Sommersemester 2009 Prof. Dr. Mesut Güneş 7. Aufgabenblatt mit Lösungen

Technische Informatik I Übung 3: Assembler

Technische Informatik I - HS 18

Grundlagen zur Assemblerprogrammierung unter SPIM im Sommersemester Lorenz Schauer Mobile & Verteilte Systeme

Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015

Adressierungsarten des 6809 (Forts.)

Mikrocomputertechnik. Unterprogramm

Zusammenfassung der Assemblerbefehle des 8051

Assembler Unterprogramme

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

Stack, Stackpointer, Unterprogramm HP: 0 * 1 * 2 * 3 CAL UP1 4 * 5 * 6 CAL UP2 7 *... UP1: 30 * 33 RET UP2: 40 * 41 CAL UP1 42 * 43 RET

Elementare Konzepte von

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

Grundbegriffe der Informatik

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

WS2018/ Oktober 2018

Schritt Aktion Erläuterung 1 UBRR auf 25 setzen Baudrate auf 9600 TXEN-Bit von UCSRB auf 1 setzen

Informatik Rechnerinterne Vorgänge: Programmstrukt. (Lsg.) Gierhardt

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

Selbststudium Informationssysteme - H1102 Christian Bontekoe & Felix Rohrer

3. Aufgabenblatt mit Lösungen

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

FAKULTÄT FÜR INFORMATIK

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

LOC Data_Segment

Algorithmen & Programmierung. Rekursive Funktionen (1)

Unterstützung von Jump Tables

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

1 pulsierender Speicher

WS2017/ Oktober 2017

Vorlesung IT-Systeme I

Lösungsvorschlag Serie 2 Rekursion

= 7 (In Binärdarstellung: = 0111; Unterlauf) = -8 (In Binärdarstellung: = 1000; Überlauf)

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

Betriebssysteme Teil 3: Laufzeitsystem für Programme

Erste Java-Programme (Scopes und Rekursion)

Heute nur MIPS-Praxis (4 Aufgaben)

Vorkurs Informatik WiSe 17/18

EWS, WS 2016/17 Pfahler I-1

Vorsemesterkurs Informatik Übungsaufgaben. Tag 4a - Python

4. TÜ-Zusammenfassung zum Modul Computersysteme

Unterprogramme mittels Stack (Forts.)

Rechnerstrukturen Sommersemester 2003

Rekursive Funktionen (1)

Speicher und Adressraum

Rekursive Funktionen (1)

Funktionen in JavaScript

Exploit-Entwicklung mit Python

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

Programmieren 1 C Überblick

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

Assembler - Adressierungsarten

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 3

6 Speicherorganisation

Tutorium Rechnerorganisation

4. Mikroprogrammierung (Firmware)

Funktionen in JavaScript

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

Übung 1 - Betriebssysteme I

U23 Assembler Workshop

1.4 Die Ackermannfunktion

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht

Kontrollstrukturen -- Schleifen und Wiederholungen

Datenstrukturen, Alignment Stack Prozeduraufruf, Parameterübergabe und -rückgabe (Calling Conventions) Leaf procedures

2. Programmierung in C

Vorkurs Informatik WiSe 16/17

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Java Referenzdatentypen genauer betrachtet

11. Unterprogrammtechnik

Transkript:

Technische Informatik II Rechnerarchitektur 3.Unterprogramme in MMIX Matthias Dräger E-Mail: www: mdraeger@mi.fu-berlin.de www.matthias-draeger.info/lehre/sose2010ti2/ tinyurl.com/sose2010ti2 Zuletzt bearbeitet: 19.05.2010 1

Vorteile von Unterprogrammen Strukturierung des Programms komplexe Programme werden in verständliche Teilprogramme untergliedert Wiederverwendung Unterprogramme zur Lösung eines Problems können leicht in andere Programme integriert werden Verteilte Entwicklung im Team Unterprogramme können unabhängig voneinander entwickelt werden Separate Übersetzung (z.b. in Java) Programmteile werden separat übersetzt und später gebunden, d.h., bei einer kleinen Änderung muss nicht immer das komplette Programm übersetzt werden Verwendung von Programmbibliotheken (z.b. in C, Python) Bibliotheken sind Sammlungen von Unterprogrammen zu einen bestimmten Anwendungsgebiet 2

Bedingungen von Unterprogrammen Ein Unterprogramm sollte: nur eine Aufgabe lösen einen Mittelweg zwischen Einfachheit und Allgemeinheit darstellen Daten als Parameter erhalten globale Variablen unverändert lassen das Ergebnis als Rückgabewert zurückliefern 3

Überblick: Unterprogramme in MMIX beim Aufruf eines Unterprogramms steht die Rücksprungadresse* im Spezialregister rj einem Unterprogramm können mehrere Parameter übergeben werden es können mehrere Ergebnisse zurückgeliefert werden (Besonderheit!) bei Rekursion oder ineinander verschachtelten Aufrufen, muss man die Rücksprungadresse zwischenspeichern * ist die Adresse des Folgebefehls nach dem Unterprogrammaufruf 4

Unterprogramme mit dem Befehl GO Name: Spez.: GO (Get Address) GO $X,Marke GO $X,$Y,$Z Beschreibung: Es wird die Adresse des nachfolgenden Befehls (Rücksprungadresse) in Register $X gespeichert. Anschließend wird zur Stelle Marke bzw. zur Adresse $Y+$Z gesprungen. Es wird absolut adressiert. % unterprogramm_go.mms LOC Data_Segment GREG @ % wird für LDA benötigt String BYTE "Willkommen im Unterprogramm :)",0 LOC #100 GREG @ % wird für GO benötigt % Unterprogramm anlegen ausgabe LDA $255,String % Adresse von String ins globale Register laden TRAP 0,Fputs,StdOut % Srting ausgeben GO $0,$0,0 % Rücksprung zum Hauptprogramm % in $0 steht die Rücksprungadresse % Hauptprogramm Main GO $0,ausgabe % Rücksprungadresse wird in $0 gespeichert und nach ausgabe springen TRAP 0,Halt,0 5

Nachteile von GO Parameter lassen sich nicht übergeben Register im Unterprogramm werden auch im aufzurufenden Programm überschrieben Rekursion ist dadurch nicht möglich Lösung 1: Stack implemetieren und mithilfe eines Stackpointers verwalten sehr kompliziert und aufwändig! Lösung 2: die Befehle PUSHJ (push & jump) und POP verwalten den Stack automatisch 6

Die Befehle PUSHJ, PUSHGO und POP Name: PUSHJ (Push & Jump) Name: POP Spez.: PUSHJ $X,Marke Spez.: POP X,Y Beschreibung: Die Register $0 bis $X werden auf dem Registerstack gesichert. Die Register ab $X (also $X+1, $X+2, ) stellen die Parameter dar und werden umnummeriert, beginnend bei $0, $1, Register $X wird von MMIX intern benutzt und enthält die Anzahl der gesicherten Register. Die Rücksprungadresse wird im Spezialregister rj gespeichert und es wird zur Marke gesprungen. Name: Spez.: Beschreibung: siehe PUSHJ und GO PUSHGO (Push & Go) PUSHGO $X,$Y,$Z Beschreibung: Der Befehl POP macht die von der PUSHJ ausgeführten Aktionen rückgängig. Die Zahl X gibt an, wie viele Rückgabewerte (also Ergebnisse) es gibt, d.h. sie muss im Bereich 0 bis 255 liegen. Die Rückgabewerte müssen dabei in den Registern $0 bis $X-1 stehen. Anschließend wird die Umnummerierung von PUSHJ rückgängig gemacht. Die Ergebnisse aus dem Unterprogramm ($0 bis $X-1) stehen nun an der Stelle $X (von PUSHJ $X,Marke). Es folgt ein Rücksprung an die Adresse, die im Spezialregister rj hinterlegt wurde. Ist der Parameter Y von POP größer als 0, so folgt der Rücksprung an die Adresse: 7

Beispiel 1: PUSHJ und POP Ziel: Wir wollen das Unterprogramm YZ aufrufen und dessen Ergebnis soll danach in Register $2 stehen. % bsp1-pushj.mms LOC #100 % Unterprogramm anlegen YZ SET $3,70 ADD $0,$0,60 % erhöhe $0 um 60 POP 1,0 % liefere $0 als Ergebnis zurück % Hauptprogramm Main SET $0,10 % Register mit Beispielwerten füllen SET $1,20 SET $2,30 SET $3,40 SET $4,50 SET $5,60 PUSHJ $2,YZ % Zum Unterprogramm YZ springen SET $0,$2 % Welcher Wert steht nun in $0? TRAP 0,Halt,0 8

Schematische Darstellung zu Beispiel 1 Hauptprogramm Sichere ab Register $2 und springe zum Unterprogramm an der Marke YZ. Unterprogramm wird ausgeführt. PUSHJ $2,YZ Es gibt einen Rückgabewert ($0). POP 1,0 9

Beispiel 2: PUSHJ und POP Ziel: Wir wollen das Unterprogramm YZ aufrufen und es sollen vier Ergebnisse zurück geliefert werden. % bsp2-pushj.mms LOC #100 % Unterprogramm anlegen YZ SET $3,70 ADD $0,$0,60 % erhöhe $0 um 60 POP 4,0 % liefere 4 Ergebnisse zurück ($0 - $3) % das Hauptergebnis ist also $3 % Hauptprogramm Main SET $0,10 % Register mit Beispielwerten füllen SET $1,20 SET $2,30 SET $3,40 SET $4,50 SET $5,60 PUSHJ $2,YZ % Zum Unterprogramm YZ springen % Das Hauptergebnis steht in $2. SET $0,$2 % Welcher Wert steht nun in $0? TRAP 0,Halt,0 10

Schematische Darstellung zu Beispiel 2 Hauptprogramm Sichere ab Register $2 und springe zum Unterprogramm an der Marke YZ. Unterprogramm wird ausgeführt. PUSHJ $2,YZ Es gibt vier Rückgabewerte (von $0 bis $3) POP 4,0 Hinweis: $3 im Unterprogramm gilt als Hauptergebnis und steht deshalb im Hauptprogramm in $2. 11

Wiederholung: Organisation des Hauptspeichers Wo werden die Daten von Registern bei Unterprogrammausrufen in MMIX zwischengespeichert/ausgelagert? Segment Symbol Startadresse Zweck Textsegment #0 bis #FF Interruptroutinen Textsegment #100 Programm und statische Daten Datensegment Data_Segment #2000 0000 0000 0000 Poolsegment Pool_Segment #4000 0000 0000 0000 Stacksegment Stack_Segment #6000 0000 0000 0000 veränderliche Daten (z.b. Arrays, Texte, ) Kommunikation zwischen Programm und Betriebssystem Auslagerung der Inhalte von Registern bei Unterprogrammaufrufen 12

Beispiele mit PUSHJ und POP 13

Wiederholung: Summenberechnung In dem folgenden Beispiel wird die Summe berechnet: % sum-while.mms % Es wird die Summe von 1..n berechnet. LOC #100 n IS $0 i IS $1 % Laufvariable res IS $2 % Ergebnis speichern tmp IS $3 % speichert Ergebnis von CMP Main SET n,6 % setze n auf Endwert 6 SET i,1 % initialisiere Zählvariable SET res,0 % Ergebnis mit 0 initialisieren loop ADD res,res,i % rechne: res = res + i ADD i,i,1 % erhöhe i um 1 CMP tmp,i,n % vergleiche i mit n % wenn i > n, dann hat tmp den Wert 1 % Hinweis: tmp kann wegen CMP nur den Wert -1,0 oder 1 haben % prüfen, ob tmp nicht positiv ist -> zum Schleifenanfang springen BNP tmp,loop TRAP 0,Halt,0 % beende Programm 14

Summenberechnung im Unterprogramm Ziel: Berechnung der Summe von 1 bis n im Unterprogramm. % sum-pushj-while.mms LOC #100 % % Dieses Unterprogramm berechnet die Summe der Zahlen 1..sum_n % sum_n IS $0 i IS $1 % Laufvariable res IS $2 % Ergebnis speichern tmp IS $3 % speichert Ergebnis von CMP sum SET i,1 % initialisiere Zählvariable SET res,0 % Ergebnis mit 0 initialisieren loop ADD res,res,i % rechne: res = res + i ADD i,i,1 % erhöhe i um 1 CMP tmp,i,sum_n % vergleiche i mit sum_n BNP tmp,loop % springe solange zu loop, wie i <= sum_n SET $0,res % speichere das Ergebnis in $0 POP 1,0 % gib Wert von $0 zurück % Das Hauptprogramm n IS $1 Main SET n,6 % setze n auf Endwert 6 PUSHJ $0,sum % springe zum Unterprogramm sum und übergebe $1 % hier könnte noch eine Ausgabe von $0 folgen... TRAP 0,Halt,0 % beende Programm 15

Rekursive Summenberechnung im Unterprogramm Ziel: Rekursive Berechnung der Summe von 1 bis n im Unterprogramm. % sum-pushj-rek.mms LOC #100 % % Dieses Unterprogramm berechnet rekursiv die Summe der Zahlen 1..sum_n % sum_n IS $0 % Laufvariable n wird mit jedem Rekursionsschritt verringert adr_rj IS $1 % zum Zwischenspeichern der Rücksprungadresse res IS $2 % Ergebnis vom Rekursionsschritt tmp IS $3 % speichert Ergebnis von CMP sum SUB tmp,sum_n,1 % (n-1) für den nächsten Rekursionsschritt vorbereiten BNP tmp,sum_end % falls tmp < 1, beende Rekursion GET adr_rj,rj % Adresse der Rücksprungadresse sichern (WICHTIG!!) PUSHJ res,sum % Unterprogramm sum rekursiv aufrufen ADD sum_n,sum_n,res % ergebnis = n + res PUT rj,adr_rj % Rücksprungadresse zurückspeichern sum_end POP 1,0 % Wert von $0 zurückliefern % Das Hauptprogramm n IS $1 Main SET n,6 % setze n auf Endwert 6 PUSHJ $0,sum % springe zum Unterprogramm sum und übergebe $1 % hier könnte noch eine Ausgabe von $0 folgen... TRAP 0,Halt,0 % beende Programm 16

Zusammenfassung Was sind Unterprogramme? Vorteile von Unterprogrammen Unterprogramme in MMIX mittels GO mit den Befehlen PUSHJ und POP rekursive Programmierung 17