📄 rossq.asm
字号:
push ax
push bx
push cx
push si
mov cx,4
mov bx,0fffch
mdoloop1:add bx,4
mov ax,squ[bx]
cmp ax,189
jae mdoexit1
loop mdoloop1
mov cx,4
mov bx,0ffffh
mov si,10
mdoloop2:add bx,1
mov al,xy[bx]
inc al
mov ah,0
add bx,1
mul si
mov dl,xy[bx]
mov dh,0
add ax,dx
mov di,ax
mov al,state[di]
cmp al,0ffh
jz mdoexit1
loop mdoloop2
mov color,0
call disp
mov cx,4
mov bx,0fffch
mdoloop3:add bx,4
add squ[bx],9
shr bx,1
inc xy[bx]
shl bx,1
loop mdoloop3
mov color,0fh
call disp
jmp mdoexit
mdoexit1:mov cx,4
mov bx,0ffffh
mov si,10
molloop1:add bx,1
mov al, xy[bx]
mov ah,0
inc bx
mul si
mov dl,xy[bx]
mov dh,0
add ax,dx
mov di,ax
mov state[di],0ffh
loop molloop1
mov next,0ffh
mov speed,0
call scanl
mdoexit:pop si
pop cx
pop bx
pop ax
pop di
pop dx
ret
movep endp
scanl proc near;......................................................................................................................................扫描子程.
push ax
push bx
push cx
push dx
push di
mov ch,4
mov dh,10
mov bx,0fffeh
scloop1:add bx,2
mov al,xy[bx]
mov dl,10
mul dh
add al,9
mov ah,0
mov di,ax
scloop2:mov cl,state[di]
cmp cl,0ffh
jnz scloop3
dec di
dec dl
jnz scloop2
call dispose
inc scnum
call mdown
call dispie
scloop3:dec ch
jnz scloop1
call addsco
mov scnum,0
call score
pop di
pop dx
pop cx
pop bx
pop ax
ret
scanl endp
dispie proc near;........................................调整子程.
push dx
push ax
push si
mov dh,ch
dec dh
jz pieexit
mov si,bx
pieloop1:add si,2
mov ah,xy[si]
cmp ah,xy[bx]
jae pieloop
inc xy[si]
pieloop:dec dh
jnz pieloop1
pieexit:pop si
pop ax
pop dx
ret
dispie endp
addsco proc near;...............................加子程
push ax
push bx
push cx
push dx
cmp scnum,0
jz addexit
dec scnum
mov bl,scnum
mov bh,0
mov al,mark[bx]
mov cx,6
mov bx,5
mov dh,10
addloop:add al,scotable[bx]
mov ah,0
div dh
mov scotable[bx],ah
dec bx
loop addloop
addexit:pop dx
pop cx
pop bx
pop ax
ret
addsco endp
score proc near;..............................................................显分数数子程
push ax
push bx
push cx
push dx
push si
push di
mov bx,0ffffh
mov cx,6
scoloop:inc bx
mov al,scotable[bx]
mov ah,0
mov si,ax
shl si,1
mov ax,15
mul bx
add ax,200
push ax
mov ax,25
mov di,320
mul di
pop dx
add ax,dx
mov di,ax
jmp scodisp[si]
sc0:mov al,0eh
call black1
call black2
call black3
call black4
call black5
call black7
mov al,0
call black6
jmp scoexit1
sc1:mov al,0eh
call black2
call black3
mov al,0
call black1
call black4
call black5
call black7
call black6
scoexit1:jmp scoexit2
scoback1:jmp scoloop
sc2:mov al,0eh
call black2
call black6
call black1
call black4
call black5
mov al,0
call black7
call black3
scoexit2:jmp scover
sc3:mov al,0eh
call black2
call black3
call black1
call black4
call black6
mov al,0
call black7
call black5
jmp scover
sc4:mov al,0eh
call black2
call black3
call black7
call black6
mov al,0
call black5
call black1
call black4
jmp scover
sc5:mov al,0eh
call black6
call black3
call black1
call black4
call black7
mov al,0
call black2
call black5
jmp scover
scoback:jmp scoback1
sc6:mov al,0eh
call black6
call black3
call black1
call black4
call black5
call black7
mov al,0
call black2
jmp scover
sc7:mov al,0eh
call black2
call black3
call black1
mov al,0
call black4
call black5
call black7
call black6
jmp scover
sc8:mov al,0eh
call black2
call black3
call black1
call black4
call black5
call black7
call black6
jmp scover
sc9:mov al,0eh
call black2
call black3
call black1
call black4
call black6
call black7
mov al,0
call black5
scover:loop scoback
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
score endp
black1 proc near;..........................................分数
push di
mov dx,10
bla1loop:mov es:[di],al
inc di
dec dx
jnz bla1loop
pop di
ret
black1 endp
black2 proc near
push di
add di,329
mov dx,9
bla2loop:mov es:[di],al
add di,320
dec dx
jnz bla2loop
pop di
ret
black2 endp
black3 proc near
push di
add di,3529
mov dx,9
bla3loop:mov es:[di],al
add di,320
dec dx
jnz bla3loop
pop di
ret
black3 endp
black4 proc near
push di
add di,6400
mov dx,10
bla4loop:mov es:[di],al
inc di
dec dx
jnz bla4loop
pop di
ret
black4 endp
black5 proc near
push di
add di,3520
mov dx,9
bla5loop:mov es:[di],al
add di,320
dec dx
jnz bla5loop
pop di
ret
black5 endp
black6 proc near
push di
add di,3200
mov dx,10
bla6loop:mov es:[di],al
inc di
dec dx
jnz bla6loop
pop di
ret
black6 endp
black7 proc near
push di
add di,320
mov dx,9
bla7loop:mov es:[di],al
add di,320
dec dx
jnz bla7loop
pop di
ret
black7 endp
mlrotate proc near;.........................................左旋
cmp shape,1
jz mllloop
call mrrotate
call mrrotate
call mrrotate
jmp mllexit
mllloop:call mrrotate
mllexit:ret
mlrotate endp
mlline proc near;.................................竖立直线
push ax
push bx
push cx
push dx
push di
mov al,xy[2]
mov tempxy[0],al
mov tempxy[2],al
mov tempxy[4],al
mov tempxy[6],al
mov al,xy[3]
dec al
mov tempxy[1],al
inc al
mov tempxy[3],al
inc al
mov tempxy[5],al
inc al
mov tempxy[7],al
mov cx,4
mov bx,0ffffh
lllinloop1:add bx,1
mov al,tempxy[bx]
cmp al,0
jl lllineexit
cmp al,19
ja lllineexit
inc bx
mov al,tempxy[bx]
cmp al,0
jl lllineexit
cmp al,9
ja lllineexit
loop lllinloop1
mov cx,4
mov bx,0ffffh
lllinloop2:add bx,1
mov al,tempxy[bx]
inc bx
mov dl,10
mul dl
mov ah,tempxy[bx]
add al,ah
mov ah,0
mov di,ax
cmp state[di],0ffh
jz lllineexit
loop lllinloop2
mov color,0
call disp
mov cx,8
mov bx,0
lllinloop3:mov al,tempxy[bx]
mov xy[bx],al
inc bx
loop lllinloop3
call cacul
mov color,0fh
call disp
lllineexit:pop di
pop dx
pop cx
pop bx
pop ax
ret
mlline endp
mrrotate proc near;.................................右旋程序;
cmp shape,0
jz mrroexit1
cmp shape,1
jz mrroexit2
push di
push dx
push ax
push bx
push cx
mov cx,4
mov bx,0ffffh
mrroloop1:add bx,1
mov al,xy[bx]
inc bx
mov ah,xy[bx]
call rocacul
dec bx
mov al,xy[2]
mov ah,xy[3]
add al,roxy[0]
add ah,roxy[1]
cmp al,0
jl mrroloop2
cmp al,19
ja mrroloop2
cmp ah,0
jl mrroloop2
cmp ah,9
ja mrroloop2
mov dl,10
mul dl
jmp intjmp
mrroexit2:mov al,xy[2]
cmp al,xy[0]
jz calhlin
call mlline
jmp mrroexit
calhlin:call line
mrroexit1:jmp mrroexit
intjmp:mov ah,xy[3]
add ah,roxy[1]
add al,ah
mov ah,0
mov di,ax
cmp state[di],0ffh
jz mrroloop2
mov al,roxy[0]
mov ah,roxy[1]
add al,xy[2]
add ah,xy[3]
mov tempxy[bx],al
inc bx
mov tempxy[bx],ah
loop mrroloop1
mov color,0
call disp
mov cx,8
mov bx,0
mrroloop3:mov al,tempxy[bx]
mov xy[bx],al
inc bx
loop mrroloop3
call cacul
mov color,0fh
call disp
mrroloop2:pop cx
pop bx
pop ax
pop dx
pop di
mrroexit:ret
mrrotate endp
line proc near;........................是水平直线.
push ax
push bx
push cx
push dx
push di
mov al,xy[3]
mov tempxy[1],al
mov tempxy[3],al
mov tempxy[5],al
mov tempxy[7],al
mov al,xy[2]
dec al
mov tempxy[0],al
inc al
mov tempxy[2],al
inc al
mov tempxy[4],al
inc al
mov tempxy[6],al
mov cx,4
mov bx,0ffffh
linloop1:add bx,1
mov al,tempxy[bx]
cmp al,0
jl lineexit
cmp al,19
ja lineexit
inc bx
mov al,tempxy[bx]
cmp al,0
jl lineexit
cmp al,9
ja lineexit
loop linloop1
mov cx,4
mov bx,0ffffh
linloop2:add bx,1
mov al,tempxy[bx]
inc bx
mov dl,10
mul dl
mov ah,tempxy[bx]
add al,ah
mov ah,0
mov di,ax
cmp state[di],0ffh
jz lineexit
loop linloop2
mov color,0
call disp
mov cx,8
mov bx,0
linloop3:mov al,tempxy[bx]
mov xy[bx],al
inc bx
loop linloop3
call cacul
mov color,0fh
call disp
lineexit:pop di
pop dx
pop cx
pop bx
pop ax
line endp
cacul proc near;.......................................................坐标计算
push ax
push bx
push cx
push dx
mov bx,0ffffh
mov cx,4
mov dl,9
caloop:add bx,1
mov al,xy[bx]
mul dl
add al,19
adc ah,0
shl bx,1
mov squ[bx],ax
shr bx,1
inc bx
mov al,xy[bx]
mul dl
add al,72
adc ah,0
shl bx,1
mov squ[bx],ax
shr bx,1
loop caloop
pop dx
pop cx
pop bx
pop ax
ret
cacul endp
dispose proc near;.........................................................消除子程.
push cx
push dx
push si
mov cx,10
mov al,xy[bx]
mov ah,0
disoloop:mov litp[0],al
mov litp[1],ah
mov litclr,04
call draw
inc ah
loop disoloop
call tdelay
mov cx,10
mov al,xy[bx]
mov ah,0
disoloop3:mov litp[0],al
mov litp[1],ah
mov litclr,0
call draw
inc ah
loop disoloop3
mov cx,10
mov dl,10
mul dl
mov ah,0
mov si,ax
disoloop1:mov state[si],0
inc si
loop disoloop1
pop si
pop dx
pop cx
ret
dispose endp
mdown proc near;.................................整体下移子程
push si
push di
push dx
push cx
push ax
mov al,xy[bx]
dec al
cmp al,0ffh
jz downexit
mov dh,10
mul dh
add al,9
mov ah,0
mov si,ax
downloop2:mov al,state[si]
cmp al,0ffh
jz downloop1
downloop3:cmp si,0
jz downexit
dec si
jmp downloop2
downloop1:mov state[si],0
mov ax,si
div dh
mov litp[0],al
mov litp[1],ah
mov litclr,0
call draw
inc litp[0]
mov litclr,0fh
call draw
mov di,10
add di,si
mov state[di],0ffh
jmp downloop3
downexit:pop ax
pop cx
pop dx
pop di
pop si
ret
mdown endp
rocacul proc near;.............................旋转计算
push bx
push dx
inc al
inc ah
sub al,xy[2]
sub ah,xy[3]
mov bh,ah
mov dl,6
mov dh,2
mul dl
mov dl,al
mov al,bh
mul dh
add al,dl
mov ah,0
mov bx,ax
mov al,rotable[bx]
mov roxy[0],al
inc bx
mov al,rotable[bx]
mov roxy[1],al
pop dx
pop bx
ret
rocacul endp
tdelay proc near
push ax
push cx
mov ax,0ffffh
tdloop:mov cx,0fffh
there:loop there
dec ax
jnz tdloop
pop cx
pop ax
ret
tdelay endp
code ends
end main;.............................................................................................................................................................................................................................程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -