装配EMU8086对角线

问题描述 投票:0回答:1

我需要在我的正方形上画一条对角线,从左边到右边,我已经有了正方形,所以我只需要对角线,我会留下我的正方形代码,这个问题还没有回答emu8086.code。

    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
assembly emu8086 square diagonal
1个回答
1
投票

这个好像是作业,所以没有代码。

关于对角线。在对角线上。行和列都随着像素的变化而变化。 (即每次循环迭代)。所以当你进行循环增加CX。你还必须增加DX 或减少为右上至左下对角线)。你能从这一点上进行跟进吗?


一般来说,你的循环变量不一定是行或列。你可以用一个寄存器来计算像素(即循环迭代),并在此基础上计算行和列。如果你需要更多的寄存器,还有SI和DI。如果你这样做,你可以在每次循环迭代中绘制多个像素。但这是风格和效率的问题。

© www.soinside.com 2019 - 2024. All rights reserved.