Assembler Kontrollstrukturen

Ähnliche Dokumente
Just-In-Time-Compiler (2)

Assembler-Programmierung

Just-In-Time-Compiler (2)

Assembler - Einleitung

Assembler Integer-Arithmetik

Assembler - Adressierungsarten

Assembler (NASM) Crashkurs von Sönke Schmidt

8. Intel IA-32 Prozessoren: Befehlsübersicht


Hinweise C-Programmierung

Weitere Arithmetik. Grundlagen der Rechnerarchitektur Assembler 33

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013

Systeme 1: Architektur

Die Mikroprogrammebene eines Rechners

Assembler - Variablen

Beispiel: A[300] = h + A[300]

Zusammenfassung der Assemblerbefehle des 8051

Zwischencodeerzeugung Compiler II

Datenpfad einer einfachen MIPS CPU

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

Datenpfad einer einfachen MIPS CPU

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

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

Grundbegriffe der Informatik Tutorium 5

Datenpfad einer einfachen MIPS CPU

Technische Informatik 1

Assembler Unterprogramme

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Compilerbau Instruktionsauswahl 168. Instruktionsauswahl

Daniel Betz Wintersemester 2011/12

Grundbegriffe der Informatik

Bibliotheks-basierte Virtualisierung

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

C- Kurs 04 Anweisungen

Grundlagen der Rechnerarchitektur

Theoretische Informatik SS 03 Übung 3

Grundlagen: Algorithmen und Datenstrukturen

Busse. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2008/2009

Shangrila. One Instruction Set Computer

Systemprogrammierung (37-023)

Rechnerarchitektur Teil 2

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

Rechnergrundlagen SS Vorlesung

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

Aufgabe 1 Entwicklung einer Virtuellen Maschine

Teil 2: Rechnerorganisation

Was ist die Performance Ratio?

Übersicht Programmablaufsteuerung

U23 Assembler Workshop

Moderne C-Programmierung

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

Integer Integer Integer (Voreinstellung) Integer Gleitkomma Gleitkomma leer/unbestimmt Integer ohne Vorzeichen Integer (explizit) mit Vorzeichen

Theoretische Informatik II. WS 2007/2008 Jun.-Prof. Dr. Bernhard Beckert Ulrich Koch. 1. Teilklausur Vorname:... Nachname:...

Einführung in die C-Programmierung

Modellierung und Programmierung 1

Grundlagen der Rechnerarchitektur und -organisation Technische Informatik II Organisation und Technologie von Rechensystemen IV

RO-Tutorien 15 und 16

Programmiersprachen Einführung in C

INFORMATIK Oberstufe. Funktionsweise eines Rechners

Rechnerstrukturen 1: Der Sehr Einfache Computer

Effektiv Programmieren in С und C++

U23 Assembler Workshop

Architektur/Chip/Komponente

Rückblick. Zahlendarstellung zu einer beliebigen Basis b. Umwandlung zwischen Zahlendarstellung (214) 5 = (278) 10 =(?) 8

RISC-Prozessoren (1)

F Ein einfacher Modellprozessor

Technische Informatik II Rechnerarchitektur

TIn 1: Feedback Laboratories. Lecture 4 Data transfer. Question: What is the IP? Institut für Embedded Systems. Institut für Embedded Systems

Teil IX. Eine kleine Programmiersprache

Darstellung von negativen binären Zahlen

Grundlagen der Rechnerarchitektur. Binäre Logik und Arithmetik

Grundlagen der Informatik III Wintersemester 2010/2011

Anbindung eines Forth- Targets an einen Forth-Host. Rechner z.b. PC steuert ein Target System z.b. Evaluation Board

Übersicht der wichtigsten Assemblerbefehle in ATT-Syntax. Operanden, Statusflags und Registersatz

Einführung in die Informatik

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

KOP / FBS - Programmierung

RO-Tutorien 3 / 6 / 12

FAKULTÄT FÜR INFORMATIK

Von-Neumann-Architektur

Tag 3 Repetitorium Informatik (Java)

Welche Informatik-Kenntnisse bringen Sie mit?

Cache. Dr.-Ing. Volkmar Sieh. Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

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

