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

Ähnliche Dokumente
Übungsblatt 10 (Block C 2) (16 Punkte)

Übungsblatt 5 (Block B - 1) (17 Punkte)

Technische Informatik I - HS 18

Lösungsvorschlag zur 3. Übung

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

Vorlesung Rechnerarchitektur

Technische Informatik I Übung 3: Assembler

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

Unterprogramme. Unterprogramme

Adressierungsarten des 6809 (Forts.)

Institut für Informatik Prof. Dr. D. Hogrefe Dipl.-Inf. R. Soltwisch, Dipl.-Inform. M. Ebner, Prof. Dr. D. Hogrefe Informatik II - SS 04.

Karlsruher Institut für Technologie

Computersysteme. Stacks Anwendung in der Assembler-Programmierung

Unterstützung von Jump Tables

Assembler Programmierung Motivation. Informatik II SS 2004 Teil 4: Assembler Programmierung. Assembler vs. Maschinensprache

10. Die Adressierungsarten des MSP 430

Selbststudium Informationssysteme - H1102 Christian Bontekoe & Felix Rohrer

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

Grundbegriffe der Informatik

Arithmetik, Register und Speicherzugriff. Grundlagen der Rechnerarchitektur Assembler 9

Rechnerstrukturen Wintersemester 2002/03. Maschinensprache Opcode, Operanden, Adressierung Für Menschen schwer verdauliche Folgen von 0 und 1

9. Die Adressierungsarten des MSP 430

Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7)

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

######################### Zeichenkette auswerten ###################################

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

Daniel Betz Wintersemester 2011/12

Praktikum Technische Informatik

"Organisation und Technologie von Rechensystemen 4"

Übung zur Vorlesung EidP (WS 2018/19) Blatt 4

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

Programmiersprachen Einführung in C

Grundlagen der Rechnerarchitektur. MIPS Assembler

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

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

Einführung. Saalübung Informatik II SS Einführung. Einführung

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

Mikrocomputertechnik. Unterprogramm

DieÜbersetzung funktionaler Programmiersprachen

Grundlagen der Informatik III Wintersemester 2010/ Vorlesung Dr.-Ing. Wolfgang Heenes

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht

1 pulsierender Speicher

Assembler am Beispiel der MIPS Architektur

Übung Praktische Informatik II

11. Unterprogrammtechnik

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

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

Rechnern netze und Organisatio on

Assembler Unterprogramme

Heute nur MIPS-Praxis (4 Aufgaben)

Organisatorisches. PDV und Robotik Fakultät 4 TUB 1 INFO4 Übung Assembler 1

Assembler - Adressierungsarten

Felder, Zeiger und Adreßrechnung

Rechnergrundlagen SS Vorlesung

Technische Informatik - Eine Einführung

Tutorium Rechnerorganisation

Technische Informatik II Rechnerarchitektur

5.GTypische Anwendungsfälle

Maschinencode Dateiformat und Stackframes

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

Funktionen in JavaScript

Betriebssysteme Teil 3: Laufzeitsystem für Programme

PC/XT/AT ASSEMBLER-BUCH

32 Bit Konstanten und Adressierung. Grundlagen der Rechnerarchitektur Assembler 78

Technische Informatik II Rechnerarchitektur

Computer-Systeme Teil 11: Routinen

U23 Assembler Workshop

Teil 1: Prozessorstrukturen

U23 Assembler Workshop

Technische Informatik I - HS 18

Funktionen in JavaScript

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

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

Der Toy Rechner Ein einfacher Mikrorechner

Rechnernetze und Organisation

H S R R a p p e r s w i l \0

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

Klausur Kompaktkurs Einführung in die Programmierung Dr. T. Weinzierl & M. Sedlacek 25. März 2011

Informatik II Übung 05. Benjamin Hepp 3 April 2017

3. Sprachkonzepte und ihre Übersetzungen

Der Intel 8086 Reto Gurtner 2005

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

Beispielhafte Prüfungsaufgaben zur Vorlesung TI I, gestellt im Frühjahr 2009

GI Vektoren

Grundlagen der Informationsverarbeitung:

Programmieren. Aufgabe 1 (Eine erste Datenstruktur)

Grundlagen der Informatik III Wintersemester 2010/ Vorlesung Dr.-Ing. Wolfgang Heenes

Probeklausur Name: (c)

Einführung in die Programmierung WS 2009/10. Übungsblatt 5: Typen, Variablen und einfache Methoden in Java

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

Vorlesung Programmieren

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

Mikrocontroller-Programmierung

Assembler DOS (Beta 1) Copyright 2000 Thomas Peschko. Assembler II - DOS. ASSEMBLER Arbeiten mit Dateien und Daten.

Grundlagen der Rechnerarchitektur. Einführung

Rechnergrundlagen SS Vorlesung

Von Assembler zu Java

Klausur zur Vorlesung Grundlagen der Rechnerarchitektur SS 2013

Transkript:

