- [kanwangxue] 感觉楼主很乖的。有点孩子气。呵呵。 01/27 08:58
- [kanwangxue] it界,进去干嘛啊,到时候自己牛比了,首先写一个自己的语言,自己用。进入IT界不就是随波做流吗/?他 01/27 08:57
- [kanwangxue] 哥们,不要为了赚钱而学计算机。 计算机是年轻时候干的, 30岁后可以开始想赚钱,年轻嘛,不要这么悲 01/27 08:50
- [游客] 怎么说? 01/26 16:22
- [游客] 你这不行啊,差远了! 01/10 22:29
- [chinatree] 谢谢你。相信你也会成功的。 01/09 14:22
- [landyking] 哥们儿,好久不见。相信你会成功的。 12/02 23:34
- [chinatree] 哇哇,被挖坟了。莫生气,只是感觉谦虚些好,就算你的程序真的是史上最强的,也别说出来嘛,自己偷着乐就行 11/20 00:41
- [xiaoyao2012] 你的程序和我的程序比较也不见得你的程序又节约空间,在某种意义上说你的程序用了没学的指令,所以不见得你 11/19 15:39
- [heliang6291] 一起加油啊 07/02 02:45
- [游客] 急需一个汇编程序大作业。。。。。。。。。。。。。。。。。。。??? 12/28 16:50
- [游客] 这么多人喜欢你,我嫉妒了。但你不可以喜欢那么多,允许你在我不需要你的时候帮别人。如果我需要立叫立到。 11/13 13:11
- [tily] 兄弟 我来看你啦 呵呵 最近可好呀 09/26 22:17
- [stqcw] 能加我qq吗?1270911891 我在做课程设计2的时候 遇到点问题 09/24 09:16
- [stqcw] 能加我qq吗?1270911891 我的环境还是有点问题。按下A的时候不能显示满屏的A 09/20 09:36
- [stqcw] 牛人 我在xp里面运行王爽 汇编第二版 p280的例子 按下esc键没反应 呀 怎样在虚拟机里配置一 09/17 15:18
- [landyking] 呵呵,交个朋友,共同学习. 09/08 00:03
- [luyingdzx] 能知道你的QQ吗?或者请加一下我的QQ271190440,可以吗 虽然在论坛能获得解答,但是有的问 08/07 21:32
[2011-09-19 10:06] 俄罗斯方块
有一个问题,有时按键取不到扫描码,帮帮我吧。
assume cs:code,ds:data,ss:stack,es:code
stack segment stack
db 128 dup (0)
stack ends
data segment
a dw offset a1,offset a2,offset a3,offset a4,offset a5,offset a6,offset a7,offset a8,offset a9,offset a10,offset a11,offset a12,offset a13,offset a14,offset a15,offset a16,offset a17,offset a18,offset a19,offset a20 ;直接定址
b db 9,8,7,4,2,0
db "// :: "
c db "WIN!$"
d DB " GAME OVER!",0ah,0dh
db " Input ESC quit!",0ah,0dh
db " Input any keys reset!$"
pp db 0;用来按位运算的,第0位为1时禁止左键,第1位为1时禁止下键,显示后就返回第2位为1时禁止右键,第3位为1时说明下键被按下,少延时一会,第4位为1时表示到屏幕底部了,该返回了
fen dw 400h;某一行全是方块就加1
yan db 1;颜色
data ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,128
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
call qingping
call yanse
call bian
s:in al,40h
mov ah,0
mov bx,20
div bl
mov bl,ah
add bx,bx
mov dx,224h
add fen,30h
push fen
pop es:[2];显示分数
sub fen,30h
call [bx];调用相对应的方块
mov dx,offset c ;准备退出
cmp fen,255;退出条件一,当满分就退出,并提示WIN
jz s1
cmp byte ptr es:[398],"@";退出条件二,当ES:[400]有@时就退出
jnz s
mov dx,offset d
s1:mov ah,9
int 21h
mov ah,7
int 21h
cmp ah,1
jnz start
xor ax,ax
mov es,ax
push es:[200]
pop es:[36]
push es:[202]
pop es:[38]
mov ax,4c00h
int 21h
bian:
xor di,di
mov al,"|"
mov ah,7
mov es:[di],ax
add di,40
i:mov es:[di],ax
add di,80
cmp di,3960
jnz i
ret
panduan:push ax;判断能否得分
push cx
push di
mov di,202
mov cx,24
uuu:push cx
mov cx,80
u:cmp byte ptr es:[di],"@"
jnz uu
add di,2
loop u
inc fen
push di
uuuu:mov al,es:[di-160] ;得分就把当前行的上方的方块复制到下一行
mov es:[di],al
sub di,2
cmp di,318;第0和第1行不复制
jnz uuuu
pop di;接着往下复制
uu:pop cx
add di,80
loop uuu
xor di,di
call bian
pop di
pop cx
pop ax
ret
hanglie:cmp dh,24;将DX转换成DI,行数为24就设置子程序返回条件
jb h_1
or pp,8
cmp dl,20
ja h_h
mov dl,20
h_h:cmp dl,59
jb h_1
mov dl,59
h_1:mov bp,sp
mov dx,[bp+2]
push ax
mov al,160
mul dh
mov di,ax
mov al,2
mul dl
add di,ax
pop ax
hr:ret 2
zuoyou:mov cx,0
rrr:in al,60h
cmp al,0
jnz rere
loop rrr
rere:cmp al,50h
jnz a1_1
or pp,10h
a1_1:cmp al,4bh;判断左键是否被按下
jnz you
test pp,1;判断周围是否有方块
jnz you
dec dl
jmp reet
you:cmp al,4dh
jnz reet
test pp,4
jnz reet
inc dl
reet:ret
yanshi:push ax;延时,根据是否按下键决定延时多久
push di
push cx
test pp,10h
jz yy
mov ax,3000
jmp y
yy:mov ax,20000
y:push ax
mov cx,6
mov di,120
mov si,offset b
y1:mov al,[si]
out 70h,al
in al,71h
mov ah,al
shr ah,1
shr ah,1
shr ah,1
shr ah,1
and al,15
add ax,3030h
mov es:[di],ah
mov byte ptr es:[di+1],2
mov es:[di+2],al
mov byte ptr es:[di+3],2
mov al,[si+6]
mov es:[di+4],al
mov byte ptr es:[di+5],4
add di,6
inc si
loop y1
pop ax
sub ax,1
jnz y
pop cx
pop di
pop ax
ret
yanse:push ax;改变背景色
xor di,di
push di
inc yan
mov al,yan
mov di,1
an:mov es:[di],al
add di,2
cmp di,4001
jnz an
pop di
pop ax
ret
qingping:push ax;改变背景色
push di
xor di,di
an1:mov byte ptr es:[di]," "
add di,2
cmp di,4000
jnz an1
pop di
pop ax
ret
a1:push dx
add dh,3;因为是根据最上方的那个方块位置来画整个方块的,加上3表示最下的那行
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di+160],"@" ;@
mov byte ptr es:[di+320],"@" ;@
mov byte ptr es:[di+480],"@" ;@
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z_1
or pp,1
z_1:cmp byte ptr es:[di+158],"@"
jnz z_2
or pp,1
z_2:cmp byte ptr es:[di+318],"@"
jnz z_3
or pp,1
z_3:cmp byte ptr es:[di+478],"@"
jnz x_1
or pp,1
x_1:cmp byte ptr es:[di+640],"@";判断下方
jnz y_1
or pp,2
y_1:cmp byte ptr es:[di+2],"@";判断右方
jnz y_2
or pp,4
y_2:cmp byte ptr es:[di+162],"@"
jnz y_3
or pp,4
y_3:cmp byte ptr es:[di+322],"@"
jnz y_4
or pp,4
y_4:CMP byte ptr es:[di+482],"@"
jnz y_5
or pp,4
y_5:test pp,2;结果为0时表示下面没有方块
jnz a1r
test pp,8;结果为0时表示没有到底
jnz a1r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a1_2
call yanse
a1_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di+320]," "
mov byte ptr es:[di+480]," "
inc dh
jmp a1
a1r:call panduan
ret
a2:mov pp,0
push dx
call hanglie
mov byte ptr es:[di],"@" ;@@@@
mov byte ptr es:[di+2],"@"
mov byte ptr es:[di+4],"@"
mov byte ptr es:[di+6],"@"
cmp byte ptr es:[di-2],"@"
jnz x2_1
or pp,1
x2_1:cmp byte ptr es:[di+160],"@"
jnz x2_2
or pp,2
x2_2:cmp byte ptr es:[di+162],"@"
jnz x2_3
or pp,2
x2_3:cmp byte ptr es:[di+164],"@"
jnz x2_4
or pp,2
x2_4:cmp byte ptr es:[di+166],"@"
jnz y2_1
or pp,2
y2_1:CMP byte ptr es:[di+482],"@"
jnz y2_2
or pp,4
y2_2:test pp,2
jnz a2r
test pp,8
jnz a2r
call zuoyou
cmp al,3bh
jnz a2_2
call yanse
a2_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+4]," "
mov byte ptr es:[di+6]," "
inc dh
jmp a2
a2r:call panduan
ret
a3:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@@
mov byte ptr es:[di+2],"@" ;@@
mov byte ptr es:[di+160],"@"
mov byte ptr es:[di+162],"@"
cmp byte ptr es:[di-2],"@"
jnz z3_1
or pp,1
z3_1:cmp byte ptr es:[di+158],"@"
jnz x3_1
or pp,1
x3_1:cmp byte ptr es:[di+320],"@"
jnz x3_2
or pp,2
x3_2:cmp byte ptr es:[di+322],"@"
jnz y3_1
or pp,2
y3_1:cmp byte ptr es:[di+4],"@"
jnz y3_2
or pp,4
y3_2:cmp byte ptr es:[di+164],"@"
jnz y3_5
or pp,4
y3_5:test pp,2
jnz a3r
test pp,8
jnz a3r
call zuoyou
cmp al,3bh
jnz a3_2
call yanse
a3_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di+162]," "
inc dh
jmp a3
a3r:call panduan
ret
a4:push dx
add dh,2
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @
mov byte ptr es:[di+158],"@" ; @@
mov byte ptr es:[di+160],"@" ; @
mov byte ptr es:[di+318],"@"
cmp byte ptr es:[di-2],"@"
jnz z4_1
or pp,1
z4_1:cmp byte ptr es:[di+156],"@"
jnz z4_2
or pp,1
z4_2:cmp byte ptr es:[di+316],"@"
jnz x4_1
or pp,1
x4_1:cmp byte ptr es:[di+478],"@"
jnz x4_2
or pp,2
x4_2:cmp byte ptr es:[di+320],"@"
jnz y4_1
or pp,6
y4_1:cmp byte ptr es:[di+162],"@"
jnz y4_3
or pp,4
y4_3:cmp byte ptr es:[di+2],"@"
jnz y4_4
or pp,4
y4_4:test pp,2
jnz a4r
test pp,8
jnz a4r
call zuoyou
cmp al,3bh
jnz a4_2
call yanse
a4_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+158]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di+318]," "
inc dh
jmp a4
a4r:call panduan
ret
a5:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@@
mov byte ptr es:[di+2],"@" ; @@
mov byte ptr es:[di+162],"@"
mov byte ptr es:[di+164],"@"
cmp byte ptr es:[di-2],"@"
jnz z5_1
or pp,1
z5_1:cmp byte ptr es:[di+160],"@"
jnz x5_1
or pp,3
x5_1:cmp byte ptr es:[di+322],"@"
jnz x5_2
or pp,2
x5_2:cmp byte ptr es:[di+166],"@"
jnz y5_2
or pp,4
y5_2:cmp byte ptr es:[di+4],"@"
jnz y5_5
or pp,4
y5_5:test pp,2
jnz a5r
test pp,8
jnz a5r
call zuoyou
cmp al,3bh
jnz a5_2
call yanse
a5_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+162]," "
mov byte ptr es:[di+164]," "
inc dh
jmp a5
a5r:call panduan
ret
a6:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @
mov byte ptr es:[di+156],"@" ;@@@
mov byte ptr es:[di+158],"@"
mov byte ptr es:[di+160],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z6_1
or pp,1
z6_1:cmp byte ptr es:[di+154],"@"
jnz x6_1
or pp,1
x6_1:cmp byte ptr es:[di+316],"@";判断下方
jnz x6_2
or pp,2
x6_2:cmp byte ptr es:[di+318],"@";判断下方
jnz x6_3
or pp,2
x6_3:cmp byte ptr es:[di+320],"@";判断下方
jnz y6_1
or pp,2
y6_1:cmp byte ptr es:[di+2],"@";判断右方
jnz y6_2
or pp,4
y6_2:cmp byte ptr es:[di+162],"@"
jnz y6_5
or pp,4
y6_5:test pp,2;结果为0时表示下面没有方块
jnz a6r
test pp,8;结果为0时表示没有到底
jnz a6r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a6_2
call yanse
a6_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+156]," "
mov byte ptr es:[di+158]," "
mov byte ptr es:[di+160]," "
inc dh
jmp a6
a6r:call panduan
ret
a7:push dx
add dh,2
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @@
mov byte ptr es:[di+2],"@" ; @
mov byte ptr es:[di+162],"@" ; @
mov byte ptr es:[di+322],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z7_1
or pp,1
z7_1:cmp byte ptr es:[di+160],"@"
jnz z7_2
or pp,3
z7_2:cmp byte ptr es:[di+320],"@"
jnz x7_1
or pp,1
x7_1:cmp byte ptr es:[di+482],"@";判断下方
jnz y7_1
or pp,2
y7_1:cmp byte ptr es:[di+324],"@";判断右方
jnz y7_2
or pp,4
y7_2:cmp byte ptr es:[di+164],"@";判断右方
jnz y7_3
or pp,4
y7_3:cmp byte ptr es:[di+4],"@"
jnz y7_5
or pp,4
y7_5:test pp,2;结果为0时表示下面没有方块
jnz a7r
test pp,8;结果为0时表示没有到底
jnz a7r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a7_2
call yanse
a7_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+162]," "
mov byte ptr es:[di+322]," "
inc dh
jmp a7
a7r:call panduan
ret
a8:push dx
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@@@
mov byte ptr es:[di-156],"@" ;@
mov byte ptr es:[di-158],"@"
mov byte ptr es:[di-160],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z8_1
or pp,1
z8_1:cmp byte ptr es:[di-162],"@"
jnz x8_1
or pp,1
x8_1:cmp byte ptr es:[di+160],"@"
jnz x8_2
or pp,2
x8_2:cmp byte ptr es:[di+2],"@"
jnz x8_3
or pp,6
x8_3:cmp byte ptr es:[di+4],"@"
jnz y8_1
or pp,2
y8_1:cmp byte ptr es:[di-154],"@";判断右方
jnz y8_5
or pp,4
y8_5:test pp,2;结果为0时表示下面没有方块
jnz a8r
test pp,8;结果为0时表示没有到底
jnz a8r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a8_2
call yanse
a8_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di-156]," "
mov byte ptr es:[di-158]," "
mov byte ptr es:[di-160]," "
inc dh
jmp a8
a8r:call panduan
ret
a9:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di-160],"@" ;@
mov byte ptr es:[di+160],"@" ;@@
mov byte ptr es:[di+162],"@"
cmp byte ptr es:[di-162],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z9_1
or pp,1
z9_1:cmp byte ptr es:[di-2],"@"
jnz z9_2
or pp,1
z9_2:cmp byte ptr es:[di+158],"@"
jnz x9_1
or pp,1
x9_1:cmp byte ptr es:[di+320],"@";判断下方
jnz x9_2
or pp,2
x9_2:cmp byte ptr es:[di+322],"@"
jnz y9_1
or pp,2
y9_1:cmp byte ptr es:[di+2],"@";判断右方
jnz y9_2
or pp,4
y9_2:cmp byte ptr es:[di+164],"@"
jnz y9_3
or pp,4
y9_3:cmp byte ptr es:[di-158],"@"
jnz y9_5
or pp,4
y9_5:test pp,2;结果为0时表示下面没有方块
jnz a9r
test pp,8;结果为0时表示没有到底
jnz a9r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a9_2
call yanse
a9_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di-160]," "
mov byte ptr es:[di+162]," "
inc dh
jmp a9
a9r:call panduan
ret
a10:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di-160],"@" ;@@
mov byte ptr es:[di+2],"@" ; @
mov byte ptr es:[di+162],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z10_1
or pp,1
z10_1:cmp byte ptr es:[di-162],"@"
jnz z10_2
or pp,1
z10_2:cmp byte ptr es:[di+160],"@"
jnz x10_1
or pp,3
x10_1:cmp byte ptr es:[di+322],"@";判断下方
jnz y10_1
or pp,2
y10_1:cmp byte ptr es:[di+164],"@";判断右方
jnz y10_2
or pp,4
y10_2:cmp byte ptr es:[di+4],"@"
jnz y10_3
or pp,4
y10_3:cmp byte ptr es:[di-158],"@"
jnz y10_5
or pp,4
y10_5:test pp,2;结果为0时表示下面没有方块
jnz a10r
test pp,8;结果为0时表示没有到底
jnz a10r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a10_2
call yanse
a10_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di-160]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+162]," "
inc dh
jmp a10
a10r:call panduan
ret
a11:push dx
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @@
mov byte ptr es:[di+2],"@" ;@@
mov byte ptr es:[di-156],"@"
mov byte ptr es:[di-158],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z11_1
or pp,1
z11_1:cmp byte ptr es:[di-160],"@"
jnz x11_2
or pp,1
x11_2:cmp byte ptr es:[di+160],"@"
jnz x11_1
or pp,2
x11_1:cmp byte ptr es:[di+162],"@";判断下方
jnz y11_1
or pp,2
y11_1:cmp byte ptr es:[di+4],"@";判断右方
jnz y11_2
or pp,6
y11_2:cmp byte ptr es:[di-154],"@"
jnz y11_5
or pp,4
y11_5:test pp,2;结果为0时表示下面没有方块
jnz a11r
test pp,8;结果为0时表示没有到底
jnz a11r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a11_2
call yanse
a11_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di-158]," "
mov byte ptr es:[di-156]," "
inc dh
jmp a11
a11r:call panduan
ret
a12:push dx
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @
mov byte ptr es:[di-158],"@" ;@@@
mov byte ptr es:[di+2],"@"
mov byte ptr es:[di+4],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z12_1
or pp,1
z12_1:cmp byte ptr es:[di-160],"@"
jnz x12_1
or pp,1
x12_1:cmp byte ptr es:[di+160],"@"
jnz x12_2
or pp,2
x12_2:cmp byte ptr es:[di+162],"@"
jnz x12_3
or pp,2
x12_3:cmp byte ptr es:[di+164],"@";判断下方
jnz y12_1
or pp,2
y12_1:cmp byte ptr es:[di+6],"@";判断右方
jnz y12_2
or pp,4
y12_2:cmp byte ptr es:[di+156],"@"
jnz y12_5
or pp,4
y12_5:test pp,2;结果为0时表示下面没有方块
jnz a12r
test pp,8;结果为0时表示没有到底
jnz a12r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a12_2
call yanse
a12_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+4]," "
mov byte ptr es:[di-158]," "
inc dh
jmp a12
a12r:call panduan
ret
a13:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @
mov byte ptr es:[di+2],"@" ;@@
mov byte ptr es:[di-158],"@" ; @
mov byte ptr es:[di+162],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z13_1
or pp,1
z13_1:cmp byte ptr es:[di+160],"@"
jnz z13_2
or pp,3
z13_2:cmp byte ptr es:[di-160],"@"
jnz x13_1
or pp,1
x13_1:cmp byte ptr es:[di+322],"@";判断下方
jnz y13_1
or pp,2
y13_1:cmp byte ptr es:[di+164],"@";判断右方
jnz y13_2
or pp,4
y13_2:cmp byte ptr es:[di+4],"@"
jnz y13_3
or pp,4
y13_3:cmp byte ptr es:[di-156],"@"
jnz y13_5
or pp,4
y13_5:test pp,2;结果为0时表示下面没有方块
jnz a13r
test pp,8;结果为0时表示没有到底
jnz a13r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a13_2
call yanse
a13_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+162]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di-158]," "
inc dh
jmp a13
a13r:call panduan
ret
a14:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @@@
mov byte ptr es:[di+2],"@" ; @
mov byte ptr es:[di+4],"@"
mov byte ptr es:[di+162],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z14_1
or pp,1
z14_1:cmp byte ptr es:[di+160],"@"
jnz x14_1
or pp,3
x14_1:cmp byte ptr es:[di+322],"@"
jnz x14_2
or pp,2
x14_2:cmp byte ptr es:[di+164],"@";判断下方
jnz y14_1
or pp,6
y14_1:cmp byte ptr es:[di+6],"@";判断右方
jnz y14_5
or pp,4
y14_5:test pp,2;结果为0时表示下面没有方块
jnz a14r
test pp,8;结果为0时表示没有到底
jnz a14r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a14_2
call yanse
a14_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+4]," "
mov byte ptr es:[di+162]," "
inc dh
jmp a14
a14r:call panduan
ret
a15:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di+160],"@" ;@@
mov byte ptr es:[di-160],"@" ;@
mov byte ptr es:[di+2],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z15_1
or pp,1
z15_1:cmp byte ptr es:[di+158],"@"
jnz z15_2
or pp,1
z15_2:cmp byte ptr es:[di-162],"@"
jnz x15_1
or pp,1
x15_1:cmp byte ptr es:[di+320],"@"
jnz x15_2
or pp,2
x15_2:cmp byte ptr es:[di+162],"@";判断下方
jnz y15_1
or pp,6
y15_1:cmp byte ptr es:[di+4],"@";判断右方
jnz y15_2
or pp,4
y15_2:cmp byte ptr es:[di-158],"@"
jnz y15_5
or pp,4
y15_5:test pp,2;结果为0时表示下面没有方块
jnz a15r
test pp,8;结果为0时表示没有到底
jnz a15r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a15_2
call yanse
a15_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di-160]," "
mov byte ptr es:[di+2]," "
inc dh
jmp a15
a15r:call panduan
ret
a16:push dx
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di-160],"@" ;@@@
mov byte ptr es:[di+2],"@"
mov byte ptr es:[di+4],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z16_1
or pp,1
z16_1:cmp byte ptr es:[di-162],"@"
jnz x16_1
or pp,1
x16_1:cmp byte ptr es:[di+160],"@"
jnz x16_2
or pp,2
x16_2:cmp byte ptr es:[di+162],"@"
jnz x16_3
or pp,2
x16_3:cmp byte ptr es:[di+164],"@";判断下方
jnz y16_1
or pp,2
y16_1:cmp byte ptr es:[di+6],"@";判断右方
jnz y16_2
or pp,4
y16_2:cmp byte ptr es:[di-158],"@"
jnz y16_5
or pp,4
y16_5:test pp,2;结果为0时表示下面没有方块
jnz a16r
test pp,8;结果为0时表示没有到底
jnz a16r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a16_2
call yanse
a16_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di-160]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+4]," "
inc dh
jmp a16
a16r:call panduan
ret
a17:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di+158],"@" ;@<-di
mov byte ptr es:[di+160],"@" ;@@
mov byte ptr es:[di-160],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z17_1
or pp,1
z17_1:cmp byte ptr es:[di-162],"@"
jnz z17_2
or pp,1
z17_2:cmp byte ptr es:[di+156],"@"
jnz x17_2
or pp,1
x17_2:cmp byte ptr es:[di+318],"@"
jnz x17_1
or pp,2
x17_1:cmp byte ptr es:[di+320],"@";判断下方
jnz y17_1
or pp,2
y17_1:cmp byte ptr es:[di+162],"@";判断右方
jnz y17_2
or pp,4
y17_2:cmp byte ptr es:[di+2],"@"
jnz y17_3
or pp,4
y17_3:cmp byte ptr es:[di-158],"@"
jnz y17_5
or pp,4
y17_5:test pp,2;结果为0时表示下面没有方块
jnz a17r
test pp,8;结果为0时表示没有到底
jnz a17r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a17_2
call yanse
a17_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+158]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di-160]," "
inc dh
jmp a17
a17r:call panduan
ret
a18:push dx
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@@@
mov byte ptr es:[di+2],"@" ; @
mov byte ptr es:[di+4],"@"
mov byte ptr es:[di+164],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z18_1
or pp,1
z18_1:cmp byte ptr es:[di+162],"@"
jnz x18_2
or pp,3
x18_2:cmp byte ptr es:[di+324],"@"
jnz x18_1
or pp,2
x18_1:cmp byte ptr es:[di+160],"@";判断下方
jnz y18_1
or pp,4
y18_1:cmp byte ptr es:[di+166],"@";判断右方
jnz y18_2
or pp,4
y18_2:cmp byte ptr es:[di+6],"@"
jnz y18_5
or pp,4
y18_5:test pp,2;结果为0时表示下面没有方块
jnz a18r
test pp,8;结果为0时表示没有到底
jnz a18r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a18_2
call yanse
a18_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+4]," "
mov byte ptr es:[di+164]," "
inc dh
jmp a18
a18r:call panduan
ret
a19:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@@
mov byte ptr es:[di+160],"@" ;@
mov byte ptr es:[di-160],"@" ;@
mov byte ptr es:[di-158],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z19_1
or pp,1
z19_1:cmp byte ptr es:[di-162],"@"
jnz z19_2
or pp,1
z19_2:cmp byte ptr es:[di+158],"@"
jnz x19_1
or pp,1
x19_1:cmp byte ptr es:[di+320],"@";判断下方
jnz y19_1
or pp,2
y19_1:cmp byte ptr es:[di+2],"@";判断右方
jnz y19_2
or pp,6
y19_2:cmp byte ptr es:[di+162],"@"
jnz y19_3
or pp,4
y19_3:cmp byte ptr es:[di-156],"@"
jnz y19_5
or pp,4
y19_5:test pp,2;结果为0时表示下面没有方块
jnz a19r
test pp,8;结果为0时表示没有到底
jnz a19r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a19_2
call yanse
a19_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di-160]," "
mov byte ptr es:[di-158]," "
inc dh
jmp a19
a19r:call panduan
ret
a20:ret
code ends
end start
其他还有意些小问题,我慢慢改。
assume cs:code,ds:data,ss:stack,es:code
stack segment stack
db 128 dup (0)
stack ends
data segment
a dw offset a1,offset a2,offset a3,offset a4,offset a5,offset a6,offset a7,offset a8,offset a9,offset a10,offset a11,offset a12,offset a13,offset a14,offset a15,offset a16,offset a17,offset a18,offset a19,offset a20 ;直接定址
b db 9,8,7,4,2,0
db "// :: "
c db "WIN!$"
d DB " GAME OVER!",0ah,0dh
db " Input ESC quit!",0ah,0dh
db " Input any keys reset!$"
pp db 0;用来按位运算的,第0位为1时禁止左键,第1位为1时禁止下键,显示后就返回第2位为1时禁止右键,第3位为1时说明下键被按下,少延时一会,第4位为1时表示到屏幕底部了,该返回了
fen dw 400h;某一行全是方块就加1
yan db 1;颜色
data ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,128
mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
call qingping
call yanse
call bian
s:in al,40h
mov ah,0
mov bx,20
div bl
mov bl,ah
add bx,bx
mov dx,224h
add fen,30h
push fen
pop es:[2];显示分数
sub fen,30h
call [bx];调用相对应的方块
mov dx,offset c ;准备退出
cmp fen,255;退出条件一,当满分就退出,并提示WIN
jz s1
cmp byte ptr es:[398],"@";退出条件二,当ES:[400]有@时就退出
jnz s
mov dx,offset d
s1:mov ah,9
int 21h
mov ah,7
int 21h
cmp ah,1
jnz start
xor ax,ax
mov es,ax
push es:[200]
pop es:[36]
push es:[202]
pop es:[38]
mov ax,4c00h
int 21h
bian:
xor di,di
mov al,"|"
mov ah,7
mov es:[di],ax
add di,40
i:mov es:[di],ax
add di,80
cmp di,3960
jnz i
ret
panduan:push ax;判断能否得分
push cx
push di
mov di,202
mov cx,24
uuu:push cx
mov cx,80
u:cmp byte ptr es:[di],"@"
jnz uu
add di,2
loop u
inc fen
push di
uuuu:mov al,es:[di-160] ;得分就把当前行的上方的方块复制到下一行
mov es:[di],al
sub di,2
cmp di,318;第0和第1行不复制
jnz uuuu
pop di;接着往下复制
uu:pop cx
add di,80
loop uuu
xor di,di
call bian
pop di
pop cx
pop ax
ret
hanglie:cmp dh,24;将DX转换成DI,行数为24就设置子程序返回条件
jb h_1
or pp,8
cmp dl,20
ja h_h
mov dl,20
h_h:cmp dl,59
jb h_1
mov dl,59
h_1:mov bp,sp
mov dx,[bp+2]
push ax
mov al,160
mul dh
mov di,ax
mov al,2
mul dl
add di,ax
pop ax
hr:ret 2
zuoyou:mov cx,0
rrr:in al,60h
cmp al,0
jnz rere
loop rrr
rere:cmp al,50h
jnz a1_1
or pp,10h
a1_1:cmp al,4bh;判断左键是否被按下
jnz you
test pp,1;判断周围是否有方块
jnz you
dec dl
jmp reet
you:cmp al,4dh
jnz reet
test pp,4
jnz reet
inc dl
reet:ret
yanshi:push ax;延时,根据是否按下键决定延时多久
push di
push cx
test pp,10h
jz yy
mov ax,3000
jmp y
yy:mov ax,20000
y:push ax
mov cx,6
mov di,120
mov si,offset b
y1:mov al,[si]
out 70h,al
in al,71h
mov ah,al
shr ah,1
shr ah,1
shr ah,1
shr ah,1
and al,15
add ax,3030h
mov es:[di],ah
mov byte ptr es:[di+1],2
mov es:[di+2],al
mov byte ptr es:[di+3],2
mov al,[si+6]
mov es:[di+4],al
mov byte ptr es:[di+5],4
add di,6
inc si
loop y1
pop ax
sub ax,1
jnz y
pop cx
pop di
pop ax
ret
yanse:push ax;改变背景色
xor di,di
push di
inc yan
mov al,yan
mov di,1
an:mov es:[di],al
add di,2
cmp di,4001
jnz an
pop di
pop ax
ret
qingping:push ax;改变背景色
push di
xor di,di
an1:mov byte ptr es:[di]," "
add di,2
cmp di,4000
jnz an1
pop di
pop ax
ret
a1:push dx
add dh,3;因为是根据最上方的那个方块位置来画整个方块的,加上3表示最下的那行
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di+160],"@" ;@
mov byte ptr es:[di+320],"@" ;@
mov byte ptr es:[di+480],"@" ;@
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z_1
or pp,1
z_1:cmp byte ptr es:[di+158],"@"
jnz z_2
or pp,1
z_2:cmp byte ptr es:[di+318],"@"
jnz z_3
or pp,1
z_3:cmp byte ptr es:[di+478],"@"
jnz x_1
or pp,1
x_1:cmp byte ptr es:[di+640],"@";判断下方
jnz y_1
or pp,2
y_1:cmp byte ptr es:[di+2],"@";判断右方
jnz y_2
or pp,4
y_2:cmp byte ptr es:[di+162],"@"
jnz y_3
or pp,4
y_3:cmp byte ptr es:[di+322],"@"
jnz y_4
or pp,4
y_4:CMP byte ptr es:[di+482],"@"
jnz y_5
or pp,4
y_5:test pp,2;结果为0时表示下面没有方块
jnz a1r
test pp,8;结果为0时表示没有到底
jnz a1r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a1_2
call yanse
a1_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di+320]," "
mov byte ptr es:[di+480]," "
inc dh
jmp a1
a1r:call panduan
ret
a2:mov pp,0
push dx
call hanglie
mov byte ptr es:[di],"@" ;@@@@
mov byte ptr es:[di+2],"@"
mov byte ptr es:[di+4],"@"
mov byte ptr es:[di+6],"@"
cmp byte ptr es:[di-2],"@"
jnz x2_1
or pp,1
x2_1:cmp byte ptr es:[di+160],"@"
jnz x2_2
or pp,2
x2_2:cmp byte ptr es:[di+162],"@"
jnz x2_3
or pp,2
x2_3:cmp byte ptr es:[di+164],"@"
jnz x2_4
or pp,2
x2_4:cmp byte ptr es:[di+166],"@"
jnz y2_1
or pp,2
y2_1:CMP byte ptr es:[di+482],"@"
jnz y2_2
or pp,4
y2_2:test pp,2
jnz a2r
test pp,8
jnz a2r
call zuoyou
cmp al,3bh
jnz a2_2
call yanse
a2_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+4]," "
mov byte ptr es:[di+6]," "
inc dh
jmp a2
a2r:call panduan
ret
a3:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@@
mov byte ptr es:[di+2],"@" ;@@
mov byte ptr es:[di+160],"@"
mov byte ptr es:[di+162],"@"
cmp byte ptr es:[di-2],"@"
jnz z3_1
or pp,1
z3_1:cmp byte ptr es:[di+158],"@"
jnz x3_1
or pp,1
x3_1:cmp byte ptr es:[di+320],"@"
jnz x3_2
or pp,2
x3_2:cmp byte ptr es:[di+322],"@"
jnz y3_1
or pp,2
y3_1:cmp byte ptr es:[di+4],"@"
jnz y3_2
or pp,4
y3_2:cmp byte ptr es:[di+164],"@"
jnz y3_5
or pp,4
y3_5:test pp,2
jnz a3r
test pp,8
jnz a3r
call zuoyou
cmp al,3bh
jnz a3_2
call yanse
a3_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di+162]," "
inc dh
jmp a3
a3r:call panduan
ret
a4:push dx
add dh,2
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @
mov byte ptr es:[di+158],"@" ; @@
mov byte ptr es:[di+160],"@" ; @
mov byte ptr es:[di+318],"@"
cmp byte ptr es:[di-2],"@"
jnz z4_1
or pp,1
z4_1:cmp byte ptr es:[di+156],"@"
jnz z4_2
or pp,1
z4_2:cmp byte ptr es:[di+316],"@"
jnz x4_1
or pp,1
x4_1:cmp byte ptr es:[di+478],"@"
jnz x4_2
or pp,2
x4_2:cmp byte ptr es:[di+320],"@"
jnz y4_1
or pp,6
y4_1:cmp byte ptr es:[di+162],"@"
jnz y4_3
or pp,4
y4_3:cmp byte ptr es:[di+2],"@"
jnz y4_4
or pp,4
y4_4:test pp,2
jnz a4r
test pp,8
jnz a4r
call zuoyou
cmp al,3bh
jnz a4_2
call yanse
a4_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+158]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di+318]," "
inc dh
jmp a4
a4r:call panduan
ret
a5:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@@
mov byte ptr es:[di+2],"@" ; @@
mov byte ptr es:[di+162],"@"
mov byte ptr es:[di+164],"@"
cmp byte ptr es:[di-2],"@"
jnz z5_1
or pp,1
z5_1:cmp byte ptr es:[di+160],"@"
jnz x5_1
or pp,3
x5_1:cmp byte ptr es:[di+322],"@"
jnz x5_2
or pp,2
x5_2:cmp byte ptr es:[di+166],"@"
jnz y5_2
or pp,4
y5_2:cmp byte ptr es:[di+4],"@"
jnz y5_5
or pp,4
y5_5:test pp,2
jnz a5r
test pp,8
jnz a5r
call zuoyou
cmp al,3bh
jnz a5_2
call yanse
a5_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+162]," "
mov byte ptr es:[di+164]," "
inc dh
jmp a5
a5r:call panduan
ret
a6:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @
mov byte ptr es:[di+156],"@" ;@@@
mov byte ptr es:[di+158],"@"
mov byte ptr es:[di+160],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z6_1
or pp,1
z6_1:cmp byte ptr es:[di+154],"@"
jnz x6_1
or pp,1
x6_1:cmp byte ptr es:[di+316],"@";判断下方
jnz x6_2
or pp,2
x6_2:cmp byte ptr es:[di+318],"@";判断下方
jnz x6_3
or pp,2
x6_3:cmp byte ptr es:[di+320],"@";判断下方
jnz y6_1
or pp,2
y6_1:cmp byte ptr es:[di+2],"@";判断右方
jnz y6_2
or pp,4
y6_2:cmp byte ptr es:[di+162],"@"
jnz y6_5
or pp,4
y6_5:test pp,2;结果为0时表示下面没有方块
jnz a6r
test pp,8;结果为0时表示没有到底
jnz a6r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a6_2
call yanse
a6_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+156]," "
mov byte ptr es:[di+158]," "
mov byte ptr es:[di+160]," "
inc dh
jmp a6
a6r:call panduan
ret
a7:push dx
add dh,2
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @@
mov byte ptr es:[di+2],"@" ; @
mov byte ptr es:[di+162],"@" ; @
mov byte ptr es:[di+322],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z7_1
or pp,1
z7_1:cmp byte ptr es:[di+160],"@"
jnz z7_2
or pp,3
z7_2:cmp byte ptr es:[di+320],"@"
jnz x7_1
or pp,1
x7_1:cmp byte ptr es:[di+482],"@";判断下方
jnz y7_1
or pp,2
y7_1:cmp byte ptr es:[di+324],"@";判断右方
jnz y7_2
or pp,4
y7_2:cmp byte ptr es:[di+164],"@";判断右方
jnz y7_3
or pp,4
y7_3:cmp byte ptr es:[di+4],"@"
jnz y7_5
or pp,4
y7_5:test pp,2;结果为0时表示下面没有方块
jnz a7r
test pp,8;结果为0时表示没有到底
jnz a7r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a7_2
call yanse
a7_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+162]," "
mov byte ptr es:[di+322]," "
inc dh
jmp a7
a7r:call panduan
ret
a8:push dx
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@@@
mov byte ptr es:[di-156],"@" ;@
mov byte ptr es:[di-158],"@"
mov byte ptr es:[di-160],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z8_1
or pp,1
z8_1:cmp byte ptr es:[di-162],"@"
jnz x8_1
or pp,1
x8_1:cmp byte ptr es:[di+160],"@"
jnz x8_2
or pp,2
x8_2:cmp byte ptr es:[di+2],"@"
jnz x8_3
or pp,6
x8_3:cmp byte ptr es:[di+4],"@"
jnz y8_1
or pp,2
y8_1:cmp byte ptr es:[di-154],"@";判断右方
jnz y8_5
or pp,4
y8_5:test pp,2;结果为0时表示下面没有方块
jnz a8r
test pp,8;结果为0时表示没有到底
jnz a8r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a8_2
call yanse
a8_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di-156]," "
mov byte ptr es:[di-158]," "
mov byte ptr es:[di-160]," "
inc dh
jmp a8
a8r:call panduan
ret
a9:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di-160],"@" ;@
mov byte ptr es:[di+160],"@" ;@@
mov byte ptr es:[di+162],"@"
cmp byte ptr es:[di-162],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z9_1
or pp,1
z9_1:cmp byte ptr es:[di-2],"@"
jnz z9_2
or pp,1
z9_2:cmp byte ptr es:[di+158],"@"
jnz x9_1
or pp,1
x9_1:cmp byte ptr es:[di+320],"@";判断下方
jnz x9_2
or pp,2
x9_2:cmp byte ptr es:[di+322],"@"
jnz y9_1
or pp,2
y9_1:cmp byte ptr es:[di+2],"@";判断右方
jnz y9_2
or pp,4
y9_2:cmp byte ptr es:[di+164],"@"
jnz y9_3
or pp,4
y9_3:cmp byte ptr es:[di-158],"@"
jnz y9_5
or pp,4
y9_5:test pp,2;结果为0时表示下面没有方块
jnz a9r
test pp,8;结果为0时表示没有到底
jnz a9r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a9_2
call yanse
a9_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di-160]," "
mov byte ptr es:[di+162]," "
inc dh
jmp a9
a9r:call panduan
ret
a10:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di-160],"@" ;@@
mov byte ptr es:[di+2],"@" ; @
mov byte ptr es:[di+162],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z10_1
or pp,1
z10_1:cmp byte ptr es:[di-162],"@"
jnz z10_2
or pp,1
z10_2:cmp byte ptr es:[di+160],"@"
jnz x10_1
or pp,3
x10_1:cmp byte ptr es:[di+322],"@";判断下方
jnz y10_1
or pp,2
y10_1:cmp byte ptr es:[di+164],"@";判断右方
jnz y10_2
or pp,4
y10_2:cmp byte ptr es:[di+4],"@"
jnz y10_3
or pp,4
y10_3:cmp byte ptr es:[di-158],"@"
jnz y10_5
or pp,4
y10_5:test pp,2;结果为0时表示下面没有方块
jnz a10r
test pp,8;结果为0时表示没有到底
jnz a10r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a10_2
call yanse
a10_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di-160]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+162]," "
inc dh
jmp a10
a10r:call panduan
ret
a11:push dx
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @@
mov byte ptr es:[di+2],"@" ;@@
mov byte ptr es:[di-156],"@"
mov byte ptr es:[di-158],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z11_1
or pp,1
z11_1:cmp byte ptr es:[di-160],"@"
jnz x11_2
or pp,1
x11_2:cmp byte ptr es:[di+160],"@"
jnz x11_1
or pp,2
x11_1:cmp byte ptr es:[di+162],"@";判断下方
jnz y11_1
or pp,2
y11_1:cmp byte ptr es:[di+4],"@";判断右方
jnz y11_2
or pp,6
y11_2:cmp byte ptr es:[di-154],"@"
jnz y11_5
or pp,4
y11_5:test pp,2;结果为0时表示下面没有方块
jnz a11r
test pp,8;结果为0时表示没有到底
jnz a11r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a11_2
call yanse
a11_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di-158]," "
mov byte ptr es:[di-156]," "
inc dh
jmp a11
a11r:call panduan
ret
a12:push dx
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @
mov byte ptr es:[di-158],"@" ;@@@
mov byte ptr es:[di+2],"@"
mov byte ptr es:[di+4],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z12_1
or pp,1
z12_1:cmp byte ptr es:[di-160],"@"
jnz x12_1
or pp,1
x12_1:cmp byte ptr es:[di+160],"@"
jnz x12_2
or pp,2
x12_2:cmp byte ptr es:[di+162],"@"
jnz x12_3
or pp,2
x12_3:cmp byte ptr es:[di+164],"@";判断下方
jnz y12_1
or pp,2
y12_1:cmp byte ptr es:[di+6],"@";判断右方
jnz y12_2
or pp,4
y12_2:cmp byte ptr es:[di+156],"@"
jnz y12_5
or pp,4
y12_5:test pp,2;结果为0时表示下面没有方块
jnz a12r
test pp,8;结果为0时表示没有到底
jnz a12r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a12_2
call yanse
a12_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+4]," "
mov byte ptr es:[di-158]," "
inc dh
jmp a12
a12r:call panduan
ret
a13:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @
mov byte ptr es:[di+2],"@" ;@@
mov byte ptr es:[di-158],"@" ; @
mov byte ptr es:[di+162],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z13_1
or pp,1
z13_1:cmp byte ptr es:[di+160],"@"
jnz z13_2
or pp,3
z13_2:cmp byte ptr es:[di-160],"@"
jnz x13_1
or pp,1
x13_1:cmp byte ptr es:[di+322],"@";判断下方
jnz y13_1
or pp,2
y13_1:cmp byte ptr es:[di+164],"@";判断右方
jnz y13_2
or pp,4
y13_2:cmp byte ptr es:[di+4],"@"
jnz y13_3
or pp,4
y13_3:cmp byte ptr es:[di-156],"@"
jnz y13_5
or pp,4
y13_5:test pp,2;结果为0时表示下面没有方块
jnz a13r
test pp,8;结果为0时表示没有到底
jnz a13r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a13_2
call yanse
a13_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+162]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di-158]," "
inc dh
jmp a13
a13r:call panduan
ret
a14:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ; @@@
mov byte ptr es:[di+2],"@" ; @
mov byte ptr es:[di+4],"@"
mov byte ptr es:[di+162],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z14_1
or pp,1
z14_1:cmp byte ptr es:[di+160],"@"
jnz x14_1
or pp,3
x14_1:cmp byte ptr es:[di+322],"@"
jnz x14_2
or pp,2
x14_2:cmp byte ptr es:[di+164],"@";判断下方
jnz y14_1
or pp,6
y14_1:cmp byte ptr es:[di+6],"@";判断右方
jnz y14_5
or pp,4
y14_5:test pp,2;结果为0时表示下面没有方块
jnz a14r
test pp,8;结果为0时表示没有到底
jnz a14r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a14_2
call yanse
a14_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+4]," "
mov byte ptr es:[di+162]," "
inc dh
jmp a14
a14r:call panduan
ret
a15:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di+160],"@" ;@@
mov byte ptr es:[di-160],"@" ;@
mov byte ptr es:[di+2],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z15_1
or pp,1
z15_1:cmp byte ptr es:[di+158],"@"
jnz z15_2
or pp,1
z15_2:cmp byte ptr es:[di-162],"@"
jnz x15_1
or pp,1
x15_1:cmp byte ptr es:[di+320],"@"
jnz x15_2
or pp,2
x15_2:cmp byte ptr es:[di+162],"@";判断下方
jnz y15_1
or pp,6
y15_1:cmp byte ptr es:[di+4],"@";判断右方
jnz y15_2
or pp,4
y15_2:cmp byte ptr es:[di-158],"@"
jnz y15_5
or pp,4
y15_5:test pp,2;结果为0时表示下面没有方块
jnz a15r
test pp,8;结果为0时表示没有到底
jnz a15r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a15_2
call yanse
a15_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di-160]," "
mov byte ptr es:[di+2]," "
inc dh
jmp a15
a15r:call panduan
ret
a16:push dx
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di-160],"@" ;@@@
mov byte ptr es:[di+2],"@"
mov byte ptr es:[di+4],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z16_1
or pp,1
z16_1:cmp byte ptr es:[di-162],"@"
jnz x16_1
or pp,1
x16_1:cmp byte ptr es:[di+160],"@"
jnz x16_2
or pp,2
x16_2:cmp byte ptr es:[di+162],"@"
jnz x16_3
or pp,2
x16_3:cmp byte ptr es:[di+164],"@";判断下方
jnz y16_1
or pp,2
y16_1:cmp byte ptr es:[di+6],"@";判断右方
jnz y16_2
or pp,4
y16_2:cmp byte ptr es:[di-158],"@"
jnz y16_5
or pp,4
y16_5:test pp,2;结果为0时表示下面没有方块
jnz a16r
test pp,8;结果为0时表示没有到底
jnz a16r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a16_2
call yanse
a16_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di-160]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+4]," "
inc dh
jmp a16
a16r:call panduan
ret
a17:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@
mov byte ptr es:[di+158],"@" ;@<-di
mov byte ptr es:[di+160],"@" ;@@
mov byte ptr es:[di-160],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z17_1
or pp,1
z17_1:cmp byte ptr es:[di-162],"@"
jnz z17_2
or pp,1
z17_2:cmp byte ptr es:[di+156],"@"
jnz x17_2
or pp,1
x17_2:cmp byte ptr es:[di+318],"@"
jnz x17_1
or pp,2
x17_1:cmp byte ptr es:[di+320],"@";判断下方
jnz y17_1
or pp,2
y17_1:cmp byte ptr es:[di+162],"@";判断右方
jnz y17_2
or pp,4
y17_2:cmp byte ptr es:[di+2],"@"
jnz y17_3
or pp,4
y17_3:cmp byte ptr es:[di-158],"@"
jnz y17_5
or pp,4
y17_5:test pp,2;结果为0时表示下面没有方块
jnz a17r
test pp,8;结果为0时表示没有到底
jnz a17r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a17_2
call yanse
a17_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+158]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di-160]," "
inc dh
jmp a17
a17r:call panduan
ret
a18:push dx
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@@@
mov byte ptr es:[di+2],"@" ; @
mov byte ptr es:[di+4],"@"
mov byte ptr es:[di+164],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z18_1
or pp,1
z18_1:cmp byte ptr es:[di+162],"@"
jnz x18_2
or pp,3
x18_2:cmp byte ptr es:[di+324],"@"
jnz x18_1
or pp,2
x18_1:cmp byte ptr es:[di+160],"@";判断下方
jnz y18_1
or pp,4
y18_1:cmp byte ptr es:[di+166],"@";判断右方
jnz y18_2
or pp,4
y18_2:cmp byte ptr es:[di+6],"@"
jnz y18_5
or pp,4
y18_5:test pp,2;结果为0时表示下面没有方块
jnz a18r
test pp,8;结果为0时表示没有到底
jnz a18r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a18_2
call yanse
a18_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+2]," "
mov byte ptr es:[di+4]," "
mov byte ptr es:[di+164]," "
inc dh
jmp a18
a18r:call panduan
ret
a19:push dx
inc dh
mov pp,0
call hanglie
mov byte ptr es:[di],"@" ;@@
mov byte ptr es:[di+160],"@" ;@
mov byte ptr es:[di-160],"@" ;@
mov byte ptr es:[di-158],"@"
cmp byte ptr es:[di-2],"@";判断左方是否有方块,有就将PP第0位置1,供后面判断
jnz z19_1
or pp,1
z19_1:cmp byte ptr es:[di-162],"@"
jnz z19_2
or pp,1
z19_2:cmp byte ptr es:[di+158],"@"
jnz x19_1
or pp,1
x19_1:cmp byte ptr es:[di+320],"@";判断下方
jnz y19_1
or pp,2
y19_1:cmp byte ptr es:[di+2],"@";判断右方
jnz y19_2
or pp,6
y19_2:cmp byte ptr es:[di+162],"@"
jnz y19_3
or pp,4
y19_3:cmp byte ptr es:[di-156],"@"
jnz y19_5
or pp,4
y19_5:test pp,2;结果为0时表示下面没有方块
jnz a19r
test pp,8;结果为0时表示没有到底
jnz a19r
call zuoyou
cmp al,3bh; F1改变颜色
jnz a19_2
call yanse
a19_2:call yanshi
mov byte ptr es:[di]," "
mov byte ptr es:[di+160]," "
mov byte ptr es:[di-160]," "
mov byte ptr es:[di-158]," "
inc dh
jmp a19
a19r:call panduan
ret
a20:ret
code ends
end start
其他还有意些小问题,我慢慢改。
评论次数(0) |
浏览次数(862) |
类型(汇编作业) |
收藏此文 |