сборка emu8086 диагональная линия - PullRequest
1 голос
/ 17 июня 2020

Мне нужно провести диагональную линию на моем квадрате слева направо, у меня уже есть квадрат, поэтому мне нужна только диагональная линия, я оставлю свой квадратный код ниже, и этот вопрос еще не получил ответа на emu8086 . код:

    org  100h

    jmp code     ; jump into the code section

    ; dimensions of the rectangle:
    ; width: 25 pixels
    ; height:20 pixels

    w equ 25
    h equ 20


    ; set video mode 13h - 320x200

code:
    mov ah, 0
    mov al, 13h
    int 10h


    ; draw upper line:

    mov cx, 125  ; column
    mov dx, 20     ; row
    mov al, 15     ; white
u1:
    mov ah, 0ch    ; put pixel
    int 10h

    dec cx
    cmp cx, 100
    jae u1

    ; draw bottom line:

    mov cx, 100+w  ; column
    mov dx, 20+h   ; row
    mov al, 15     ; white
u2:
    mov ah, 0ch    ; put pixel
    int 10h

    dec cx
    cmp cx, 100
    ja u2

    ; draw left line:

    mov cx, 100    ; column
    mov dx, 20+h   ; row
    mov al, 15     ; white
u3:
    mov ah, 0ch    ; put pixel
    int 10h

    dec dx
    cmp dx, 20
    ja u3


    ; draw right line:

    mov cx, 100+w  ; column
    mov dx, 20+h   ; row
    mov al, 15     ; white
u4:
    mov ah, 0ch    ; put pixel
    int 10h

    dec dx
    cmp dx, 20
    ja u4

    ;wait for keypress
    mov ah,00
    int 16h

    ; return to text mode:
    mov ah,00
    mov al,03 ;text mode 3
    int 10h

    ret

1 Ответ

1 голос
/ 18 июня 2020

Это похоже на домашнее задание, поэтому кода нет.

Насчет диагонали. По диагонали и строка, и столбец изменяются с каждым пикселем (то есть с каждой l oop итерацией). Так как вы go о l oop увеличивающем CX, вам также нужно увеличить DX (или уменьшить для диагонали справа-вверху влево-вниз). Можете ли вы продолжить из этого?


В общем, ваша переменная l oop не обязательно должна быть строкой или столбцом. Вы можете использовать регистр для подсчета пикселей (т.е. l oop итераций) и вычислять строку и столбец на основе этого. Если вам нужно больше регистров, есть SI и DI. Если вы это сделаете, вы сможете рисовать более одного пикселя за l oop итерацию. Но это вопрос стиля и эффективности.

...