Assembler - Einleitung

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

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

Just-In-Time-Compiler (2)

Assembler-Programmierung

Assembler Kontrollstrukturen

Assembler - Adressierungsarten

Assembler Unterprogramme

Übung 1 - Betriebssysteme I

Assembler - Variablen

Hinweise C-Programmierung

6. Grundlagen der Programmierung

Assembler Integer-Arithmetik

Grundlagen der Informatik III Wintersemester 2010/2011

RO-Tutorien 15 und 16

Compiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg Universitätsstraße 31, Regensburg

Motivation und Überblick

Aufgabe 1 Entwicklung einer Virtuellen Maschine

Kurzeinführung in C99

Grundlagen der Rechnerarchitektur. Einführung

Tutorium Rechnerorganisation

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Einführung in die C-Programmierung

Einleitung Die Pins alphabetisch Kapitel 1 Programmierung des ATmega8 und des ATmega

Karlsruher Institut für Technologie

RO-Tutorien 3 / 6 / 12

Welche Informatik-Kenntnisse bringen Sie mit?

Assembler (NASM) Crashkurs von Sönke Schmidt

Programmieren lernen mit Perl

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Erste Schritte der Programmierung in C

Betriebssysteme Teil 3: Laufzeitsystem für Programme

Bibliotheks-basierte Virtualisierung

Praktische Informatik 1

Teil I Debuggen mit gdb

Deklarationen in C. Prof. Dr. Margarita Esponda

U23 Assembler Workshop

2. Aufgabenblatt Musterlösung

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

U23 Assembler Workshop

1.7 Assembler Programmierung

Rechnerarchitektur und Betriebssysteme (CS201): Frühe Betriebssysteme, geschützte CPU-Befehle, CPU-Modus

TA Hacke Dein bewaffnen Sie!

Algorithmen versus Programmiersprachen

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

Instruktionssatz-Architektur

Programmieren in Haskell Debugging

Intensivübung zu Algorithmen und Datenstrukturen

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

U23 - Shellcode. Twix Chaos Computer Club Cologne. Motivation Einstieg Der erste Shellcode Nullbytes, NOP Slides

Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

Architektur/Chip/Komponente

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

Computersysteme. Dom Bedos, "Die Kunst des Orgelbauers". Erster Teil (1766), Kenntnis der Orgel und der Prinzipien ihrer Mechanik.

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / Vorlesung 9, Dienstag 18.

Einführung (1) Erster funktionsfähiger programmgesteuerter Rechenautomat Z3, fertiggestellt 1941 Bild: Nachbau im Deutschen Museum München

Microcontroller Praktikum SS2010 Dipl. Ing. R. Reisch

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Die Programmiersprache C Eine Einführung

Einführung in die Programmiersprache C

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

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

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

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Übung zu Betriebssystembau (Ü BS)

Programmiersprachen Einführung in C

Aufgabenblatt 4 IT-Security Angewandte Informatik WS 2016/17

Einleitung Funktionsaufrufe Berechnungen Verzweigungen Systemaufrufe Speicherzugriffe Fazit Quellen. Laufzeitkosten in C.

Übungen zur Vorlesung Systemsicherheit

Übungspaket 9 Logische Ausdrücke

Betriebssystembau. 3. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

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

Technische Informatik II Rechnerarchitektur

Coma I. Einleitung. Computer und Algorithmen. Programmiersprachen. Algorithmen versus Programmiersprachen. Literaturhinweise

Einführung in die Programmierung 1

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

Inhaltsverzeichnis VII. Teil I: PC- und Mikrocomputer-Technik

Crashkurs C++ - Teil 1

Transkript:

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

Teil 1: Hochsprache Assembler-Code Assembler - Einleitung 2/19 2008-04-01

Hochsprache (z.b. C, C++, Java, Pascal,...) nicht direkt ausführbar Übersetzung der Hochsprache in die Muttersprache (Maschinensprache) des Rechners (symbolische Maschinensprache: Assembler-Code) Transformation normalerweise Aufgabe eines Compilers Assembler-Programmierung in Ausnahmefällen: Ausnutzung von Spezialfällen, für die die CPU bessere Befehle kennt Compiler erzeugt schlechten/falschen Code Programmteile, die in Hochsprache nicht programmierbar sind; z.b. I/O-Operationen Interrupt-/Exception-/System-Call-Handler Assembler - Einleitung 3/19 2008-04-01

Nachfolgend ein paar Beispiele für Effekte, die man nur mit Assembler-Wissen erklären kann. Assembler - Einleitung 4/19 2008-04-01

short int x; for (x = SHRT_MIN; x <= SHRT_MAX; x = x + 1) {... } Hinweis vom Compiler (hier: gcc): comparison is always true due to limited range of data type Das Programm durchläuft nicht wie wohl erhofft alle zulässigen Werte für x genau einmal. Statt dessen ist obige Schleife eine Endlos-Schleife! Warum? Assembler - Einleitung 5/19 2008-04-01

