将字符写入视频缓冲区MASM

时间:2011-12-01 00:59:21

标签: masm dos irvine16

我试图将白色背景上的字母“D”写入视频缓冲区。这段代码有什么问题?

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

对上方进行了更改。它现在组装,但什么也没显示。

3 个答案:

答案 0 :(得分:2)

示例示例:

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

希望此示例可以帮助您

答案 1 :(得分:2)

1)0b800h是视频缓冲区的地址。 mov word ptr [si], 44h仅解决DS中段地址的偏移(此处为:0b800h) - 而DS并未指向视频缓冲区。我建议将视频片段加载到ES并使用片段覆盖(ES:)。

2)字母加彩色形成一个单词。在视频缓冲区中首先是字母然后是颜色。背景和前景色使用每个半字节(4位)。由于"小字节序" (google for it)一个单词应该有格式颜色/字母,例如白/蓝/' d' = 7144h

这是与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

答案 2 :(得分:0)

在这里看一下清单15:

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