Frage

Ich versuche, den Buchstaben 'D' in blau auf einem weißen Hintergrund zu schreiben, indem ich ihn in den Videopuffer verschiebt. Was ist los mit diesem Code?

INCLUDE Irvine16.inc

.code
main PROC

mov ax,@data
mov ds,ax

mov si, 0b800h
mov word ptr [si], 44h
mov word ptr [si+2] 0701h

mov ah, 08h
int 21h

exit

main ENDP

Die Änderungen an oben gemacht. Es montiert jetzt, zeigt aber nichts an.

War es hilfreich?

Lösung

Beispielbeispiel:

name "hello-world"
org 100h

; set video mode     
mov ax, 3     ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3) 
int 10h       ; do it! 

; cancel blinking and enable all 16 colors: 
mov ax, 1003h
mov bx, 0
int 10h


; set segment register: 
mov     ax, 0b800h
mov     ds, ax

; print "hello world" 
; first byte is ascii code, second byte is color code. 

mov [02h], 'h'

mov [04h], 'e'

mov [06h], 'l'

mov [08h], 'l'

mov [0ah], 'o'

mov [0ch], ','

mov [0eh], 'w'

mov [10h], 'o'

mov [12h], 'r'

mov [14h], 'l'

mov [16h], 'd'

mov [18h], '!'




; color all characters: 
mov cx, 12  ; number of characters. 
mov di, 03h ; start from byte after 'h' 

c:  mov [di], 11101100b   ; light red(1100) on yellow(1110) 
    add di, 2 ; skip over next ascii code in vga memory. 
    loop c

; wait for any key press: 
mov ah, 0
int 16h

ret

Hoffe, dieses Beispiel hilft dir

Andere Tipps

1) 0b800h ist das Segment Adresse des Videopuffers. mov word ptr [si], 44h Adressen nur die Offset (hier: 0b800h) der Segmentadresse in DS - und DSzeigt nicht auf den Videopuffer. Ich schlage vor, das Videosegment in das Laden zu laden ES und um eine Segmentüberschreibung zu verwenden (ES:).

2) Buchstabe plus Farbform zusammen ein Wort. Im Videopuffer kommt zuerst der Buchstabe dann die Farbe. Hintergrund- und Vordergrundfarbe verwenden jeweils ein Knabbern (4 -Bit). Aufgrund von "Little Endianness" (Google dafür) sollte ein Wort die Formatfarbe/den Format haben, z. B. weiß/blau/'D' = 7144H

Dies ist ein kompatibles Beispiel von Irvine16:

INCLUDE Irvine16.inc
INCLUDELIB Irvine16.lib

.CODE
main PROC
;   mov ax,@data                ; No .DATA in this example
;   mov ds,ax

    mov si, 0b800h              ; Initialize ES with video buffer
    mov es, si

    xor si, si                  ; Position 0 is top left
    mov word ptr es:[si], 7144h ; White background ('7'), blue foreground (1), letter 'D' (44)

    mov ah, 08h                 ; Wait for key - http://www.ctyme.com/intr/rb-2561.htm
    int 21h

    exit                        ; Irvine16: end of program
main ENDP

END main

Schauen Sie sich hier die Auflistung 15 an:

http://stuff.pypt.lt/ggt80x86a/asm8.htm

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top