2011-01-03 5 views
2

Ich versuche, in Assembler zu bekommen und ich auf Zahlen in der folgenden Form oft kommen:Assembler Speicheradresse Darstellung

org 7c00h 

; initialize the stack: 
mov  ax, 07c0h 
mov  ss, ax 
mov  sp, 03feh ; top of the stack. 

7C00h, 07c0h, 03feh - Was ist der Name dieser Nummer Notation? Was meinen sie? Warum werden sie über "normale" Dezimalzahlen verwendet?

Antwort

1

Es ist hexadezimal, das Zahlensystem mit 16 Ziffern 0-9 und A-F. Speicheradressen werden in hex angegeben, weil sie kürzer und einfacher zu lesen sind, und die Zahlen, die die Speicherstellen darstellen, bedeuten für den Menschen nichts besonderes, also hat es keinen Sinn, lange Zahlen zu haben. Ich würde vermuten, dass irgendwo früher jemand auch per Hand Adressen eingeben musste, genauso gut hätte er dort anfangen können.

+0

Es ist wert hinzuzufügen, dass das "h" am Ende jeder Nummer nur ein Teil der Notation ist und nicht Teil der Nummer. 7c00h ist "7c00" in hexadezimal. An anderen Stellen wird dieselbe Zahl wie 0x7c00 angezeigt. – Sapph

1

Bemerkenswert auch, 0: 7C00 ist die Ladeadresse des Bootsektors.

Weitere beachtenswerte: 07C0: 03FE ist die gleiche Adresse wie 0: 7FFE wegen der Art der segmentierten Adressierung.

Dieser Typ hat sich selbst einen 510-Byte-Stack hinterlassen (er hat den sehr typischen "off-by-two" -Fehler beim Einrichten des Boot-Sektor-Stacks gemacht).

1

Diese Zahlen sind in hexadecimal notation, das heißt in der Basis 16, wobei A bis F haben die Ziffer 10 bis 15. Werte

Ein Vorteil ist, dass es eine direkte Umwandlung in binäre Zahlen. Mit ein wenig Übung ist es einfach zu sehen, welche Bits in der Zahl 1 sind und welche 0 sind.

Eine andere ist, dass viele intern verwendete Zahlen, wie Speicheradressen, runde Zahlen in hexadezimal sind, dh a enthalten Viele Nullen.