8086汇编tiny模式下的五角星程序

不晓得为啥我们学的汇编和别人家的汇编不一样,是link xxx /tiny的,直接出可运行的.com文件,所以网上很多五角星程序用不了。。。

没办法自己写了个交作业。

图形模式计算点坐标太难了,于是自己拿画图画了一个像素五角星,给它变成了行和列的相对坐标,存缓冲区里,用xlat查表来简化代码,免得都是重复画点代码又臭又长。。。

.model tiny
.code
.startup

		mov ah,0FH
		int 10H        ;保存原显示模式
		mov before,ax
		mov al,0DH
		mov ah,0
		int 10H        ;设置为彩色图形模式
		
		mov bh,0
		mov bl,0
		mov ah,0BH     ;黑色调色板
		int 10H
		
fillc:	mov dx,0C8H
		mov ah,0CH
		mov al,red     ;填充背景颜色为红色
folp:	dec dx
		mov cx,13FH
filp:	int 10H
		dec cx
		cmp cx,0
		jnl filp
		cmp dx,0
		jnz folp
		mov b,bh       ;保存好bh的值
		
		
		mov x,18H
		mov y,18H
		call draws     ;在给定位置绘制五角星
		mov x,10H
		mov y,6FH
		call draws
		mov x,30H
		mov y,58H
		call draws
		mov x,50H
		mov y,38H
		call draws
		mov x,60H
		mov y,0FH
		call draws
		
		mov ah,01H
		int 21H
		mov ax,before  ;恢复原显示方式后结束
		mov ah,0
		int 10H
		mov ah,4CH
		int 21H
.exit 0
before dw ?
b      db ?
x      dw ?
y      dw ?
red    equ 4
yellow equ 0EH
start  db 10,-1,-2,-3,-4,-5,-6,-13,-18,-15,-11,-9,-10,-11,-12,-13,-14         ;绘制五角星所需参数
fill   db 1,1,3,3,5,5,7,19,17,13,9,9,11,11,13,13,15
cnts   equ $-fill
starta db 9,-4,-7,-10
filla  db 3,5,9,11
cnta   equ $-filla
i      db ?

draws	proc
		mov dx,x           ;首先绘制外形
		mov cx,y
		mov i,0
dolp:	mov bx,offset start
		mov al,i
		xlat
		mov ah,0
		add cx,ax
		and cx,0FFH
		mov ah,0CH
		mov bx,offset fill
		mov al,i
		xlat
		mov bl,al
		mov al,yellow     ;填充星星颜色为黄色
dilp:	mov bh,b
		int 10H
		inc cx
		dec bl
		cmp bl,0
		jnz dilp
		inc dx
		mov al,i
		inc al
		mov i,al
		cmp al,cnts
		jnz dolp
		
		mov dx,x           ;在中间挖出一个三角形
		add dx,13
		mov cx,y
		mov i,0
aolp:	mov bx,offset starta
		mov al,i
		xlat
		mov ah,0
		add cx,ax
		and cx,0FFH
		mov ah,0CH
		mov bx,offset filla
		mov al,i
		xlat
		mov bl,al
		mov al,red        ;填充为背景色
ailp:	mov bh,b
		int 10H
		inc cx
		dec bl
		cmp bl,0
		jnz ailp
		inc dx
		mov al,i
		inc al
		mov i,al
		cmp al,cnta
		jnz aolp
		ret
draws   endp

end

这个程序画出来五角星是这样的:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值