Fragen zu Registern un Proc's
-
Hallo,
ich bin grade dabei mir ein wenig Assembler anzueignen, habe jedoch noch ein paar Verständnisfragen...1. warum heißt es z.b. MOV AH,08H
wenn man dann jedoch das eingelesenen Zeichen in das DL Register legen will MOV DL,AL
erst wird das AH register verwendet und dann das AL Register, wird das eingelesene zeichen automatisch in AL abgelegt?
Wann wird dann eigentlich AX verwendet?
Noch was: bedeutet Akkumulator sowas wie ausführendes Register, oder warum muss dort eine Funktion wie 08H abgelegt werden?2. Warum muss in einer Prozedur oder in einem Macro ein Register Inhalt durch Push in den RAM gerettet werden? Ist das nur dann nötig, wenn dieses Register auch einen wert beinhaltet und der Wert in der Proc überschrieben würde oder geschiet diese Prozedur mit jedem register, welches in einer Proc verwendet wird?
danke für Antworten...
-
B3nn0 schrieb:
1. warum heißt es z.b. MOV AH,08H
wenn man dann jedoch das eingelesenen Zeichen in das DL Register legen will MOV DL,AL
erst wird das AH register verwendet und dann das AL Register, wird das eingelesene zeichen automatisch in AL abgelegt?Wo wird da ein Zeichen eingelesen? Ich seh nur ein bisschen Registerherumschieberei. Du scheinst dich aber darüber zu wundern, ob AL und AH magisch miteinander verbunden sind oder so. Sind sie nicht. Was in AH ist, taucht nicht plötzlich in AL auf. HTH
Wann wird dann eigentlich AX verwendet?
Entweder wenn man AH und AL gemeinsam bearbeiten will, oder schlicht und einfach, weil man ein 16-Bit-Register benötigt. AH und AL sind ja die beiden 8 Bit breiten Teile von AX.
Noch was: bedeutet Akkumulator sowas wie ausführendes Register, oder warum muss dort eine Funktion wie 08H abgelegt werden?
Es gibt Rechnerarchitekturen, die haben nur ein Akkumulator-Register. Jeder Rechenvorgang sieht ungefähr so aus: Lade X in A, Addiere Y zu A, speichere A in Z, d.h. der Akkumulator ist praktisch der Dreh- und Angelpunkt bei allen Rechenoperationen. Beim 8086 ist das etwas verwässert, weil man auch mit den anderen Registern beschränkt rechnen kann (aber einige Befehle wie MUL benutzen immer noch implizit den Akkumulator). Ab dem 80386 gibt es dann die erweiterten Register EAX, EBX usw., die AFAIK alle gleichwertig sind.
Du rufst danach einen Interrupt auf? Die zugehörige Routine erwartet ihre Funktionsnummer schlicht und einfach im AH-Register. Das ist eine Konvention, und AFAIK nicht technisch notwendig. Bill Gates hätte sich damals auch für CL entscheiden können
(ja ich weiß das ist nicht historisch korrekt, soll nur den Punkt illustrieren)
2. Warum muss in einer Prozedur oder in einem Macro ein Register Inhalt durch Push in den RAM gerettet werden?
Wenn damit gearbeitet wird, aber der alte Wert am Ende wiederhergestellt werden soll. Sonst nicht. Man kann natürlich auf Nummer sicher gehen und einfach am Ende alles wiederherstellen, was man verändert hat. Muss jeder selbst wissen. Hochspracheninterfaces haben da meistens bestimmte Konventionen, welche Register verändert werden dürfen und welche nicht.