cover
Michael Ziegenbalg

Maschinennahe Programmierung


Dieses Buch wideme ich allen meinen Enkeln :Emil, Tommy, Yannik, Enno


BookRix GmbH & Co. KG
80331 München

Maschinennahe Programmierung

 

 

 

 

 

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 re­alisiert, 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 preis­gü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. Be­sonders 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

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.

 

 

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)

 

 

 

 

 

 

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 Ø