Stack-Verwaltung durch PUSH- und POP-Operationen |
![]() |
![]() |
Letztmalig dran rumgefummelt: 16.10.13 21:23:33 |
ist wahrscheinlich fehlerfrei und kann unbedenklich verwendet werden |
|
|
Aufgabe: Alle Register, einschließlich des Alternativregistersatzes sind mit markanten Werten zu laden - das Ergebnis ist durch Registeranzeige nachzuverfolgen!
Lösungsalgorithmus: Der Stackpointer wird definiert gesetzt (bei uns 2100H). Alle 8-Bit Hauptregister der CPU werden geladen, anschließend auf den Alternativregistersatz umgeschalten, alle Werte der reihe nach auf dem Stack abgelegt (gesichert), die Register umgeschrieben (sie haben somit neue Inhalte, wie das auch bei Nutzung einer Subroutine geschehen würde), danach wird alles zurück geholt!! Nacherfolgtem Programmlauf kontrolliere man die Inhalte der Speicherplätze unterhalb 2100H - dort müssen die einzelnen Registerinhalte in der Folge des LIFO-Prinzips "abgestapelt" sein.
Anmerkungen zur Steuerung: wir demonstrieren das Retten der Register
Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
INIT | ORG 2000H | ;Adresse Programmbeginn | ||||
0001 | 2000H | 31 00 21 | LD SP, 2100H | ;Stackpointer auf 2100H gesetzt | ||
0002 | FIRST | 2003H | 3E 11 | LD A, 11H | ;11H Inhalt Register A | |
0003 | SECOND | 2005H | 01 33 22 | LD BC, 2233H | ;2233H Inhalt Registerpaar BC | |
0004 | THIRD | 2008H | 11 55 44 | LD DE, 4455H | ;4455H Inhalt Registerpaar DE | |
0005 | FOURTH | 200BH | 21 77 66 | LD HL, 6677H | ;6677H Inhalt Registerpaar HL | |
0006 | 200EH | F5 | PUSH AF | ; | ||
0007 | 200FH | C5 | PUSH BC | ; | ||
0008 | 2010H | D5 | PUSH DE | ; | ||
0009 | 2011H | E5 | PUSH HL | ; | ||
0010 | 2012H | 08 | EX AF | ;Zugriff auf alternativ AF | ||
0011 | 2013H | D9 | EXX | ;Zugriff auf alternative Register | ||
0012 | FIRST | 2014H | 3E 88 | LD A, 88H | ;88H Inhalt Register A' | |
0013 | SECOND | 2016H | 01 AA 99 | LD BC, 99AAH | ;99AAH Inhalt Registerpaar B'C' | |
0014 | THIRD | 2019H | 11 CC BB | LD DE, BBCCH | ;BBCCH Inhalt Registerpaar D'E' | |
0015 | FOURTH | 201CH | 21 EE DD | LD HL, DDEEH | ;DDEEH Inhalt Registerpaar H'L' | |
0016 | FITH | 201FH | DD 21 22 11 | LD IX, 1122H | ;1122H Inhalt Register IX | |
0017 | SIXTH | 2023H | FD 21 44 33 | LD IY, 3344H | ;3344H Inhalt Register IY | |
0018 | 2027H | F5 | PUSH AF | ; | ||
0019 | 2028H | C5 | PUSH BC | ; | ||
0020 | 2029H | D5 | PUSH DE | ; | ||
0021 | 202AH | E5 | PUSH HL | ; | ||
0022 | 202BH | DD E5 | PUSH IX | ; | ||
0023 | 202DH | FD E5 | PUSH IY | ; | ||
0024 | FIRST | 202FH | 3E FF | LD A, FFH | ;FFH Inhalt Register A | |
0025 | SECOND | 2031H | 01 EE DD | LD BC, DDEEH | ;DDEEH Inhalt Registerpaar BC | |
0026 | THIRD | 2034H | 11 CC BB | LD DE, BBCCH | ;BBCCH Inhalt Registerpaar DE | |
0027 | FOURTH | 2037H | 21 AA 99 | LD HL, 99HHH | ;99AAH Inhalt Registerpaar HL | |
0028 | FITH | 203AH | DD 21 00 00 | LD IX, 0000H | ;0000H Inhalt Register IX | |
0029 | SIXTH | 203EH | FD 21 FF FF | LD IY, FFFFH | ;FFFFH Inhalt Register IY | |
0030 | 2042H | FD E1 | POP IY | ; | ||
0031 | 2044H | DD E1 | POP IX | ; | ||
0032 | 2046H | E1 | POP HL | ; | ||
0033 | 2047H | D1 | POP DE | ; | ||
0034 | 2048H | C1 | POP BC | ; | ||
0035 | 2049H | F1 | POP AF | ; | ||
0036 | 204AH | 08 | EX AF | ;Zugriff auf Hauptregister AF | ||
0037 | 204BH | D9 | EXX | ;Zugriff auf Hauptregister | ||
0038 | 204CH | E1 | POP HL | ; | ||
0039 | 204DH | D1 | POP DE | ; | ||
0040 | 204EH | C1 | POP BC | ; | ||
0041 | 204FH | F1 | POP AF | ; | ||
0042 | 2050H | 76 | HALT | ; |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost im März 2007 |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |