有没有大佬帮忙注释一下的,一个汇编程序
+qq2449227327
.Model Small
;;;;;;;;;;;; macros ;;;;;;;;;;
draw_row Macro x,y,z,color ;x - row, y - begining column, z - ending column
Local L1
; draws a line in row x from col y to col z
MOV AH, 0CH
MOV AL, color
MOV CX, y
MOV DX, x
L1: INT 10h
INC CX
CMP CX, z
JL L1
EndM
draw_column Macro x,y,z,color ;x - column, y - begining row, z - ending row
Local L2
; draws a line col y from row y to row z
MOV AH, 0CH
MOV AL, color
MOV CX, x
MOV DX, y
L2: INT 10h
INC DX
CMP DX, z
JL L2
EndM
display_string Macro x,row,column,length,color
push ax
push bx
MOV AX, @DATA
MOV ES, AX
MOV AH, 13H ; WRITE THE STRING
MOV AL, 0H; ATTRIBUTE IN BL, MOVE CURSOR TO THAT POSITION
XOR BH,BH ; VIDEO PAGE = 0
mov bl,color
MOV BP, OFFSET x ; ES: BP POINTS TO THE TEXT
MOV CX, length ; LENGTH OF THE STRING
MOV DH, row ;ROW TO PLACE STRING
MOV DL, column ; COLUMN TO PLACE STRING
INT 10H
pop bx
pop ax
EndM
draw_block Macro start_row, end_row, start_column, end_column, color_block
Local along_row
; draws a square
MOV DX, start_row
along_row:
draw_row DX, start_column, end_column,color_block
INC DX
CMP DX, end_row
JLE along_row
EndM
;write a draw piece macro - task for tomorrow (angela)
draw_full_block Macro pattern_name, color, compare ;compare - 4ta block er jonno jhamela,tai last row er first element ta eta
Local draw
;draws a full pattern
MOV BX,0
draw:
draw_block [pattern_name+BX],[pattern_name+BX+2],[pattern_name+BX+4],[pattern_name+BX+6],color
ADD BX,8
CMP BX,compare
JLE draw
EndM
update_block Macro pattern_name, blockToBeUpdated
local while
push ax
push bx
push cx
mov cx,16
mov bx,0
while:
mov ax,pattern_name[bx]
mov blockToBeUpdated[bx],ax
add bx,2
; cmp bx,24
loop while
pop cx
pop bx
pop ax
EndM
;pull row downwards
modify_row_elements Macro pattern_name, delta, number_of_blocks ; delta = dhakkar amount :3
local ghuro,exit
push ax
push bx
PUSH CX
PUSH DX
;modify row elements
mov cx,number_of_blocks
mov bx,0
ghuro:
xor ax,ax
xor dx,dx
MOV ax,pattern_name[bx]
add ax,delta
MOV pattern_name[bx],ax
add bx,2
MOV dx,pattern_name[bx]
add dx,delta
MOV pattern_name[bx],dx
add bx,6
loop ghuro
exit:
pop dx
pop cx
pop bx
pop ax
EndM
;;;;;;;;;;;;;; ;daine bame dhakka dibo B| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
modify_column_elementsD Macro pattern_name, delta, compare ; delta = dhakkar amount :3
local byebye,shorao
push ax
push bx
PUSH CX
PUSH DX
;modify column elements
mov bx,4
shorao:
; cmp pattern_name[30],345
; jg byebye
koop:
MOV cx,pattern_name[bx]
add cx,delta
cmp cx,380
jge byebye
MOV pattern_name[bx],cx
add bx,2
MOV dx,pattern_name[bx]
add dx,delta
MOV pattern_name[bx],dx
add bx,6
xor cx,cx
xor dx,dx
cmp bx,compare
jle shorao
byebye:
pop dx
pop cx
pop bx
pop ax
EndM
modify_column_elementsA Macro pattern_name, delta, compare
local byebye,shorao
push ax
push bx
PUSH CX
PUSH DX
;modify column elements
mov bx,4
shorao:
MOV cx,pattern_name[bx]
sub cx,delta
cmp cx,220
jle byebye
MOV pattern_name[bx],cx
add bx,2
MOV dx,pattern_name[bx]
sub dx,delta
MOV pattern_name[bx],dx
add bx,6
xor cx,cx
xor dx,dx
cmp bx,compare
jle shorao
byebye:
;sub cx,2 ; offset move
;MOV pattern_name[bx],cx
pop dx
pop cx
pop bx
pop ax
EndM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;dhakkadhakki sesh B|
time_delay Macro pattern_name
Local tt,tt1,tt2,tt3,tt4,tt5,tt6,tt7,tt8,tt9,tt10,tt11,sesh,show
; push ax
push bx
push cx
push dx
tt:
CMP timer_flag, 1
JNE tt
MOV timer_flag, 0
;draw_block 158,163,235,360,08h
CALL move_block
;CALL check_line
mov bx,pattern_name[16]
cmp bX,158 ;fixed this one
jg sesh
;;;;;;;;;;;;;;;;;;;;;
; mov cx,pattern_name[20]
; add cx,5
; mov dx,pattern_name[16]
; add dx,10
; xor ax,ax
; mov ah,0dh
; int 10h
; cmp al,09h
; je sesh
;;;;;;;;;;;;;;;;;;;;;
tt2:
CMP timer_flag, 1
JNE tt2
MOV timer_flag, 0
tt3:
CMP timer_flag,1
JNE tt3
MOV timer_flag,0
tt4:
CMP timer_flag,1
JNE tt4
MOV timer_flag,0
tt5:
CMP timer_flag,1
JNE tt5
MOV timer_flag,0
tt6:
CMP timer_flag,1
JNE tt6
MOV timer_flag,0
tt7:
CMP timer_flag,1
JNE tt7
MOV timer_flag,0
tt8:
CMP timer_flag,1
JNE tt8
MOV timer_flag,0
tt9:
CMP timer_flag,1
JNE tt9
MOV timer_flag,0
tt10:
CMP timer_flag,1
JNE tt10
MOV timer_flag,0
tt11:
CMP timer_flag,1
JNE tt11
MOV timer_flag,0
JMP tt
sesh:
; mov [block_boshche],1
pop dx
pop cx
pop bx
EndM
.Stack 100h
.Data
new_timer_vec dw ?,?
old_timer_vec dw ?,?
a1 dw ?
a2 dw ?
b1 dw ?
b2 dw ?
score dw ?
flagg db 0
color db 4
seshs db 0
next_color db 9
line dw 0
timer_flag db 0
vel_x dw 1
vel_y dw 1
boxer_a dw ? ; these two vars deal with current upper and lower row bounds
boxer_b dw ? ; of the single blocks
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; strings that will be displayed ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
msg_next db "Next$",0
msg_left db "A - Left$"
msg_right db "D - Right$"
msg_rotate db "S - Jump Fast$"
msg_quit db "Q - Quit$"
msg_lines db "Lines$"
msg_score db "Score$"
msg_game_over db "Game Over!$"
msg_tetris db "TETRIS$"
game_score db "0000$"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
screen_width dw 320
column_limit dw 0
row_limit dw 0
block_width dw 10
block_height dw 5
block_boundary dw 153
block_boshche dw 0
box_medium dw 100
current_row dw 0
current_block dw 0
next_block dw 0
;;;;;;;; time ;;;;;;;;
;;;;;;;;;;;;; blocks ;;;;;;;;;;;;;;;;;;;;;;
horizontal dw 51,56,290,300
dw 51,56,300,310
dw 51,56,310,320
dw 0,0,0,0
next_horizontal dw 71,76,430,440
dw 71,76,440,450
dw 71,76,450,460
dw 0,0,0,0
vertical dw 51,56,285,295
dw 56,61,285,295
dw 61,66,285,295
T_shape dw 51,56,290,300
dw 51,56,300,310
dw 51,56,310,320
dw 56,62,310,320
L_shape dw 51,56,290,300
dw 51,56,300,310
dw 51,56,310,320
dw 45,50,290,300
next_L_shape dw 71,76,430,440
dw 71,76,440,450
dw 71,76,450,460
dw 65,70,430,440
Ulta_L dw 51,56,290,300
dw 51,56,300,310
dw 51,56,310,320
dw 57,64,310,320
Ulta_T dw 51,56,290,300
dw 51,56,300,310
dw 51,56,310,320
dw 45,50,310,320
right_L dw 51,56,290,300
dw 51,56,300,310
dw 51,56,310,320
dw 45,50,310,320
next_right_L dw 71,76,430,440
dw 71,76,440,450
dw 71,76,450,460
dw 65,70,450,460
currentBlock dw 0,0,0,0
dw 0,0,0,0
dw 0,0,0,0
dw 0,0,0,0
next_piece dw 0,0,0,0
dw 0,0,0,0
dw 0,0,0,0
dw 0,0,0,0
offsetArray dw 20,20,140,14