虽然以前很少用汇编编写程序,但却感觉到了汇编的强大,以前有些8086的汇编基础,所以准备在8086的环境下试探着写个简单的字符型flappy bird。
写游戏首先得解决的问题就是输出问题,我所知道的方法有两种:一种直接向显存写数据,一种调用中断。在这里使用中断的办法,把输出写成一个函数:
首先调用10号中断2号子程序设置光标坐标:
mov ah,2
mov bh,0
mov dh,byte ptr ss:[bp+8] ;y
mov dl,byte ptr ss:[bp+10] ;x
int 10h ;set position
再调用int10 9号显示字符
mov ah,9
mov al,byte ptr ss:[bp+6];char
mov bl,byte ptr ss:[bp+4];color
mov bh,0
mov cx,ss:[bp+2];repeat
int 10h;draw char
其中颜色用一个字节表示,其定义如下:
twk equ 80h;闪烁
bred equ 40h;前景红色
bgreen equ 20h
bblue equ 10h
hlight equ 8h;高亮
fred equ 4h;背景红色
fgreen equ 2h
fblue equ 1h
在绘图之前还得清屏才行,笔者曾试图用int10h 3号中断清屏,但发现速度十分慢,于是采用填充空白的办法把整个屏幕填充掉。
接下来绘图就方便多了,绘制地板直接调用绘图函数就行,绘制水管的过程中需要进行比较,也是十分容易的。
能够绘图了,但怎么才能动起来呢?很简单,循环地执行 清屏-绘制-延时,问题来了,8086怎么延时呢?用中断1ah就能实现,以下引用的其他资料:
时钟服务