Нужна помощь с ассемблером Video Mode - PullRequest
0 голосов
/ 07 апреля 2011

Я делаю код для своего класса и думаю, что я на правильном пути, но у меня проблема с линиями вертикула.Когда я запускаю этот код, он рисует две горизонтальные линии одновременно в одном и том же точном месте, но мне нужно, чтобы линия 2 перемещалась с 50,50 до 50,75 по вертикали, а не с 50, 50 до 75,50 по горизонтали.Я не прошу ответа, мне просто нужно подтолкнуть и объяснить, спасибо:

; video.asm
; uses interrupts to set video mode and draw a line

include 'emu8086.inc'

org  100h ; set location counter to 100h

jmp CodeStart

DataStart:
    xStart1 dw 50        ; x coordinate of line start 1
    yStart1 dw 50        ; y coordinate of line start 1
    xStart2 dw 50        ; x coordinate of line start 2
    yStart2 dw 50        ; y coordinate of line start 2
    length dw 25        ; length of line

CodeStart:

    ; set the video mode 320x200, 256 colors
    mov al, 13h
    mov ah, 0
    int 10h

    ; initialize cx (x coord) to xStart1 + length
    ; initialize bx (y coord) to yStart2 + length
    mov cx, xStart1
    mov bx, yStart2
    add cx, length
    add bx, length


    ; loop from (xStart1+length) to xStart1 to draw a horizontal line
    ; loop from (yStart1+length) to yStart1 to draw a vertical line
    LoopStart:    

        ; draw a pixel
        ; set color in al, x in cx, y in dx
        mov al, 50
        mov dx, yStart1

        ; set sub function value in ah to draw a pixel
        ; and invoke the interrupt
        mov ah, 0ch
        int 10h

        ; decrement the x coord for line 1
        ; decrement the y coord for line 2
        sub cx, 1
        sub bx, 1

        ; test to see if x coord has reached start value
        cmp cx, xStart1

    ; continue loop if cx >= xStart1
    jae LoopStart

    ret

1 Ответ

3 голосов
/ 07 апреля 2011

Вместо того, чтобы сохранять y постоянным и изменяющимся x, сохраняйте x постоянным и варьируйте y

...