georg.von-der-brueggen [ ] tu-dortmund.de ulrich.gabor [ ] tu-dortmund.de pascal.libuschewski [ ] tu-dortmund.de Übung zur Vorlesung Rechnerstrukturen Wintersemester 2016 Übungsblatt 10 (Block C 2) (16 Punkte) Abgabe bis spätestens Mittwoch, 18. Januar 2017, 16:00 Uhr. Besprechung ab Montag, 23. Januar 2017. Um die Aufgaben zu lösen, sollten Sie den in der Vorlesung vorgestellten MARS Simulator installieren und mit ihm arbeiten. Sie finden die Software unter: http://courses.missouristate.edu/kenvollmar/mars/index.htm Installieren Sie den Simulator auf Ihrem Rechner. 10.1 Adressierungsarten (2 Punkte) Gegeben sei eine abstrakte Maschine und folgender Auszug aus der Speicherbelegung einiger Register und Speicherzellen. Register Wert Register 1 12 Register 2 36 Register 3-12 Register 4 68 Speicherzelle Wert Speicherzelle 12 6 Speicherzelle 24 96 Speicherzelle 36 24 Speicherzelle 48 36 Speicherzelle 68 42 Speicherzelle 96-5 Geben Sie jeweils an, welcher Wert durch folgende Adressierungsbefehle geladen wird. Die Adressierungsart ist jeweils vorgegeben und die Parameter (Konstanten / Adressen bzw. Register) sind in Klammern angegeben. Geben Sie den dazugehörigen MIPS-Befehl an. Das Ergebnis soll jeweils im Register $t0 stehen. Die Register 1 bis 4 und die Speicherzellen 12 bis 96 seien schon entsprechend vorbelegt. a. Unmittelbare Adressierung (36) b. Direkte Adressierung (24) c. Registeradressierung (Register 4) d. Register-indirekte Adressierung (Register 1) 1 / 6

10.2 Stackprogrammierung (6 Punkte) In dieser Aufgabe sollen Sie die Realisierung von Hochsprachen-Funktionen in Assembler betrachten und dabei den Stackaufbau und die Parameterübergabe üben 1. Damit Funktionen unabhängig voneinander übersetzt werden können, gibt es Standards zum Umgang mit Registern und dem Stack. Nutzen Sie für diese Aufgabe die MIPS-Aufrufkonvention. Die Register sind nach dieser Konvention wie folgt bezeichnet: Register-Nummer Register-Name Funktion Sicherung $0 $zero Ist immer 0 Undefiniert $1 $at Reserviert für Assembler Undefiniert $2 $3 $v0 $v1 Rückgabewerte von Funktionen Undefiniert $4 $7 $a0 $a3 Die ersten 4 Parameter für Funktionen Undefiniert $8 $15, $24 $25 $t0 $t9 Temporaries (Lokale Puffer-Register) Caller-Saved $16 $23 $s0 $s7 Saved (Persistente Puffer-Register) Callee-Saved $26 $27 $k0 $k1 Kernel, reserviert für Betriebssystem Undefiniert $28 $gp Global Pointer (Adresse des.data-bereichs) Undefiniert $29 $sp Stack Pointer (Adresse des obersten Stack-Elements) Undefiniert $30 $fp Frame Pointer (Basis des aktuellen Stackframes) Undefiniert $31 $ra Return Address (Rücksprungadresse) Undefiniert Tabelle 1: MIPS-Registerkonvention Für diese Aufgabe benötigen Sie nur die Register aus den grau markierten Zeilen der Register-Konvention. Die Register $t0 $t9 sind Caller-Saved, werden also vom Aufrufer gesichert und können innerhalb der Funktion ohne Rücksicht verwendet werden. Die Register $s0 $s7 sind Callee-Saved, sie müssen deshalb von der Funktion auf dem Stack gesichert und zum Ende der Funktion wieder auf ihren ursprünglichen Wert gesetzt werden, sofern sie benutzt werden. Alle anderen Register sind für besondere Verwendungen reserviert (siehe Spalte Funktion ). Rückgabewerte von Funktionen werden über $v0 $v1 an den Aufrufer zurückgegeben. Die ersten 4 Parameter einer Funktion werden in den Registern $a0 $a3 übergeben, alle weiteren Parameter werden über den Stack übergeben. Es ist also nötig, dass eine Funktion weiß, wie viele Parameter sie erwartet, damit sie weiß, wie viele Argumente noch auf dem Stack liegen. Das Register $sp zeigt immer auf das oberste Element des Stacks. Immer wenn etwas auf den Stack gelegt oder davon genommen wird, muss dieses Register explizit angepasst werden (+/ Byte-Größe der entfernten/hinzugelegten Elemente). Der Stack wächst in Richtung der absteigenden Adressen, d. h. wenn Sie Elemente hinzufügen, müssen Sie den Stackpointer dekrementieren. Der Stack-Abschnitt (Stack-Frame) einer Funktion F folgt diesem Aufbau (Adressen von oben nach unten absteigend): Stack- Wachstumsrichtung Parameter von F Callee-Saved Register (falls lokal überschrieben) Lokale Variablen von F Caller-Saved Register (bei Unteraufrufen innerhalb von F) Stackpointer beim Eintritt in F Nach Abschluss einer Funktion muss das Stackframe komplett abgebaut (vom Stack genommen worden) sein, inklusive der eigenen Parameter. 1 siehe auch Skript, S. 19 25: http://ls12-www.cs.tu-dortmund.de/daes/media/documents/teaching/courses/ws1314/rs/ script/rs2.pdf 2 / 6

