我无法使用8086装配直接内存访问的中点算法绘制圆圈

时间:2017-04-15 15:05:26

标签: assembly x86-16 tasm

我有一项任务,我应该让形状移动并用颜色改变形状。我一开始并没有成功地画出一个圆圈的八分圆。假设在DMA模式下使用TASM使用Intel 8086汇编语言。 (模式19) 我在想,如果我能完成一个圆圈,我可以动画它并改变形状。我无法弄清楚算法是错还是代码。

.model small
.stack 256

.code 
startaddr   dw  0a000h  ;start of video memory   
color   db  3 
xc dw  160
yc dw 100
r dw  50 ; radius
x dw 0 
y dw 50 ;radius
pk dw 1
temp dw 1

plot macro r1, r2, r3 ;x,y,color
    mov ax, r2
    mov bx, 320
    mul bx
    add ax, r1
    mov di, ax
    mov al, r3
    mov es:[di], al
endm

start:    
  mov ax, yc
  add y, ax
  mov ah,00    
  mov al, 13h    
  int 10h           ;switch to 320x200 mode  
  mov es, startaddr
  mov dx, y
  mov ax, xc
  add x, ax
  plot x, dx, color
  mov bx, r
  mov pk, bx
  sub pk, 1
  neg pk
  cmp pk, 0
  jge pk1

drawc:
    mov bx, x
    sub bx, xc
    mov ax, y
    sub ax, yc
    mov temp, ax
    cmp bx, temp
    jge keypress

    mov dx, y
    plot x, dx, color

peekay:
    cmp pk, 0
    jg pk1
    mov ax, x
    mov bx, 2
    mul bx
    add ax, pk
    mov pk, ax
    inc x ;x+1
    jmp drawc

pk1:
    dec y
    mov ax, x
    sub ax, y
    mov bx, 2
    mul bx
    add ax, pk
    mov pk, ax
    inc x
    jmp drawc

keypress:    
  mov ah,00    
  int 16h           ;await keypress  

  mov ah,00    
  mov al,03    
  int 10h   

  mov ah,4ch    
  mov al,00         ;terminate program    
  int 21h 
end start

Output

0 个答案:

没有答案