鱼C论坛

 找回密码
 立即注册

15岁的小朋友

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

汇编制作奥运五环效果

热度 140已有 4581 次阅读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 个评论)

回复 wbwchina 2014-10-22 18:24
牛人!不错!
回复 694861283 2014-11-9 11:27
求详解
回复 15岁的小朋友 2014-11-9 17:31
学完小甲鱼的汇编教程 70-80%都可以明白
回复 我是小鱼丝 2014-11-24 12:45
厉害啊
回复 零度C 2014-11-29 21:48
  
回复 有只小稚飞不起 2014-12-1 14:30
好长
回复 hekwkdsf 2014-12-2 12:34
我擦,高级语言我都不会
回复 黄志伟 2014-12-2 18:58
。。。学过汇编表示只会做加减乘除
回复 邓爷爷 2014-12-8 13:17
厉害啊,请问谁会用C语言编这个,要自己写的函数,不能调用API
回复 小甲鱼的二师兄 2014-12-29 19:58
粉一个,这个要发成帖子估计会加很多鱼币~~~
回复 小小虎 2014-12-29 22:11
初学者 看不懂 不过要给你鲜花
回复 善待自己 2015-1-12 14:07
编译的时候报错 error  A2006  : start 什么错误 楼主 帮忙查查
回复 嗨执著 2015-1-21 15:03
报错:undefined symbol :start  视频还没看完,有些还不理解,看完视频再过来看程序吧
回复 freeparty 2015-1-24 16:49
我来看看
回复 Htbs、 2015-1-25 10:33
   Good
回复 sdzczjf 2015-1-25 12:34
哎呀,看不懂
回复 Hmzjwr 2015-1-26 10:54
感兴趣
回复 KennyZ 2015-2-9 09:29
回复 ResidentScumfuk 2015-2-19 12:09
nb,我只会用ps
回复 nur11111 2015-2-27 19:25
牛啊
12下一页

facelist

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

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

GMT+8, 2024-5-4 03:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部