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 に答える