double array[10000][10000]; double sum; int x; int y; sum = 0.0; for (x = 0; x < 10000; x++) { for (y = 0; y < 10000; y++) { sum += array[y][x]; } } Vertauscht man beim Array-Zugriff x und y ist das Programm u.u. um Größenordnungen schneller! Warum? Assembler - Einleitung 6/19 2008-04-01

int mean(int x, int y) { return (x + y) / 2; } Diese Funktion liefert als Mittelwert von 2.000.000.000 und 2.000.000.000 (beides korrekte 32-Bit-Integer-Zahlen) den Wert -147.483.648 zurück. Warum? Assembler - Einleitung 7/19 2008-04-01

struct element { char code[n]; int val; }; Für N = 4 braucht diese Struktur/Klasse 8 Bytes Speicher. Für N = 5 erhöht sich der Bedarf auf 12 Bytes. Bei weiterer Vergrößerung von N auf z.b. N = 6, N = 7 oder N = 8 wird dagegen nicht nochmals mehr Speicher gebraucht. Warum? Assembler - Einleitung 8/19 2008-04-01

Assembler-Code-Wissen unverzichtbar für Hardware-Entwurf und -Bewertung Compiler-Bau, Programmiersprachenentwurf Realzeit- und Embedded-System-Programmierung Betriebssystem-Programmierung (auch in Hochsprache!) Programmierung effizienter Algorithmen (auch in Hochsprache!) Programmierung System-naher Programmteile (auch in Hochsprache!) Assembler - Einleitung 9/19 2008-04-01

Assembler-Code-Wissen hilft bei Grafik-Programmierung Programmierung für Mustererkennung Datenbank-Programmierung Assembler - Einleitung 10/19 2008-04-01

Beispiel L0:.byte n, =, %, d, \n, \0 demo: void demo(void) { pushl %ebx int n; movl $0, %ebx n = 0; jmp L2 goto L2; L1: pushl %ebx L1: pushl $L0 call printf printf("n=%d\n", n); addl $8, %esp addl $1, %ebx n = n + 1; L2: cmp $10, %ebx L2: if (n!= 10) jne L1 goto L1; popl %ebx ret Assembler - Einleitung 11/19 } 2008-04-01

Maschine soll in der Lage sein, alle, in beliebigen (problemorientierten) Hochsprachen geschrieben Programme effizient (schnell, geringer Speicheraufwand) abzuarbeiten. Instruktionssatz-Architektur (ISA): Ziel der Rechner-Architekten sollte sein: grundlegende Befehle finden Balance zwischen viele Befehle => aufwändige Dekodierung wenige Befehle => ineffiziente Berechnung Assembler - Einleitung 12/19 2008-04-01

Konstrukte von Hochsprachen: Datenzugriffe (I/O-Operationen) Arithmetik Kontrollstrukturen Unterprogramme (Interrupts, Exceptions, System-Calls) Zerlegung von Datenzugriffen, arithmetischen Ausdrücken, Schleifen usw. in einfachere Bestandteile Assembler - Einleitung 13/19 2008-04-01

normalerweise Beispiele für Intel-Prozessoren der i80x86-serie (ab i80386) in GNU-Schreibweise geeignet für eigene Versuche auf Linux-PCs (Windows-PCs) viele Infos unter http://linuxassembly.org/ zum Teil Beispiele für Motorola-Micro-Controller m68x05 in Motorola-Schreibweise Assembler - Einleitung 14/19 2008-04-01

Hinweise für eigene Versuche Grundgerüst: Datei file.s.text /* Programmsegment */ _start:.globl _start... /* <--- Testprogramm */ movl $0, %ebx /* exit-status des Programms */ movl $1, %eax /* exit-funktionsnummer */ int $0x80 /* System-Call */.data /* Datensegment */... /* <--- Testdaten */ Assemblieren mit as gstabs -o file.o file.s Linken mit ld -o file file.o Assembler - Einleitung 15/19 2008-04-01

Hinweise für eigene Versuche Assembler - Einleitung 16/19 2008-04-01

Hinweise für eigene Versuche Testen des Programms file mit./file (normaler Testlauf) gdb./file oder ddd./file (Lauf mit Debugger) Assembler - Einleitung 17/19 2008-04-01

Hinweise für eigene Versuche Debugger (gdb) stellt verschiedene Befehle zum Testen zur Verfügung: help allgemeine Hilfe break func Breakpoint setzen run Testlauf starten stepi Ausführung einer einzelnen Maschinen-Instruktion info register Anzeige der CPU-Register x &var Anzeige der Variablen x disassemble func Anzeige der Funktion func quit Beenden des Debuggers Assembler - Einleitung 18/19 2008-04-01

Eigene Versuche Jeder sollte eigene Versuche durchführen! Verständnis ohne praktische Programmierung unmöglich! C-Code schreiben vom C-Compiler erzeugten Code verstehen (oder andere problemorientierte Programmiersprache) Assembler-Code schreiben Programm testen Assembler - Einleitung 19/19 2008-04-01