组装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
这看起来像是作业,所以没有代码。
关于对角线。在对角线上,行和列都随着每个像素(即每次循环迭代)而变化。因此,随着循环增加 CX,您还必须增加 DX(或减少右上角到左下角的对角线)。你能跟进吗?
通常,您的循环变量不必是行或列。您可以使用寄存器来计算像素(即循环迭代),并根据它计算行和列。如果您需要更多寄存器,可以使用 SI 和 DI。如果这样做,您可以在每次循环迭代中绘制一个以上的像素。但这是风格和效率的问题。
我需要在我的正方形上从左到右画一条对角线我已经有了正方形所以我只需要对角线我会在下面留下我的正方形代码这个问题还没有回答至 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
这看起来像是作业,所以没有代码。
关于对角线。在对角线上,行和列都随着每个像素(即每次循环迭代)而变化。因此,随着循环增加 CX,您还必须增加 DX(或减少右上角到左下角的对角线)。你能跟进吗?
通常,您的循环变量不必是行或列。您可以使用寄存器来计算像素(即循环迭代),并根据它计算行和列。如果您需要更多寄存器,可以使用 SI 和 DI。如果这样做,您可以在每次循环迭代中绘制一个以上的像素。但这是风格和效率的问题。