📄 cyl1.asm
字号:
DATA SEGMENT
INFO1 DB 0DH,0AH,' WELCOME TO COME HERE!$'
INFO2 DB 0DH,0AH,' this is a SUIJISHUTU program!$'
LINE DW 0 ;矩形块左上角的行
ROW DW 0 ;矩形块左上角的列
PIX DB 0 ;矩形块的颜色
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: ;主程序
MOV AX , DATA
MOV DS , AX
MOV AH , 0
MOV AL , 0EH
INT 10H ;设置320×200彩色图形方式
MOV AH,0BH
MOV BH,01
MOV BL,0
INT 10H ;设置彩色调色板
;*****定义一个宏*****
show MACRO b
LEA DX,b
MOV AH,9
INT 21H
ENDM
;**********************
show INFO1
show INFO2
L1:
PUSH AX
IN AL,60h
CMP AL,10H ;Q键的扫描码
POP AX
JE quit
CALL RAND
CALL RAND1
MOV PIX,BL
MOV ROW,BX
MOV DH,00H
MOV CH,00H
MOV DL,AL
MOV CL,AH
MOV LINE,BX
CALL DISP_RECT
CALL DELAY
CALL DELAY
JMP L1
quit: MOV AH , 4CH
INT 21H
;返回DOS
;显示矩形块的子程序,矩形块的显示位置由DATA段中的LINE、ROW变量指定,
;颜色由PIX变量指定,矩形块的大小是固定的,为10个点宽,50个点高。
RAND PROC
PUSH CX
PUSH DX
PUSH AX
STI
MOV AH,0 ;读时钟计数器值
INT 1AH
MOV AX,DX ;清高6位
AND AH,3
MOV DL,101 ;除101,产生0~100余数
DIV DL
MOV BL,AH ;余数存BX,作随机数
POP AX
POP DX
POP CX
RET
RAND ENDP
RAND1 PROC
PUSH CX
PUSH DX
PUSH AX
STI
MOV AH,0 ;读时钟计数器值
INT 1AH
MOV AX,DX ;清高6位
AND AH,00H
MOV DL,51 ;除51,产生0~50余数
DIV DL
MOV BH,AH ;余数存BH,作随机数
POP AX
POP DX
POP CX
RET
RAND1 ENDP
DISP_RECT PROC near
PUSH AX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
MOV AH , 0CH ;指明写点调用
MOV AL , PIX ;取点的颜色
CALL RAND
MOV BH,00H
MOV DI , BX ;用于控制行显示循环
MOV DX , LINE ;取点的行坐标
DISP_2:
CALL RAND
MOV BH,00H
MOV SI ,BX ;控制列显示循环
MOV CX , ROW ;取显示点的列坐标
DISP_1:
INT 10H ;完成点的显示
INC CX ;列坐标加1(行不变)
DEC SI
JNZ DISP_1 ;循环显示完一行的10个点
INC DX ;行坐标加1
DEC DI
JNZ DISP_2 ;循环显示完100行
POP DI
POP SI
POP DX
POP CX
POP AX
RET
DISP_RECT ENDP
delay proc near
push cx
push dx
mov dx,5000
d11: mov cx,25000
d12: loop d12
dec dx
jnz d11
pop dx
pop cx
ret
delay endp
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -