您好我正在尝试使用此代码在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重置视频模式但是这让我在循环中不需要闪烁
答案 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的更正。谢谢迈克尔。
如果您需要阅读一些文档,可以在这里阅读: