x86视频模式清除屏幕

时间:2012-12-20 19:36:17

标签: assembly x86 nasm dos bios

您好我正在尝试使用此代码在DOS视频模式下清除屏幕。

但是当我运行它时,点仍然存在!

    org 100h

    mov     ah, 0       ; set display mode function.
    mov     al, 13h     ; mode 13h = 640x480 pixels, 256 colors.
    int     10h         ; set it!

    mov     cx, 10      ; column
    mov     dx, 10      ; row
    mov     al, 15      ; white
    mov     ah, 0ch     ; put pixel
    int     10h         ; draw pixel

    ; -------  clear the screen ----------     
    ; -------  doesn't work! dot is still there

    mov ax,0B800h
    mov es,ax
    xor di,di
    xor ax,ax
    mov cx,2000d
    cld
    rep stosw

    ; -------------------------------------

    ;wait for keypress
    mov ah,00
    int 16h

    mov ax, 4c00h ; exit to operating system.
    int 21h

    ;======================================================

我尝试使用INT 10重置视频模式但是这让我在循环中不需要闪烁

3 个答案:

答案 0 :(得分:6)

您的代码存在一些问题。

首先,BIOS模式13h不是640x480,8位/像素,它是320x200,8位/像素。

B800h是BIOS文本模式的地址。 BIOS图形模式使用A000h。

所以它应该是:

mov ax,0A000h
mov es,ax

320x200,8位消耗320 * 200 = 64000字节的视频内存。所以cx的值不正确。它应该是:

mov cx,32000d
cld
rep stosw

答案 1 :(得分:0)

对于文本模式,您可以使用这个简单的过程

clrscr proc
    mov ax,0003h
    int 10h 
    ret
endp

并通过

在您的程序中调用它
call clrscr

答案 2 :(得分:0)

下一个代码适用于msdos 5.0。它适用于vga模式(640x480像素和16种颜色的调色板)。

BORRARPANTALLAVGA:
;Erases the screen in graphic mode
;Input:
;CH: Background color.
    PUSH    AX
    PUSH    CX
    PUSH    DX
    PUSH    DI
    PUSH    ES
    MOV     DX,     3C4H
    MOV     AX,     0F02H
    OUT     DX,     AX
    MOV     DX,     3CEH
    MOV     AH,     CH
    XOR     AL,     AL
    OUT     DX,     AX
    MOV     AX,     0F01H
    OUT     DX,     AX
    MOV     CX,     19200
    XOR     DI,     DI
    MOV     AX,     0A000H
    MOV     ES,     AX
    CLD
    REP     STOSW
    MOV     DX,     3CEH
    MOV     AX,     1
    OUT     DX,     AX
    POP     ES
    POP     DI
    POP     DX
    POP     CX
    POP     AX
    RET

我希望这可以提供帮助。

请原谅我可能出现的错误。

代码已重新编辑,包括Michael Petch的更正。谢谢迈克尔。

如果您需要阅读一些文档,可以在这里阅读:

Online ebook about vga programming