Ich habe ein kleines Spiel mit Assembly für x8086 mit tasm zu tun, ist ein Labyrinth-ähnliches Spiel, in dem ich einige Blöcke bewegen muss, um das Spiel zu gewinnen. Ich muss das Labyrinth aus einer .txt-Datei lesen und es auf den Bildschirm laden (es muss standardmäßig 25x80 sein), das Problem ist, dass ich keine Ahnung habe, wie man ein Zeichen aus dem txt "erkennt". Zum Beispiel werden die Wände durch "0" und das Zeichen durch eine "&" dargestellt. Wie kann ich also das Zeichen "&" bewegen, wenn ich eine Pfeiltaste drücke? Ich lade bereits die Datei und wird auf dem Bildschirm angezeigt, aber ich weiß nicht, wie ich es verschieben soll. Ich muss es im Textmodus tun, mit int 10h und int 16h, danke.Wie kann ich ein Zeichen im Assembly-Textmodus verschieben? (tasm x8086)
Antwort
Wenn das Labyrinth bereits auf dem 80x25-Bildschirm angezeigt wird, ist es sehr einfach, das Zeichen zu lesen.
Zuerst setzen Sie den Cursor an (ändern Sie die Spalten- und Zeilennummern für die Position, die Sie nach) lesen möchten:
mov dl, 40 ;Column number of the middle of the screen
mov dh, 12 ;Row number of the middle of the screen
mov bh, 0 ;Display page
mov ah, 02h ;Function number
int 10h
Dann ist es lesen:
mov bh, 0 ;Display page
mov ah, 08h ;Function number
int 10h
Jetzt Sie finden den Zeichencode im AL
Register.
Das Register AH
zeigt Ihnen die Vordergrund- und Hintergrundfarben dieses Zeichens an.
Um zu testen, ob diese Stelle deinen Charakter enthält, schreiben Sie:
cmp al, "&"
je YES
den Charakter vom Bildschirm zu entfernen, schreiben Sie einfach einen Raum auf den Bildschirm:
Ich würde die Zeichen aus dem Videospeicher nicht so lesen. Es ist langsam sogar direkt, und durch BIOS 'Int 10h' ist es mega langsam. Ich weiß, dass es für das Textmodus-Spiel keine Rolle spielt, aber das sollte nur als "es ist möglich" gezeigt werden, nicht wie es empfohlen wird. Auf PC XT-Maschinen ist es viel besser, entweder einen Offscreen-Puffer im Speicher zu haben oder zumindest auf den VRAM direkt über die Adresse b800: 0000 zuzugreifen. Jedenfalls finde ich alarmierender, dass das OP nicht versteht, wie Daten im Computerspeicher gespeichert werden, und ihm beibringt, VRAM zu lesen, geht weit über diese Grundlagen hinaus. (Es ist eine gute Antwort, nur 50x langsamer als die richtige Lösung) – Ped7g
- 1. TASM Zeichen der Zeichenfolge
- 2. Kann ich ein UIAlertView verschieben?
- 3. TASM-Mauseingabe
- 4. Weird-Makros (TASM)
- 5. Tasm Include-Dateien
- 6. Wie kann ich ein Panel ausblenden und verschieben?
- 7. Wie kann ich SVN-Zusammenführungskonflikte präventiv verschieben?
- 8. Wie kann ich ein Bild in Swift verschieben?
- 9. Wie kann ich ein Fenster mit python-xlib verschieben/skalieren?
- 10. CSS: Wie kann ich ein Objekt um eine Ebene verschieben?
- 11. Wie kann ich Dateien mit Node.JS in ein Verzeichnis verschieben?
- 12. Wie kann ich ein Datentelegramm horizontal auf Klickereignis verschieben?
- 13. Wie kann ich Legenden in Highcharts verschieben?
- 14. TASM 8086 Ausgabe Ausgabe
- 15. Wie kann man Zeichen im Zeichen-Array ohne Duplikat drucken?
- 16. Wie kann ich die Caretposition programmatisch in eine RichTextBox verschieben?
- 17. Wie werden Seiten in Assembly (TASM) verwendet?
- 18. Wie kann ich JComponents verschieben und zoomen?
- 19. Negative Zahlen in TASM anzeigen
- 20. Wie kann ich ein Zeichen in mehrere Variablen speichern?
- 21. Wie kann ich TabItem von TabControl verschieben?
- 22. Wie kodieren Sie Subtraktion in TASM
- 23. Ermöglicht TASM, dass ein Makro als Operand verwendet wird?
- 24. Was bedeutet `dup (?)` In TASM?
- 25. Wie kann ich in C# feststellen, ob ein Zeichen ein Nicht-ASCII-Zeichen ist?
- 26. Wie kann ich ein Zeichen in Mongodb durch ein anderes Zeichen in einer Sammlung ersetzen?
- 27. Farbwechsel bei der Montage Tasm
- 28. Incrementieren CX Zähler in Assembly (TASM)
- 29. Wie kann ich ein Null-Zeichen in Kotlin
- 30. Wie kann ich ein 2D-Array von Zeichen dynamisch zuweisen?
Datei ist Byte-Array. Inhalt sind 0-255 Zahlen, eine "Text" -Datei ist die gleiche, mit etwas Textcodierung, um anzugeben, was diese Zahlen bedeuten. In Ihrem Fall arbeiten Sie wahrscheinlich mit der ASCII-Codierung, so dass der Anfang der Datei, die '0. #. &. 0 'enthält, eine Bytefolge ist: 48, 46, 35, 46, 38, 46, 48. Wenn Sie bereits gelesen haben Datei in den Speicher, Sie haben diese Bytes im Speicher, und können mit ihnen arbeiten, nur Adresse berechnen (die Dateidefinition der Zeile entscheidet, wie Offset in Array für bestimmte [x, y] zu berechnen) und Sie können zum Beispiel 'cmp Byte tun ptr [bx], '&' 'um den Wert von' bx' mit der Zahl 38 zu vergleichen. – Ped7g