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 –

  1. Nehmen Sie eine Zählung gleich 4
  2. Speichern Sie die Startadresse beider Blöcke in 2 verschiedenen Registerpaaren
  3. Tauschen Sie nun die Inhalte an den Adressen in beiden Registerpaaren aus
  4. Erhöhen Sie die Werte beider Registerpaare
  5. Zählung um 1 verringern
  6. Wenn die Anzahl nicht gleich 0 ist, wiederholen Sie die Schritte 3 bis 5
SPEICHERADRESSEMNEMONIKBEMERKUNGEN
2500LXI D 2001D <= 20, E <= 01
2503LXI H3001H <= 20, L <= 01
2506MVI C 04C <= 04
2508MOV B, MB <= M[ HL ]
2509LDAX DA <= M[ DE ]
250AMOV M, AM[ HL ] <= A
250BBEWEGUNG A, BA <= B
250CSTAX DM[ DE ] <= A
250DINX H[ HL ] <= [ HL ] + 1
250EINX D[ DE ] <= [ DE ] + 1
250FDCR CC <= C – 1
2510JNZ 2508SPRUNG ZU 2508, WENN C UNGLEICH 0
2513HLTSTOPPEN SIE DAS PROGRAMM

Erläuterung -

  1. LXI D 2001 – Lädt das Registerpaar, also in diesem Fall D=20 und E=01
    LXI H 3001 – H=30 und L=01
  2. MVI C 04 – Weist sofortige Daten zu, zB- hier C=04
    MVI A 45 – Weist A(Akkumulator) mit 45, A=45 zu
  3. 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
  4. LDAX D – Hier wird der Akkumulator mit den Daten geladen, die an der durch das Registerpaar D – E gebildeten Adresse gespeichert sind
  5. 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
  6. STAX D – Speichert den Inhalt von A (Akkumulator) in der Adresse, die durch das Registerpaar D – E gebildet wird.
  7. INX H – Inkrementiere den Inhalt des Registerpaars H – L
  8. INX H – Inkrementiere den Inhalt des Registerpaars D – E
  9. DCR C – Dekrementiert den Inhalt von Register C
  10. JNZ 2508 – Wenn der Wert von Register C ungleich 0 ist, dann springe zu Adresse 2508
  11. HLT – Programmausführung stoppen