鱼C论坛

 找回密码
 立即注册

15岁的小朋友

https://fishc.com.cn/?268867

汇编制作奥运五环效果

热度 140已有 4592 次阅读2014-5-31 12:00 |个人分类:汇编

data segment 

m dw ?

n db ? ;像素颜色值 

r dw 30 ;半径 

x1 dw 80 ;圆的圆心 

y1 dw 80 

x2 dw ? 

y2 dw ? 

x3 dw ? 

y3 dw ? 

x4 dw ? 

y4 dw ? 

x dw ? 

y dw ? 

d dw ? 

a dw ? 

b dw ? 

data ends 

 

code segment 

assume cs:code,ds:data 

main proc far 

start: mov ax,data 

mov ds,ax ;

mov si,0 

mov di,0 

mov si,x1 

mov x3,si 

mov si,y1 

mov y3,si 

mov si,0

call circul

main endp 

 

;*************五环绘制子程序***********

circul proc near 

push si 

mov ah,0 

mov al,0dh

int 10h 

;*************依次绘制正面五环***********

front: 

mov n,0eh;第一个环,黄色

mov x,0 

mov bx,r

mov y,bx 

mov si,x3 

mov x1,si 

mov si,y3 

mov y1,si 

call single_circle

 

mov n,0ah;第二个环,绿色

mov x,0 

mov bx,r 

mov y,bx 

mov si,x3 

mov x1,si 

mov si,y3 

mov y1,si 

add y1,bx 

add y1,bx 

shr bx,1 

add y1,bx 

call single_circle

 

mov n,04h;第三个环,红色

mov x,0 

mov bx,r 

mov y,bx 

mov si,x3 

mov x1,si 

mov si,y3 

mov y1,si 

add y1,bx 

add y1,bx 

add y1,bx 

add y1,bx 

add y1,bx 

call single_circle

 

mov n,09h;第四个环,蓝色

mov x,0 

mov bx,r 

mov y,bx 

mov si,x3 

mov x1,si 

mov si,y3 

mov y1,si 

add x1,bx 

add y1,bx 

shr bx,1 

shr bx,1 

add y1,bx 

call single_circle

 

mov n,08h; 第五个环,灰色

mov x,0 

mov bx,r 

mov y,bx 

mov si,x3 

mov x1,si 

mov si,y3 

mov y1,si 

add x1,bx 

add y1,bx 

add y1,bx 

add y1,bx 

shr bx,1 

add y1,bx 

shr bx,1 

add y1,bx

call single_circle

jmp back

 

;*********绘制背面面各环**********

back:

mov n,04h;第一个环,红色

mov x,0 

mov bx,r

mov y,bx 

mov si,x3 

mov x1,si 

mov si,y3 

mov y1,si 

call single_circle

 

mov n,08;第二个环,灰色

mov x,0 

mov bx,r 

mov y,bx 

mov si,x3 

mov x1,si 

mov si,y3 

mov y1,si 

add y1,bx 

add y1,bx 

shr bx,1 

add y1,bx 

call single_circle

 

mov n,09h;第三个环,蓝色

mov x,0 

mov bx,r 

mov y,bx 

mov si,x3 

mov x1,si 

mov si,y3 

mov y1,si 

add y1,bx 

add y1,bx 

add y1,bx 

add y1,bx 

add y1,bx 

call single_circle

 

mov n,0ah;第四个环,绿色

mov x,0 

mov bx,r 

mov y,bx 

mov si,x3 

mov x1,si 

mov si,y3 

mov y1,si 

add x1,bx 

add y1,bx 

shr bx,1 

shr bx,1 

add y1,bx 

call single_circle

 

mov n,0eh; 第五个环,黄色

mov x,0 

mov bx,r 

mov y,bx 

mov si,x3 

mov x1,si 

mov si,y3 

mov y1,si 

add x1,bx 

add y1,bx 

add y1,bx 

add y1,bx 

shr bx,1 

add y1,bx 

shr bx,1 

add y1,bx

call single_circle

pop si

call delay

jmp front

circul endp 

 

;*********逐步进给调整坐标,单环绘制**********

single_circle proc near 

mov si,1 

sub si,r 

mov d,si ;d=1-rx=0

lin3: mov si,x ;si=x

mov di,y ;di=y=r

add si,x1 

add di,y1 

mov dx,si ;dx=si+x1

mov cx,di ;cx=di+y1

mov si,x ;

mov di,y 

cmp si,di ;比较xy,x>y则八分之一圆弧绘制结束

jg lin 

call hua ;x<y

cmp d,0 ;

jge lin1 ;

mov si,2 

mov ax,0 

mov AX,SI 

imul x 

mov si,ax 

add si,3 

add d,si 

lin2: inc x 

jmp lin3 

lin1: mov si,2 

mov ax,0 

mov ax,si 

mov di,x 

sub di,y 

imul di 

mov si,ax 

add si,5 

add d,si 

dec y 

jmp lin2 

lin: 

ret 

single_circle endp 

 

huadian proc near ;写像素,al=颜色值,bh=页号

mov ah,0CH 

mov al,n 

mov bh,0 

int 10h 

ret 

huadian endp 

 

 

;*********八分法绘制圆环**********

hua proc near 

call huadian ;画第一点 (x,y) 

mov x2,dx 

mov y2,cx 

sub dx,x1 

sub cx,y1 

xchg dx,cx 

add dx,x1 

add cx,y1 

call huadian ;画对称点(y,x) 

 

mov dx,x2 

mov cx,y2 

sub cx,y1 

sub dx,x1 

xchg dx,cx 

mov m,dx 

add m,dx 

sub dx,m 

add dx,x1 

add cx,y1 

call huadian ;画点(-y,x) 

 

sub cx,y1 

mov m,cx 

add m,cx 

sub cx,m 

add cx,y1 

call huadian ;画点(-y,-x) 

 

mov dx,x2 

mov cx,y2 

sub dx,x1 

sub cx,y1 

mov m,cx 

add m,cx 

sub cx,m 

add cx,y1 

add dx,x1 

call huadian ;画点 (x,-y) 

 

sub dx,x1 

mov m,dx 

add m,dx 

sub dx,m 

add dx,x1 

call huadian ;画点(-x,-y) 

 

mov dx,x2 

mov cx,y2 

sub dx,x1 

sub cx,y1 

mov m,dx 

add m,dx 

sub dx,m 

add dx,x1 

add cx,y1 

call huadian ;画点 (-x,y) 

 

mov dx,x2 

mov cx,y2 

sub dx,x1 

sub cx,y1 

xchg dx,cx 

mov m,cx 

add m,cx 

sub cx,m 

add dx,x1 

add cx,y1 

call huadian ;画点 (y,-x) 

call delay 

ret 

hua endp 

 

;***********延时***************

delay proc near 

push dx 

push cx 

mov dx,2000 

d1: mov cx,3000

d2: loop d2 

dec dx 

jnz d1 

pop cx 

pop dx 

ret 

delay endp

 

code ends 

end start



2

路过
1

鸡蛋
119

鲜花
2

握手
2

雷人

刚表态过的朋友 (126 人)

发表评论 评论 (26 个评论)

回复 appletang 2015-3-22 17:00
不会,牛人,顶啊
回复 jejne 2015-3-30 18:59
加油
回复 l605361413 2015-4-12 14:03
服了
回复 l605361413 2015-4-12 14:03
服了
回复 Johnny_sunshine 2015-4-12 21:25
复制到masm里了,为什么提示说没有定义start?
回复 漫珠沙华 2015-5-21 15:55
   厉害!
12

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 11:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部