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

Documents pareils