汇编源代码
;恢复cx
retn ;返回
@dispb: mov al,$shape ;显示方块子模块,al=方块形状标号
mov ah,cs:[bp+bkc] ;ah=方块颜色值
@disp: mov si,bp
shl si,2 ;si=方块形状标号*4(占4个字节)
push cx ;保存cx
mov cl,4 ;cl=方块数(4)
@nextb_:movzx di,cs:[si+bks] ;取方块描述
mov [di+bx],ax ;显示一个小方块
inc si ;si=下一个位置描述
loop @nextb_ ;继续画下一个小方块
pop cx ;恢复cx
retn ;返回
bkc db 2 ;方块颜色值
db 9,12,13,14, 11,10
db 9,9,9, 12,13
db 11,11,11, 10,10,10
db 2
bkv db 18 ;方块形状链表
db 7,10,11,4, 12,15
db 8,9,1, 2,3
db 13,14,5, 16,17,6
db 0 ;下面是方块形状描述
bks db 40*2,41*2,42*2,43*2 ; **** 0
db 1*2,40*2,41*2,42*2 ; * ** ** ** 基本形状*7
db 1*2, 2*2,40*2,41*2 ; *** ** ** ** 1-4
db 0*2, 1*2,41*2,42*2 ;
db 0*2, 1*2,40*2,41*2 ;
db 0*2,40*2,41*2,42*2 ; * *
db 2*2,40*2,41*2,42*2 ; *** *** 5-6
db 1*2,40*2,41*2,81*2 ; * * 扩展形状*12
db 40*2,41*2,42*2,81*2 ; ** *** **
db 1*2,41*2,42*2,81*2 ; * * * * * 7-9
db 0*2,40*2,41*2,81*2 ; ** **
db 1*2,40*2,41*2,80*2 ; * * 10-11
db 1*2,41*2,80*2,81*2 ; * **
db 40*2,41*2,42*2,82*2 ; * *** *
db 1*2, 2*2,41*2,81*2 ; ** * * 12-14
db 0*2, 1*2,41*2,81*2 ;* ** *
db 40*2,41*2,42*2,80*2 ;
* * *** *
db 1*2,41*2,81*2,82*2 ;* * * ** 15-17
db 2*2,42*2,82*2,122*2 ;* 18
msg1 db 9,9,'GAMEOVER',9,9,'$'
end start