汇编网首页登录博客注册
chinatree的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
友情链接

[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

其他还有意些小问题,我慢慢改。
评论次数(0)  |  浏览次数(862)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码