18.12.2012 Aufrufe

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

6. Funktionseinheiten eines Computers / Mikrocomputers

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Rechnergrundlagen Teil 2 - 18 - Prof. Dipl.-Ing. Komar<br />

Transportbefehle MOV – IN / OUT – PUSH / POP<br />

Weil die INTEL-Prozessorfamilie maximal Speicher-zu-Register-Befehle zulässt, ist der MOV-Befehl<br />

der häufigste in einem 80x86-Programm. Beispielsweise bedeuten:<br />

MOV AX, DX transportiere den Inhalt von Register DX nach AX<br />

MOV CL,AH transportiere den Inhalt von Halbregister AH nach CL<br />

MOV BX,1000 lade die Zahl 1000 (hex) ins BX-Register<br />

MOV BL,C4 lade die Zahl C4 (hex) ins BL-Halbregister<br />

MOV [1000],CH transportiere den Inhalt von Halbregister CH zum Speicher l000 h<br />

MOV [1000],CX transportiere den Inhalt von Register CX zum Speicher 1000 und 1001<br />

Diese Adressierungsart nennt man ,,Register zu Speicher" oder ,,direkt".<br />

Als Operanden kommen prinzipiell Registerinhalte, Speicherinhalte und Konstanten in Frage. MOV kann als<br />

Prototyp der Zwei - Operand - Befehle gelten, ein Operand ist in der Regel ein Register. Dieses bestimmt die<br />

Wortbreite der Operation (16 Bit bei Vollregister, 8 Bit bei Halbregister ). Gemischte Operationen sind<br />

unzulässig!<br />

MOV AX, BL unzulässig, da unterschiedliche Registerbreite<br />

MOV [1000], [2000] unzulässig, da Speicher-zu-Speicher-Zuweisung<br />

Mit IN- und OUT-Befehlen lassen sich Daten zwischen Prozessor und I/O-Ports austauschen.<br />

Die Register aller Peripherie -Bausteine ( Controller ) können über Ports angesprochen werden. Die 80x86<br />

Familie verfügt über einen I/O-Adressraum von 64 Kbyte, der nicht mit dem Speicheradressraum<br />

zusammenfällt.<br />

Die I/O-Adressen sind 16 Bit lang und die meisten Peripheriebausteine weisen eine Register / Datenbusbreite<br />

von 8 Bit auf.<br />

IN AL , port Lade AL mit Byte aus port-Register port = niederwertiges Byte der I/O-Adresse<br />

IN AX , port Lade AX mit Wort aus port-Register höherwertiges Byte dabei Null<br />

IN AL,DX Lade AL mit Byte aus dem Portregister, dessen Adresse (16 Bit) in DX steht<br />

IN AX,DX Lade AX mit Wort aus dem Portregister, dessen Adresse in DX steht<br />

OUT port,AL Lade 8-Bit-port-Register mit dem Inhalt von AL, port = niederwertiges Adressbyte<br />

OUT port,AX Lade 16-Bit-port-Register mit dem Inhalt von AX<br />

OUT DX,AL Lade 8-Bit-Portregister, dessen Adresse in DX steht, mit dem Inhalt von AL<br />

OUT DX,AX Lade 16-Bit -Portregister, dessen Adresse in DX steht, mit dem Inhalt von AX<br />

Im PC sind die Portadressen auf 10 Adressbit beschränkt und für das System und die Erweiterungskarten<br />

stehen daher nur die Portadressen von 0000 bis 03FF h zur Verfügung.<br />

Mit den Befehlen PUSH und POP lassen sich die Inhalte der 16-Bit -Register und von Speicherworten auf<br />

dem Stapel zwischenspeichern bzw. zurückholen.<br />

Der Stapel (Stack) ist ein besonderer Bereich des Arbeitsspeichers, der durch den Stapelzeiger SP und das<br />

Stapelsegmentregister SS adressiert wird (SS : SP ) und nach dem Prinzip Last In – First Out (LIFO)<br />

organisiert ist. Legt man mit PUSH Wörter auf den Stapel, so wird der Stapelzeiger SP automatisch um 2<br />

vermindert, der Stapel wächst also zu niedrigen Adressen hin. Beim Herunterholen mit dem POP-Befehl ist es<br />

genau umgekehrt.<br />

Der Zugriff auf den Stapel erfolgt immer wortweise (16 Bit ), wobei das High-Byte auf der höheren und das<br />

Low-Byte auf der niedrigeren Adresse gespeichert wird.<br />

Der Stapelzeiger SP zeigt immer auf das zuletzt auf den Stapel gelegte Low-Byte.<br />

Bei jedem Unterprogramm-Aufruf mit dem Call-Befehl, wird die Rücksprungadresse auf den Stapel gelegt<br />

und bei dem Rücksprung mit RET wieder in den Instruction-Pointer IP zurückgeladen.<br />

Bei jedem Interrupt ( Hard- und Software ) werden das Statusregister F, das Codesegmentregister CS und der<br />

Befehlszähler IP auf den Stapel gerettet und mit dem Befehl IRET wieder zurückgeholt.<br />

PUSH AX / POP DS legt / holt ein 16-Bit-Register auf / vom Stapel<br />

PUSH [1000] / POP [200] " Speicherwort "<br />

PUSHF / POPF legt / holt Statusregister F auf / vom Stapel

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!