在Assembler Video Mode方面需要帮助

时间:2011-04-07 00:58:17

标签: video assembly interrupt

我正在为我的班级做一些编码,我认为我在正确的轨道上,但我遇到了垂直线的问题。当我运行这个代码时,它在同一个确切的位置同时绘制2条水平线,但是我需要第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 个答案:

答案 0 :(得分:3)

不要让y保持不变并变化x,而是保持x不变并改变y