2

您好,我正在尝试使用此代码在 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 重置视频模式,但这让我闪烁,这在我的循环中是不需要的

4

3 回答 3

7

您的代码存在一些问题。

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

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

所以应该是:

mov ax,0A000h
mov es,ax

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

mov cx,32000d
cld
rep stosw
于 2012-12-20T19:48:53.310 回答
1

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

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

并在你的程序中调用它

call clrscr
于 2015-03-24T23:18:19.303 回答
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 的更正。谢谢迈克尔。

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

关于 vga 编程的在线电子书

于 2017-11-08T19:58:55.510 回答