Pregunta

Estoy tratando de escribir la letra 'D' en azul sobre un fondo blanco moviéndola al buffer de video. ¿Qué está mal con este código?

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

Realizó los cambios a arriba. Ahora se ensambla, pero no muestra nada.

¿Fue útil?

Solución

Ejemplo de muestra:

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

Espero que esta muestra te ayude

Otros consejos

1) 0B800H es el segmento Dirección del búfer de video. mov word ptr [si], 44h aborda solo el compensar (aquí: 0b800h) de la dirección del segmento en DS - y DSNo apunta al búfer de video. Sugiero cargar el segmento de video en ES y para usar una anulación de segmento (ES:).

2) letra más forma de color de color una palabra. En el búfer de video primero viene la letra que el color. El fondo y el color en primer plano usan cada un mordisco (4 bits). Debido a "poca endianness" (Google para él), una palabra debe tener el color/letra del formato, por ejemplo, blanco/azul/'d' = 7144h

Este es un ejemplo compatible con 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

Eche un vistazo al Listado 15 aquí:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top