Funktionaler Aufbau eines Computers Untersuchung von Delphi-Compilaten

Transkript:

Assembler Kontrollstrukturen Dr.-Ing. Volkmar Sieh Department Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2008 Assembler Kontrollstrukturen 1/21 2008-04-03

Kontrollstrukturen Hochsprachen bieten i.a. eine Vielzahl verschiedener Konstrukte zur bedingten und wiederholten Ausführung von Anweisungen. Beispiele: i f (... ) {... } e l s e {... } switch (... ) { case... :... d e f a u l t :... } while (... ) {... } do {... } while (... ) ; f o r (... ;... ;... ) {... } goto... ; l a b e l :...... Assembler Kontrollstrukturen 2/21 2008-04-03

Komplexere Kontrollstrukturen lassen sich auf einfachere zurückführen. Beispiel: f o r ( i = 0 ; i < 1 6 ; i ++) { anw ( ) ; } erster Vereinfachungsschritt: i = 0 ; while ( i < 16) { anw ( ) ; i ++; } Assembler Kontrollstrukturen 3/21 2008-04-03

i = 0 ; while ( i < 16) { anw ( ) ; i ++; } nächste Vereinfachung: i = 0 ; goto t e s t ; l o o p : anw ( ) ; i ++; t e s t : i f ( i < 16) goto l o o p ; Assembler Kontrollstrukturen 4/21 2008-04-03

Allgemeine Umwandlungsregeln existieren. Beispiel: f o r (<A>; <B>; <C>) <D> erster Vereinfachungsschritt: <A> while (<B>) { <D> <C> } Assembler Kontrollstrukturen 5/21 2008-04-03

<A> while (<B>) { <D> <C> } näechste Vereinfachung: <A> goto t e s t ; l o o p : <D> <C> t e s t : i f (<B>) goto l o o p ; Assembler Kontrollstrukturen 6/21 2008-04-03

Wichtig: Es gibt für alle Programmiersprachen allgemeingültige Regeln, wie komplexe Kontrollstrukturen auf einfachere abzubilden sind! Assembler Kontrollstrukturen 7/21 2008-04-03

Komplizierte Bedingungen lassen sich vereinfachen. Beispiel: i f ( a > b && a!= 0) { anw ( ) ; } erster Vereinfachungsschritt: i f (! ( a > b ) ) goto end ; i f (! ( a!= 0 ) ) goto end ; anw ( ) ; end : ; Assembler Kontrollstrukturen 8/21 2008-04-03

i f (! ( a > b ) ) goto end ; i f (! ( a!= 0 ) ) goto end ; anw ( ) ; end : ; nächste Vereinfachung: i f ( a <= b ) goto end ; i f ( a == 0) goto end ; anw ( ) ; end : ; Assembler Kontrollstrukturen 9/21 2008-04-03

Allgemeine Regeln zur Vereinfachung von bedingten Sprüngen: i f (<a> && <b> &&... && <c>) goto <l a b e l > kann vereinfacht werden zu next : i f (! <a>) goto <next> i f (! <b>) goto <next>... i f (<c>) goto <l a b e l > Kurzschluss-Und Assembler Kontrollstrukturen 10/21 2008-04-03

Allgemeine Regeln zur Vereinfachung von bedingten Sprüngen: i f (<a> <b>... <c>) goto <l a b e l > kann vereinfacht werden zu i f (<a>) goto <l a b e l > i f (<b>) goto <l a b e l >... i f (<c>) goto <l a b e l > Kurzschluss-Oder Assembler Kontrollstrukturen 11/21 2008-04-03

Für die Terme <a>, <b> usw. gilt: hat der Term die Form x OP y mit OP {<, >, <=, >=, ==,! =,...}, so existiert dafür ein passender Assembler-Befehl hat der Term die Form!(x OP y) so läßt sich eine Vergleichoperation OP finden, sodaß gilt:!(x OP y) = x OP y hat der Term die Form!(x y... z) so kann der Term zu!x &&!y &&... &&!z vereinfacht werden (Regel von de Morgan) hat der Term die Form!(x && y &&... && z) so kann der Term zu!x!y...!z vereinfacht werden (Regel von de Morgan) Assembler Kontrollstrukturen 12/21 2008-04-03