Das zu erweiternde Programm dieser Aufgabe (s. u.) soll ergebnis = zahl1 f 1(zahl1, zahl2, zahl3, zahl4, f 2(zahl5)) berechnen und das Ergebnis in ergebnis speichern. Benutzen Sie, um das Programm lesbarer zu machen, in dieser Aufgabe nur die Register-Namen in Ihrem Code (s. o.), nicht die Register-Nummern. Ändern Sie nichts am vorgegebenen Code. Der Code für f2 ist vorgegeben: f2: li $t0, 5 # Lade Konstante 5. add $v0, $a0, $t0 # Addiere Konstante auf Parameter. # Speicher in Rückgaberegister. jr $ra # Rücksprung an Adresse $ra. a. Schreiben Sie nun die Funktion f1. Sie soll die Summe ihrer Eingabewerte berechnen und zurückgeben. # Beachten Sie, dass ein Parameter im Stack übergeben wurde. # Sie dürfen nur die $t-register und das Rückgaberegister $v0 verwenden. f1: jr $ra 3 / 6

b. Vervollständigen Sie das Programm, so dass die Funktionsaufrufe von f1 und f2 korrekt gemäß der oben beschriebenen Aufrufkonvention abgewickelt wird. Dabei können Sie über den Inhalt bzw. das Verhalten der Funktionen keine Annahme machen, außer, dass sie ebenfalls der MIPS-Aufrufkonvention genügt. Weiterhin wissen Sie, dass f1 fünf 4-Byte-Integer als Parameter erwartet und einen 4-Byte-Integer zurück gibt und dass f2 einen Parameter erwartet und einen 4-Byte-Integer zurück gibt..text.globl main main: $t0, zahl1 $t1, zahl2 $t2, zahl3 $t3, zahl4 jal f1 li $v0, 10 syscall c. Testen Sie Ihr Programm mit dem MIPS-Simulator. 4 / 6

10.3 Assemblerprogrammierung (4 Punkte) Mit dem folgenden Assemblerprogramm soll die Quersumme QS einer Dezimalzahl (wert) berechnet und unter quer im Speicher abgelegt werden. Ergänzen Sie die fehlenden Operationen gemäß den Kommentaren..data wert:.word 1495 # Eingabewert. quer:.word 0 # Ergebnis der Quersumme QS..text.globl main main: # lade den Eingabewert in Register $2. loop: ende: li $2,10 syscall # Reg [4] für die QS initalisieren. # wenn Reg[2] = 0 -> ende. # in Reg[3] steht eine 10 (dezimal). # wert / 10 und den Teil hinter dem # Komma in Reg [3] laden # und in Reg [4] aufaddieren. # Restzahl vor dem Komma in Reg [2] laden. # bei loop weiterrechnen. # Ergebnis in quer ablegen. # Programmende. 5 / 6

10.4 Belegungsverfahren (4 Punkte) a. Die Zeichenkette Pause sei in 8-Bit-ASCII in einem Speicher ab der Adresse F8F8 abgelegt. Die Zeichen wurden dabei wortweise, d. h. in 32-Bit-Blöcken, mit dem Belegungsverfahren little endian vom Prozessor in den Speicher geschrieben. Welches Zeichen enthält das Byte mit der Adresse F8FB? b. Wie wird auf das Speicherbelegungsverfahren big endian hardwaremäßig umgeschaltet? Hinweise: Die Abgaben sollen bis Mittwoch, 18. Januar 2017, 16:00 Uhr in die Briefkästen in der Otto-Hahn-Straße 12 eingeworfen werden. Die Briefkästen finden Sie in der ersten Etage der Otto-Hahn-Straße 12 am Übergang zum Erdgeschoss der Otto-Hahn- Straße 14. Die Briefkästen sind mit dem Namen der Veranstaltung, der Gruppennummer sowie Zeit und Ort der Übung gekennzeichnet. Für Rechnerstrukturen sind dies die Briefkästen mit den Nummern 28 bis 40. Schreiben Sie unbedingt Ihren Namen, Ihre Matrikelnummer und Ihre Gruppennummer rechts oben auf Ihre Abgabe. Sie dürfen als Team mit bis zu zwei weiteren Personen abgeben. Geben Sie dann nur eine einzige Lösung ab und schreiben Sie alle Namen und Matrikelnummern des Teams auf die gemeinsame Abgabe. Heften Sie die Abgabe bitte zusammen (Tacker oder notfalls Büroklammer). Bitte die Abgabe nicht falten und keine Schnellhefter oder Umschläge abgeben. Es gibt insgesamt 12 Übungsblätter, die in 3 Blöcke (A, B, C) aufgeteilt sind. In jedem Block müssen Sie 30 Punkte von 64 möglichen Punkten erreichen, um zur Prüfung zugelassen zu werden. 6 / 6