Einführung
Aufbau 8086
Organisation und Benutzung des Hauptspeichers
Schnittstelle System - Anwender
Befehle
Unterprogramm
Schnittstelle ASM_C
Die technischen Anwendungen der Informatik sind oft weiter verbreitet, als Schüler annehmen. Fast alle ursprünglich analog arbeitenden Lösungen werden heute mit Hilfe kleiner Prozessoren digital realisiert, z. T. mit sogenannten „embedded systems“. Die meisten Prozessoren finden sich heute nicht in PCs, sondern in anderen technischen Geräten (je nach Quelle 80 % bis über 90 %).
Mit Hilfe der Programmierung von Mikroprozessor-Minimalsystemen – wie sie als Realobjekte preisgünstig angeboten werden (z.B. C-Control), – oder der Programmierung simulierter Systeme (z. B. www.digitalsimulator.de) können die Grundlagen der verwendeten Konzepte vermittelt werden. Besonders geeignet erscheinen auf das Wesentliche reduzierte „didaktische Prozessorsimulationen“ oder ältere 8- bis 16- Bit Real-Prozessoren. Das von A. K. Dewdney 1984 vorgeschlagene „Core War“ eignet sich für eine motivierende Einführung in die maschinennahe Programmierung.
1) Einführung
Ein Mikroprozessor kann nur in Maschinencode angesteuert werden, Maschinencode ist ein binäres Muster (Bitmuster, 0/1 - Folge). Diese wird in der Regel hexadezimal beschrieben, ebenso Daten.
Befehle und Daten stehen in einem „Strom“.
Bsp.: 1E
00 schlecht lesbar
00 unflexibel
50 keine Namen !
F0
80
C8
Nachteile werden behoben durch Einführung der Assemblersprache (to assemble: zusammenfügen).
Assembler besteht aus gut lesbaren Abkürzungen („Mnemonics“)
[z.B. SHL für Shift Left“]; Variablen und Sprungmarken enthalten Namen, Ausdrücke und Kommentare sind erlaubt.
Push DS
Mov Ax,0 Ziel / Quelle
Push Ax
CLD
Mov Ax,CS
obiges Beispiel in Assembler
Der Assemblercode wird assembliert, dabei wird aus jedem Assemblerbefehl ein Maschinenbefehl: „1 zu 1 Abbildung“
Verschiedene Assembler erzeugen aus einem Assemblercode identischen Maschinencode.
Vor und Nachteile von Assembler
Vorteile:
- kompakter Code
- Geschwindigkeit
- vollständige Kontrolle über Hardware
Nachteile:
- keine Bibliothekfunktionen (Ausgabe auf dem Bildschirm, Dateioperation, alle math. Fkt,...)
- Fehler passieren etwas leichter, haben schwerwiegende Folgen
- Reduzierte Portabilität
- große Assemblerprogramme werden unhandlich
guter Kompromiß:
Programme gut strukturiert in einer Hochsprache schreiben und zeitkritische Stellen in kurzen Assembler Abschnitten
Informationseinheiten (i8086)
1Byte = 8Bit
1Wort = 16 Bit
1 Doppelwort = 32 Bit
= Kilo = Mega = Giga
Hexzahlen
Jede Ziffer = 4 Bit
Byte = 2 Hexziffern
Wort = 4 Hexziffern
Doppelwort = 8 Hexziffern
z. B.
1 3 B c h Hex
12 · 1 2 0
11 · 16 2 4
3 · 256 2 8
1 · 4096 2 16
Umwandlung von Zahlen in andere Zahlensystem (andere Basis).
Die gegebene Zahl fortlaufend durch die neue Basis b dividieren, die jeweils verbleibende Reste ergeben, beginnend bei der niederwertigsten, die neue Zahl.
23 : 2 1 431 : 16 15 ^ F
11 : 2 1 26 : 16 10 ^ A
5 : 2 1 1 : 16 1 ^ 1
2 : 2 0 Ø
1 : 2 1
Ergebnis: 10111 binär
In Assembler müssen Hexe zahlen immer mit einer Ziffer beginnen, z. B.
Ø FCh statt FCh
Logische Operation (werden mit den ASM_Befehlen AND, OR, XOR, NOT durchgeführt)
Bitweise Manipulation von Operanden
|
|
5 Dh |
AND |
64 h |
|
|
|
|
|
0 1 0 1 |
1 1 0 1 |
|
|
|
|
|
0 1 1 0 |
0 1 0 0 |
|
|
|
|
Ergebnis |
0 1 0 0 |
0 1 0 0 |
|
= 44 h |
Anwendung: Bitmanipulationen
AND Herausmaskieren einzelner Bits pd löschen einzelner Bits
OR Setzen einzelner Bits, d h. auf „1“
Bsp.: Setzen von Bit 2 in Variable X
0 0 0 0 0 1 0 0 OR X
Bit 2, Zählung beginnt immer bei Ø