Linie poziome w assemblerze

0

Piszę program asseblerowy, który ma za zadanie wyświetlać 8 poziomych linii w kolorze czerwonym. Wszystko działa ładnie, tylko piąta linia wyświetla się w na czarno. Kolorowe linie działały tak samo. Nie rozumiem czemu się tak dzieje, ani jak to poprawić. To moja procedura rysowania

Draw PROC
MOV ax, 0a000h
MOV ES, AX
MOV BX, CX
ADD CX, 8000
etDraw
MOV al, 4
MOV ES:[BX], AL
INC BX
CMP BX, CX
JL etDraw
RET
ENDP

Oraz wywoływanie procedury

MOV AX, 0f00h
    INT 10h
    MOV ax, 0013H
    int 10h
    MOV ah, 0Ch
    CALL Draw
    CALL Draw
    CALL Draw
    CALL Draw
    CALL Draw
    CALL Draw
    CALL Draw
    CALL Draw
    MOV ah, 08h
    int 21h
    mov ax, 0f00h
    int 10h
    mov ax, 0003h
    int 10h
    mov ax, 4c00h
    int 21h
2

Za pisanie w Assmeblerze bez komentarzy powinna być kary śmierci!
Dodaj komentarze to wtedy się zobaczy. Nie myślisz chyba, że ktoś będzie zgadywał co ma roić twoja procedura rysowania linii, która nawet nie jest procedurą skoro nie przyjmuje argumentów a za każdym wywołaniem robi coś innego albo nie wiadomo co jest argumentem.

0

zrób czarne tło, dorób 9 linie, powiedz, że zrobiłeś ładną przerwe w połowie, żeby łatwiej sie je liczyło

1

Dodatkowo pracując w trybie 13h ( 320x200 VGA ) kolory są ustawione jako paleta. Twój program narysuje czerwone linie tylko w przypadku gdy kolor o indeksie 4 jest akurat tak ustawiony. Domyślnie tak jest ale w ogólności tak być nie musi.

W tym trybie 8 linii to także 320*8 = 2560 bajtów pamięci karty wypełnionych wartością 4.

1

Int 10h to nie jest przerwanie DOS, tylko BIOS, grupa video.
Jak już starasz się dawać tagi, rób poprawnie

1 użytkowników online, w tym zalogowanych: 0, gości: 1