有没有大佬帮忙注释一下的,一个汇编程序

qq_45227600 2020-05-07 05:42:32
+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
...全文
45 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