Assembler (Einleitung) - auf Matthias
Transcription
Assembler (Einleitung) - auf Matthias
Technische Informatik II Rechnerarchitektur 2.Assemblersprache (Einleitung) Matthias Dräger E-Mail: www: [email protected] www.matthias-draeger.info/lehre/sose2011ti2/ tinyurl.com/sose2011ti2 Zuletzt bearbeitet: 28.04.2011 Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 1 Assemblersprache Maschinesprache in für Menschen lesbarer Form Hardwarechips lassen sich direkt programmieren Assemblerprogramme funktionieren ohne Betriebssystem jeder Prozessortyp hat seine eigene Assemblersprache d.h. Assemblerprogramm ist am Prozessortyp gebunden Cross-Assembler assembliert für verschiedene Prozessortypen Früher Heute Microcontroller-Programmierung Geschwindigkeitsoptimierung Treiber-Programmierung (Treiber-Programmierung) Programmierung von Betriebssystemen Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 2 GNU Compiler Collection (GCC) enthält Compiler für C, C++, Java, Objective-C, Fortran, Ada, Go vorinstalliert auf Linux-Distributionen (Ubuntu, BSD, Darwin (Mac OS X), …) wird zum assemblieren und linken verwendet auch auf Windows portiert: MinGW es wird min. Version 4.4.x benötigt Unterstützte Prozessoren Alpha MIPS-Architektur (primär unter IRIX) ARM-Architektur (sekundär, unter Linux) PA-RISC (primär unter HP-UX) H8/300 PDP-11 S/370, S/390 PowerPC x86 und AMD64 SuperH IA-64 „Itanium“ Sun SPARC (primär unter Solaris, sekundär unter Linux) Motorola 68000 und Motorola Coldfire VAX Motorola 88000 und eine Reihe von Prozessoren von eingebetteten Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 Systemen 3 GCC-Version prüfen Befehl in der Konsole: gcc --version Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 4 Virtualisierung mit Virtualbox virtualisiert ein beliebiges Betriebssystem auf Windows/Linux/Mac OS X kostenlos Sicherungspunkte möglich, zum Zurücksetzen des Gastsystems http://www.virtualbox.org/wiki/Downloads http://www.ubuntu.com/desktop/get-ubuntu/download Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 5 Assemblersprache (x86) Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 6 Register kleine Datenspeicher (32 Bit Architektur = jedes Register 32 Bit groß) sehr viel schneller als RAM feste Namen vorgegeben: Name Verwendung eax allgemein verwendbar ebx allgemein verwendbar ecx allgemein verwendbar edx allgemein verwendbar ebp Basepointer esp Stackpointer eax ax ah al } unterteilen sich in weitere Register 32 Bit 16 Bit 8 Bit Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 8 Bit 7 Struktur eines Assemblerprogramms Datei: programm.asm .section .data } Definition von Variablen für das Programm .section .text Definiert _start als Startpunkt des Programms. .globl _start Hier startet das Programm _start: movl $1, %eax movl $0, %ebx int $0x80 } Programmcode Diese Codezeilen beenden das Programm. (Syscall) Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 8 Programm erstellen Assemblersprache assemblieren programm.asm Maschinen- Objektdatei sprache linken programm.o programm Befehle in der Konsole $ as programm.asm -o programm.o 1.assemblieren $ ld programm.o -o programm 2.linken $ ./programm 3.ausführen Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 9 Ergebnis von programm.asm wenn nichts erscheint ist alles richtig Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 10 Adressierungsmöglichkeiten Code Adressierung Beschreibung movl $1, %eax Immediate mode schreibt 1 in eax movl %eax, %ebx Register Addressing kopiert Wert von eax nach ebx movl 100, %eax Direct Addressing kopiert Wert an Adresse 100 nach eax movl variable(, %ebx, 1), %eax Indexed Addressing kopiert ebx-ten Wert von variable nach eax movl $3, (%edx) Indirect Addressing schreibt 3 an die Adresse von edx movl 4(%eax), %ebx Basepointer Addressing kopiert Wert an Adresse eax + 4 Bytes nach ebx Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 11 Variablen, Typen Variablen sind Aliase für Speicheradressen werden im Bereich .section .data definiert: <Name>: <Typ> <Wert> Beispiel: .section .data var: .int 23 Typ Darstellung Größe .ascii Zeichenkette 1 Byte pro Zeichen .byte Ganzzahl 1 Byte .short Ganzzahl 2 Byte .int Ganzzahl 4 Byte .long Ganzzahl 4 Byte .float Gleitkommazahl 4 Byte .double Gleitkommazahl 8 Byte Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 12 Hallo Welt Datei: hallowelt.asm Definiert Label text mit der Zeichenkette „Hallo Welt!“ .section .data text: .ascii "Hallo Welt!\n" .section .text .globl _start _start: mov $4, %eax mov $1, %ebx mov $text, %ecx mov $12, %edx int $0x80 mov $1, %eax mov $0, %ebx int $0x80 Wert 4 in eax gibt den Kernel an Text auszugeben Wert 1 in ebx steht für stdout (0 für stdin, 2 für stderr) Adresse des auszugebenen Textes Anzahl der Zeichen des auszugebenen Textes Syscall ausführen Beendet das Programm. Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 13 Ergebnis von hallowelt.asm wenn „Hallo Welt!“ erscheint ist alles richtig Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 14 Fragen? Technische Informatik II - Rechnerarchitektur, Assembler, 28.04.2011 15