Assembler-Tutorial Kapitel 1
Aus Wirthi's Wiki
| Assembler-Tutorial Intel x86-Assembler |
|---|
| Allgemeines Einleitung Kapitel 1 () Kapitel 2 () Kapitel 3 () Kapitel 4 () Kapitel 5 () Kapitel 6 () Kapitel 7 () Kapitel 8 () Kapitel 9 () Kapitel 10 () |
In diesem Kapitel 1 des Assembler-Tutorials werden Zahlensysteme und die Speicherung von Daten in einem Computer beschrieben.
Da Assembler eine hardwarenahe Sprache ist, müssen wir zuerst wissen, wie Daten - insbesondere Zahlen in einem Computer gespeichert werden können. Ein Computer kennt bekannterweise nur 1 und 0 - Strom bzw. kein Strom. Trotzdem kann er riesige Zahlen verarbeiten - wie kann das funktionieren?
[bearbeiten] Dezimalsystem
Das Dezimalsystem ist das Ihnen bekannte Zahlensystem. Es hat zehn (von lateinisch Dezimus der Zehnte) Ziffern ("0"-"9"). Wir sind gewöhnt, mit ihm zu rechnen, und können einfache Rechnungen auch im Kopf schnell durchführen.
Jetzt werden einige Begriffe erklärt:
- Basis
Die Basis eines Zahlensystems beschreib die Anzahl unterschiedlicher Ziffern des Systems. Das Dezimalsystem etwa hat 10 unterschiedliche Ziffern (0-9). Zur Unterscheidung von Zahlen in Ziffernsystemen wird oft eine Abkürzung des Namens oder die Basis tiefgestellt hinter die Zahl geschrieben: während 100110 als Dezimalzahl den Wert "Eintausendundeins" trägt, muss 10012 als Dualzahl gelesen werden (und hat den dezimalen Wert 9).
- Ziffer
Eine Ziffer ist ein Zeichen (eine "Zeichnung", ein "Bild"). Es hat von sich aus keine Bedeutung. Wenn ich also "1" schreibe, dürfen Sie nicht annehmen, dass ich damit "eins" meine (obwohl Sie damit wohl meist recht haben). Der Wert wird erst durch den Ziffernwert bestimmt.
- Ziffernwert
Der Ziffernwert ist wie der Name schon sagt der "Wert" einer Ziffer. Bei uns hat das Zeichen "0" den Wert "null", das Zeichen "1" den Wert "eins", ... , das Zeichen "9" den Wert "neun". Das sind alle im Dezimalsystem vorhandenen Ziffern mit ihren Ziffernwerte, mehr gibt es nicht.
- Stellenwert
Ziffernwerte gelten immer nur für sich selber. Dies reicht jedoch nicht aus; in einer "Zahl" sind ja mehrere Ziffern(werte) kombiniert. Die Zahl 638 besteht aus den drei Ziffern "6", "3", und "8". Woher wissen wir jedoch, dass diese Zahl den Wert "sechshundertachtunddreißig" hat? Dazu müssen wir den Stellenwert der einzelnen Ziffern kennen. Der Stellenwert ergibt sich aus folgender Formel:
Stellenwert = Ziffernwert * Basis^(die wievielste Stelle von rechts minus 1)
Zur Erinnerung: Die Basis des Dezimalsystems ist 10!
- Die "Einerstelle" hat also den Stellenwert 8 (10 hoch 0 = 1, mal 8 = 8).
- Die "Zehnerstelle" hat den Wert 30 (10 hoch 1 = 10, mal 3 = 30).
- Die "Hunderterstelle" hat den Wert 600 (10 hoch 2 =100, mal 6 = 600).
Dieser Rechenvorgang ist eigentlich logisch und dürfte Ihnen klar sein; jeder von uns führt diese Rechnung, ohne sich dessen bewusst zu sein, völlig automatisch beim Lesen einer Zahl durch. Auch ein Computer muss dies natürlich machen.
- Zahlenwert
Um den Zahlenwert einer Zahl zu bestimmen, müssen Sie nur alle Stellenwerte der Zahl addieren:
600 + 30 + 8 = 638 (wie erwartet ...)
[bearbeiten] Dualsystem / Binärsystem
Das von praktisch allen Computern verwendete System ist das Dualsystem (oder auch Binärsystem). Im Unterschied zum Dezimalsystem, hat es nur zwei Ziffern ("0" und "1"). Dies lässt sich mit elektronischen Schaltungen leicht darstellen: 1 entspricht "Strom", 0 entspricht "kein Strom".
Das Dualsystem hat die Basis 2. Davon abgesehen treffen alle oben zum Dezimalsystem genannten Punkte auch für das Dualsystem zu (hinsichtlich Stellenwert, Ziffernwert). Überall, wo wir beim Dezimalsystem als Basis 10 verwendet haben, müssen wir nun als Basis 2 verwenden. Die vierstellige Dualzahl 1100 hat den folgende Ziffernwerte (Stellen von Rechts nach Links gezählt):
- Die erste Stelle hat den Wert 0, da 2^0=1, mal 0 (Ziffernwert) = 0.
- Die zweite Stelle hat ebenfalls den Wert 0, da 2^1 = 2, mal 0 = 0.
- Die dritte Stelle hat den (dezimalen) Wert 4, da 2^2 = 4, mal 1 = 4.
- Die vierte Stelle hat den (dezimalen) Wert 8, da 2^2 = 8, mal 1 = 8.
Die Zahl hat also den (dezimalen) Wert 12 (= 8 + 4 + 0 + 0 ).
Ein Zeichen aus einem Dualsystem wird im Zusammenhang mit der Information meist Bit genannt. Dies ist eine Abkürzung für binary digit - also Binärzeichen.
[bearbeiten] Oktalsystem
Das Oktalsystem (Basis 8, acht Ziffern "0"-"7") wird - wurde - von einigen Großrechnern bevorzugt. Die Ziffernwertberechnung funktioniert genauso wie die dezimale oder duale, nur halt mit der Basis 8.
[bearbeiten] Hexadezimalsystem
Das "Hex" System hat sechzehn Ziffern (und damit die Basis 16). Das ist ein Problem, wir kennen nämlich nur zehn Ziffern. Kein Problem, neben "0"-"9" werden einfach noch "A"-"F" verwendet. Ergibt 16 Ziffern!
Das Hexadezimalsystem wird bei der Ausgabe von Zahlen auf Computern oft bevorzugt (siehe etwa die Speicheradressen bei den allseits beliebten Bluescreens). Das hat mehrere Gründe:
- Durch die 16 Ziffern ist eine Hexadezimalzahl am Bildschirm kürzer (oder höchstens gleich lang) als eine Dezimalzahl ("9A6" ist beispielsweise um eine Stelle kürzer als "2470").
- Hex-Zahlen können Sie ziemlich einfach aus Dualzahlen berechnen; jeweils vier Stellen einer Dualzahl ergeben eine Stelle einer Hexadezimalzahl
[bearbeiten] Zahlenwertberechnung von Hexadezimalzahlen
Zahlenwertberechnung von "A5F" (hexadezimal) (Stellen von rechts nach links):
- die erste Stelle hat den Wert 15, da 16^0 = 1, mal 15 (der Ziffernwert von "F") = 15.
- die zweite Stelle hat den Wert 80, da 16^1 = 16, mal 5 (Ziffernwert) = 80.
- die dritte Stelle hat den Wert 2560, da 16^2 = 256, mal 10 (Ziffernwert von "A") = 2560.
Die Zahl hat also den Wert 2655 (= 2560 + 80 + 15 ).
[bearbeiten] Umrechnung von Dual nach Hexadezimal
Weiter oben wurde behauptet, jeweils vier Stellen einer Dualzahl lassen sich zu einer Hexadezimalzahl zusammenfassen. Warum ist das so?
Dualzahlen haben als Basis die 2. Mit einer Zahl der Länge "1 Zeichen" kann mal also 2 Werte ausdrücken ("0" und "1"). Mit einer Zahl von zwei Zeichen erreicht man schon vier verschiedene Werte ("00", "01", "10" und "11"). Die Allgemeine Formel zur Errechnung dieser Eigenschaft ist:
Anzahl Zahlenwerte = Basis^Zeichenanzahl
Diese Formel gilt auch für andere Zahlensysteme. Bei Dezimalzahlen etwa: bei 3 verwendeten Zeichen kann man 10^3 = 1000 Zahlenwerte darstellen (000-999, stimmt!).
Mit vier Zeichen aus dem Dualsystem lassen sich also genau 2^4 = 16 Zahlenwerte beschreiben. Das ist genau der Wert, der sich mit einem Zeichen aus dem Hexadezimalsystem beschreiben lässt. Wenn man also - von rechts beginnend - jeweils 4 Zeichen einer Dualzahl nimmt, kann man diese direkt in ein Zeichen aus dem Hexadezimalsystem umrechnen.
Betrachten Sie dazu bitte folgende Tabelle:
| dezimal | oktal | dual | hexadezimal |
|---|---|---|---|
| 0 | 0 | 0000 | 0 |
| 1 | 1 | 0001 | 1 |
| 2 | 2 | 0010 | 2 |
| 3 | 3 | 0011 | 3 |
| 4 | 4 | 0100 | 4 |
| 5 | 5 | 0101 | 5 |
| 6 | 6 | 0110 | 6 |
| 7 | 7 | 0111 | 7 |
| 8 | 10 | 1000 | 8 |
| 9 | 11 | 1001 | 9 |
| 10 | 12 | 1010 | A |
| 11 | 13 | 1011 | B |
| 12 | 14 | 1100 | C |
| 13 | 15 | 1101 | D |
| 14 | 16 | 1110 | E |
| 15 | 17 | 1111 | F |
Haben Sie etwa die duale Zahl 10001111 so entspricht das der hexadezimalen Zahl 8F (da 10002 = 816 und 11112 = F16. Diese simple Umrechenbarkeit ist der Grund dafür, warum zur Ausgabe von größeren Dualzahlen - also im Computer errechneten Werten - gelegentlich das Hexadezimale System verwendet wird.
- Abschluss
In diesem Kapitel haben Sie etwas über Zahlensysteme gelernt. Im nächsten Kapitel werden wir beginnen, mit diesen Zahlensystemen zu rechnen.
| Assembler-Tutorial: Allgemeines - Einleitung - Kap. 1 - Kap. 2 - Kap. 3 - Kap. 4 - Kap. 5 - Kap. 6 - Kap. 7 - Kap. 8 - Kap. 9 - Kap. 10 |
