Erfahrenes Mitglied
Registriert seit: Oct 2009
Beiträge: 640
Bedankt: 228
|
Ok, ich habe es dann irgendwie doch geschafft. Jedoch liegt die Betonung hier auf "IRGENDWIE". Meine aktuelle Lösung ist so was von schlecht ... aber meine erste und bis jetzt einzige die funktioniert (bzw. überhaupt in den RAM passt ... und damit meinen ich, dass ich 100% des Speichers verbrauche ...).
Aufgabe 4:
Code:
jmp main
; Funktion (02) zur Pause bis ENTER
; Verändert AL
pause:
in 00 ; pysikalische Tastatur einlesen
cmp AL, 0D ; wurde ENTER (0x0D) eingegeben?
jnz pause ; JA: mache weiter; NEIN: Frage noch mal
ret ; Funktion verlassen
; Funktion (0A) zum tauschen zweier Speicher auf dem RAM
; Wert an der Adresse in AL, wird mit dem Wert an der Adresse in BL vertauscht
; Verändert alle Register (AL, BL, CL, DL)
mov CL, [AL] ; Wert an der Adresse in AL, nach CL kopieren
mov DL, [BL] ; Wert an der Adresse in BL, nach DL kopieren
mov [AL], DL ; Wert von DL auf die Adresse in AL kopieren
mov [BL], CL ; Wert von CL auf die Adresse in BL kopieren
call 02 ; Pause aufrufen
ret ; Funktion verlassen
main:
; Spielfeld zeichen
mov AL, 44 ; Buchstaben D (ASCII-CODIERT) nach AL kopieren
mov [C0], AL ; AL am VDU an 1. Stelle ausgeben (D )
dec AL ; im Alphabet zurück gehen (Buchstabe C (ASCII-CODIERT) nach AL kopieren)
mov [C1], AL ; AL am VDU an 2. Stelle ausgeben (DC )
dec AL ; im Alphabet zurück gehen (Buchstabe B (ASCII-CODIERT) nach AL kopieren)
mov [C2], AL ; AL am VDU an 3. Stelle ausgeben (DCB )
dec AL ; im Alphabet zurück gehen (Buchstabe A (ASCII-CODIERT) nach AL kopieren)
mov [C3], AL ; AL am VDU an 4. Stelle ausgeben (DCBA)
call 02 ; Pause aufrufen
; VDU:
; +-------------------+
; |D C B A |
; | |
; | |
; | |
; +-------------------+
; Zug 1:
mov AL, C3 ; Adresse von VDU-Position [1. Zeile, 4. Zeichen] nach AL kopieren
mov BL, D0 ; Adresse von VDU-Position [2. Zeile, 1. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |D C B |
; |A |
; | |
; | |
; +-------------------+
; Zug 2:
mov AL, C2 ; Adresse von VDU-Position [1. Zeile, 3. Zeichen] nach AL kopieren
mov BL, E0 ; Adresse von VDU-Position [3. Zeile, 1. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |D C |
; |A |
; |B |
; | |
; +-------------------+
; Zug 3:
mov AL, D0 ; Adresse von VDU-Position [2. Zeile, 1. Zeichen] nach AL kopieren
mov BL, E1 ; Adresse von VDU-Position [3. Zeile, 2. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |D C |
; | |
; |B A |
; | |
; +-------------------+
; Zug 4:
mov AL, C1 ; Adresse von VDU-Position [1. Zeile, 2. Zeichen] nach AL kopieren
mov BL, D0 ; Adresse von VDU-Position [2. Zeile, 1. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |D |
; |C |
; |B A |
; | |
; +-------------------+
; Zug 5:
mov AL, E1 ; Adresse von VDU-Position [3. Zeile, 2. Zeichen] nach AL kopieren
mov BL, C1 ; Adresse von VDU-Position [1. Zeile, 2. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |D A |
; |C |
; |B |
; | |
; +-------------------+
; Zug 6:
mov AL, E0 ; Adresse von VDU-Position [3. Zeile, 1. Zeichen] nach AL kopieren
mov BL, D1 ; Adresse von VDU-Position [2. Zeile, 2. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |D A |
; |C B |
; | |
; | |
; +-------------------+
; Zug 7:
mov AL, C1 ; Adresse von VDU-Position [1. Zeile, 2. Zeichen] nach AL kopieren
mov BL, D2 ; Adresse von VDU-Position [2. Zeile, 3. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |D |
; |C B A |
; | |
; | |
; +-------------------+
; Zug 8:
mov AL, C0 ; Adresse von VDU-Position [1. Zeile, 1. Zeichen] nach AL kopieren
mov BL, E0 ; Adresse von VDU-Position [3. Zeile, 1. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; | |
; |C B A |
; |D |
; | |
; +-------------------+
; Zug 9:
mov AL, D2 ; Adresse von VDU-Position [2. Zeile, 3. Zeichen] nach AL kopieren
mov BL, E1 ; Adresse von VDU-Position [3. Zeile, 2. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; | |
; |C B |
; |D A |
; | |
; +-------------------+
; Zug 10:
mov AL, D1 ; Adresse von VDU-Position [2. Zeile, 2. Zeichen] nach AL kopieren
mov BL, C0 ; Adresse von VDU-Position [1. Zeile, 1. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |B |
; |C |
; |D A |
; | |
; +-------------------+
; Zug 11:
mov AL, E1 ; Adresse von VDU-Position [3. Zeile, 2. Zeichen] nach AL kopieren
mov BL, C1 ; Adresse von VDU-Position [1. Zeile, 2. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |B A |
; |C |
; |D |
; | |
; +-------------------+
; Zug 12:
mov AL, D0 ; Adresse von VDU-Position [2. Zeile, 1. Zeichen] nach AL kopieren
mov BL, E1 ; Adresse von VDU-Position [3. Zeile, 2. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |B A |
; | |
; |D C |
; | |
; +-------------------+
; Zug 13:
mov AL, C1 ; Adresse von VDU-Position [1. Zeile, 2. Zeichen] nach AL kopieren
mov BL, D0 ; Adresse von VDU-Position [2. Zeile, 1. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; |B |
; |A |
; |D C |
; | |
; +-------------------+
; Zug 14:
mov AL, C0 ; Adresse von VDU-Position [1. Zeile, 1. Zeichen] nach AL kopieren
mov BL, E2 ; Adresse von VDU-Position [3. Zeile, 3. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; | |
; |A |
; |D C B |
; | |
; +-------------------+
; Zug 15:
mov AL, D0 ; Adresse von VDU-Position [2. Zeile, 1. Zeichen] nach AL kopieren
mov BL, E3 ; Adresse von VDU-Position [3. Zeile, 4. Zeichen] nach BL kopieren
call 0A ; AL mit BL tauschen
; VDU:
; +-------------------+
; | |
; | |
; |D C B A |
; | |
; +-------------------+
; ENDE
mov AL, 45 ; Buchstaben E (ASCII-CODIERT) nach AL kopieren
mov [F0], AL ; AL am VDU an 1. Stelle ausgeben (E )
mov [F3], AL ; AL am VDU an 1. Stelle ausgeben (E E)
mov AL, 4E ; Buchstaben N (ASCII-CODIERT) nach AL kopieren
mov [F1], AL ; AL am VDU an 1. Stelle ausgeben (EN E)
mov AL, 44 ; Buchstaben D (ASCII-CODIERT) nach AL kopieren
mov [F2], AL ; AL am VDU an 1. Stelle ausgeben (ENDE)
; VDU:
; +-------------------+
; | |
; | |
; |D C B A |
; |E N D E |
; +-------------------+
end ; Programm beenden
Das Programm löst nicht wirklich das Rätsel, sondern gibt nur die einzelnen Schritte zur Lösung aus (jedoch ist es wohl laut Aufgabenstellung nicht gegen die Regeln  ). Sollte es tatsächlich jemand schaffen das Rätsel, Programmiertechnisch mit dem Simulator zu lösen, würde ich sehr gerne diese Lösung sehen.
Übrigens braucht mir keiner sagen, wie hässlich diese Lösung ist ... dessen bin ich mir bewusst.
|