Generelle Beobachtung: alle bedingten Ausführungen von Anweisungen sowie alle Schleifenkonstrukte lassen sich auf folgende zwei Anweisungs-Typen abbilden: goto label; if (a OP b) goto label; mit OP {<, >, =,! =, <=, >=,...} Assembler Kontrollstrukturen 13/21 2008-04-03

Kontrollstrukturen Sprünge Assembler-Code für unbedingte Sprünge: goto l a b e l ; => jmp l a b e l ; Assembler-Code für bedingte Sprünge: i f ( a OP b ) goto l a b e l ; => jop a, b, l a b e l Assembler Kontrollstrukturen 14/21 2008-04-03

Kontrollstrukturen bedingte Sprünge jop a, b, l a b e l jop erfordert drei Adressen (a, b, label). Diesen Befehl gibt es daher nur auf Drei-Adress-CPUs. Für Zwei- bzw. Ein-Adress-CPUs muss der Befehl aufgespalten werden: Zwei-Adress-CPU cmp a, b jop l a b e l Ein-Adress-CPU l d a a cmp b jop l a b e l Für die Zwischenspeicherung des Vergleichsergebnisses ist ein Register notwendig: Condition-Codes - oder Flags -Register (%eflags) Assembler Kontrollstrukturen 15/21 2008-04-03

Kontrollstrukturen bedingte Sprünge Beispiel: char a, b ; i f ( a < b ) goto l a b e l ; ergibt compiliert für i80x86: cmpb b, a j l l a b e l / jump i f l e s s / ergibt compiliert für m68x05: l d a b cmp a b l o l a b e l / branch i f l o w e r / Assembler Kontrollstrukturen 16/21 2008-04-03

Kontrollstrukturen bedingte Sprünge mögliche Bedingungen: i80x86 m68x05 = je beq!= jne bne >, >= unsigned ja, jae bhi, bhs <, <= unsigned jb, jbe blo, bls >, >= signed jg, jge bpl, - <, <= signed jl, jle bmi, -... Assembler Kontrollstrukturen 17/21 2008-04-03

Kontrollstrukturen Flags-Register Auch viele Arithmetik-Befehle setzen die Condition-Codes ( CC ) im Flags-Register; Beispiele: Zero-Flag: gesetzt, wenn Ergebnis 0 ist Negative-/Sign-Flag: gesetzt, wenn das höchstwertige Bit des Ergebnisses 1 ist Carry-Flag: bei Übertrag gesetzt...... Assembler Kontrollstrukturen 18/21 2008-04-03

Kontrollstrukturen Flags-Register Bedingte Sprünge nutzen die Condition-Codes (Beispiel i80x86): je (jump if equal) verzweigt, wenn Zero-Bit gesetzt ist jl (jump if less) verzweigt, wenn Negative-Bit gesetzt ist jle (jump if less or equal) verzweigt, wenn Zero- oder Negative-Bit gesetzt sind... cmp-befehl subtrahiert die zwei Operanden, setzt die CC-Bits entsprechend, speichert aber das Subtraktionsergebnis nicht. Assembler Kontrollstrukturen 19/21 2008-04-03

Kontrollstrukturen Hinweise Statt einer Adresse als Sprungziel wird häufig die Differenz zur Adresse der aktuellen (oder nächsten) Instruktion angegeben (meist eine kleinere Zahl); Beispiel: 0 8 :... 0 9 : j l e 25 1 0 :... => 0 8 :... 0 9 : j l e +16 1 0 :... Assembler Kontrollstrukturen 20/21 2008-04-03

Kontrollstrukturen Hinweise Vorteile: weniger Speicheraufwand schnellere Befehlsausführung unabhängig von der tatsächlichen Lage des Programms im Speicher ( Position-Independant-Code (PIC)) Nachteile: mühsamere Berechnung (wird meist vom Assembler/Linker übernommen) nicht alle Sprungziele erreichbar (lange Version zusätzlich notwendig) Assembler Kontrollstrukturen 21/21 2008-04-03