8085-Programm zum Austauschen eines Blocks von Bytes im Speicher
Problem – Schreiben Sie ein Programm auf Assembler-Ebene in einen 8085-Mikroprozessor, um einen Block von 4 Bytes ab Adresse 2001 mit Daten ab Adresse 3001 auszutauschen.
Algorithmus –
- Nehmen Sie eine Zählung gleich 4
- Speichern Sie die Startadresse beider Blöcke in 2 verschiedenen Registerpaaren
- Tauschen Sie nun die Inhalte an den Adressen in beiden Registerpaaren aus
- Erhöhen Sie die Werte beider Registerpaare
- Zählung um 1 verringern
- Wenn die Anzahl nicht gleich 0 ist, wiederholen Sie die Schritte 3 bis 5
SPEICHERADRESSE | MNEMONIK | BEMERKUNGEN |
---|---|---|
2500 | LXI D 2001 | D <= 20, E <= 01 |
2503 | LXI H3001 | H <= 20, L <= 01 |
2506 | MVI C 04 | C <= 04 |
2508 | MOV B, M | B <= M[ HL ] |
2509 | LDAX D | A <= M[ DE ] |
250A | MOV M, A | M[ HL ] <= A |
250B | BEWEGUNG A, B | A <= B |
250C | STAX D | M[ DE ] <= A |
250D | INX H | [ HL ] <= [ HL ] + 1 |
250E | INX D | [ DE ] <= [ DE ] + 1 |
250F | DCR C | C <= C – 1 |
2510 | JNZ 2508 | SPRUNG ZU 2508, WENN C UNGLEICH 0 |
2513 | HLT | STOPPEN SIE DAS PROGRAMM |
Erläuterung -
- LXI D 2001 – Lädt das Registerpaar, also in diesem Fall D=20 und E=01
LXI H 3001 – H=30 und L=01 - MVI C 04 – Weist sofortige Daten zu, zB- hier C=04
MVI A 45 – Weist A(Akkumulator) mit 45, A=45 zu - MOV B, M – Hier ist M die Daten im Registerpaar H – L und dient als Adresse. Kopiert den Inhalt an der in M gespeicherten Adresse in das Register B
- LDAX D – Hier wird der Akkumulator mit den Daten geladen, die an der durch das Registerpaar D – E gebildeten Adresse gespeichert sind
- MOV M, A – Hier wird der Inhalt von A an die Adresse kopiert, die in M gespeichert ist.
MOV A, B – Kopiert den Inhalt von Register B nach A - STAX D – Speichert den Inhalt von A (Akkumulator) in der Adresse, die durch das Registerpaar D – E gebildet wird.
- INX H – Inkrementiere den Inhalt des Registerpaars H – L
- INX H – Inkrementiere den Inhalt des Registerpaars D – E
- DCR C – Dekrementiert den Inhalt von Register C
- JNZ 2508 – Wenn der Wert von Register C ungleich 0 ist, dann springe zu Adresse 2508
- HLT – Programmausführung stoppen