繁体   English   中英

组装emu8086对角线

[英]assembly emu8086 diagonal line

我需要在我的正方形上从左侧到右侧画一条对角线我已经是正方形所以我只需要对角线我将在下面留下我的正方形代码并且这个问题还没有回答到 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

这看起来像家庭作业,所以没有代码。

关于对角线。 在对角线上,行和列都随着每个像素而变化(即每次循环迭代)。 因此,当您 go 关于增加 CX 的循环时,您还必须增加 DX (或从右上到左下对角线减少)。 你能跟进吗?


通常,您的循环变量不必是行或列。 您可以使用寄存器来计算像素(即循环迭代),并据此计算行和列。 如果您需要更多寄存器,则有 SI 和 DI。 如果这样做,则每次循环迭代可以绘制多个像素。 但这是风格和效率的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM