📄 b1.asm
字号:
;******************************************************
;* 堆栈段
.286;******************************************************
STACK_SEG SEGMENT STACK
STACK_BUF DW 120 DUP(?)
TOP EQU $-STACK_BUF
STACK_SEG ENDS
;******************************************************
;* 数据段
;******************************************************
DATA_SEG SEGMENT PARA
;------------------------------------------------------
; TODO: 数据的定义及存储器的分配
ts1 DB 0
buf db 'welcome!$'
sigle DB 80h
absx DW 0
absy DW 0
sut DW 0
erroybz DB 0
r0 DW 90
x0 DW 320
y0 DW 220
count0 db 0
count_hour DB 11
count_minute DB 11
yuanxinx DW 0
yuanxiny DW 0
s DB 0
s2 DB 0
s3 DB 0
hour DW 0
hour2 DW 0
minute DW 0
minute2 DW 0
second DB 0
second2 DB 0
sin_x DW 0
sin_xx DW 0
x DW 0
y DW 0
x1 DW 0
xminy DW 0
yminx DW 0
xmax DW 0
ymax DW 0
ymin DW 0
xmin DW 0
sjx_xminy DW 0
sjx_yminx DW 0
sjx_xmax DW 0
sjx_ymax DW 0
sjx_ymin DW 0
sjx_xmin DW 0
yuanx DW 0
yuany DW 0
y1 DW 0
x2 DW 0
y2 DW 0
x3 DW 0
y3 DW 0
DIancolor DB 0
color DB 2
color_hour DB 2
color_min DB 6
color_second DB 9
color4 DB 10
color5 DB 11
color6 DB 12
backgroundcolor DB 1
page1 DB 0
y2y1 DW 0
x2x1 DW 0
sjx_y2y1 DW 0
sjx_x2x1 DW 0
;------------------------------------------------------
DATA_SEG ENDS
;******************************************************
;* 代码段
;******************************************************
CODE_SEG SEGMENT PARA
;------------------------------------------------------
ASSUME CS:CODE_SEG,DS:DATA_SEG
ASSUME SS:STACK_SEG
START:
MOV AX,STACK_SEG
MOV SS,AX
MOV SP,TOP
MOV AX,DATA_SEG
MOV DS,AX
;------------------------------------------------------
; TODO: 从这里开始您的代码
;------------------------------------------------------
beg: MOV AX,0012h
INT 10h ;设置显示方式
MOV DX,031fh ;3行 31列
CALL b1002 ;设置光标位置
LEA dx,buf ;字符串入口地址
mov ah,09h
int 21h
beg2: CALL skin ;钟表的数字
CALL skin2 ;钟表的表针
cALL skin3 ;钟表上的60个刻度
CALL CLk
MOV second,DH
MOV second2,DH
MOV count_minute,11
CALL minute_lin
XOR DX,DX
MOV AX,minute2
MOV CX,12
DIV CX
MOV CX,AX ;minurte2/12
POP AX
ADD AX,CX
MOV hour2,AX
MOV count_hour,11
CALL hour_lin
CALL CLk
MOV DL,DH
CALL bcd2
XOR AH,AH
MOV CL,12
DIV CL
MOV count_minute,AH ;second%12初始值
DEC count_minute
XOR DX,DX
MOV AX,minute2
MOV CX,12
DIV CX ;minurte2%12
MOV count_hour,DL
DEC count_hour
INC second2
kk3: CLI
CALL second_lin
STI
MOV AH,1
INT 16h
JZ kk3
MOV AH,8
INT 21h
CMP AL,'q'
JE quit
CALL CLear
JMP beg2
quit: MOV AX,4C00H
INT 21H
;*************************************
hour_lin PROC NEAR ;时针的控制
PUSHa
CMP count_hour,11
JB tohour_yl
JMP hour_lin_next
tohour_yl: MOV SIgle,3
JMP hour_yl
hour_lin_next:
MOV count_hour,0
MOV SIgle,5
CALL CLk
MOV DL,CH
CALL bcd2
CMP AL,12
JB hour_kk1
SUB AL,12
hour_kk1: MOV CL,30
MUL CL
PUSH AX
XOR DX,DX
MOV AX,minute2
MOV CX,12
DIV CX
MOV CX,AX ;minurte2/12
POP AX
ADD AX,CX
MOV hour2,AX
;擦掉
MOV Color,0
MOV AX,hour
MOV BX,r0
ADD BX,20
CALL renovate
MOV DX,yuanx
MOV x3,DX
MOV DX,yuany
MOV y3,DX
ADD AX,270
ADD BX,400 ;90
CALL renovate
MOV DX,yuanx ;擦掉
MOV x2,DX
MOV DX,yuany
MOV y2,DX
MOV DX,x0
MOV x1,DX
MOV DX,y0 ;擦掉
MOV y1,DX
CALL sjx
ADD AX,180
CALL renovate
MOV DX,yuanx ;擦掉
MOV x2,DX
MOV DX,yuany
MOV y2,DX
SUB BX,100
CALL renovate
MOV DX,yuanx
MOV x3,DX
MOV DX,yuany
MOV y3,DX ;擦掉
CALL sjx
MOV SIgle,4
;***************************;; ;重写
hour_yl: MOV AL,color_hour
MOV color,AL
MOV AX,hour2
MOV BX,r0
ADD BX,70
CALL renovate
MOV DX,yuanx
MOV x3,DX
MOV DX,yuany
MOV y3,DX
ADD AX,90
ADD BX,600 ;90
CALL renovate
MOV DX,yuanx
MOV x2,DX
MOV DX,yuany
MOV y2,DX ;重写
ADD AX,180
CALL renovate
MOV DX,yuanx
MOV x1,DX
MOV DX,yuany
MOV y1,DX
CALL sjxx
CALL sjxy
ADD AX,270
SUB BX,100
CALL renovate
MOV DX,yuanx
MOV x3,DX ;重写
MOV DX,yuany
MOV y3,DX
CALL sjx
CALL sjxx
CALL sjxy
MOV CX,hour2
MOV hour,CX
hour_quit: POPa
RET
hour_lin ENDP
;********************************
minute_lin PROC NEAR ;分针的控制
PUSHa
CMP count_minute,11
JB tominute_yl ;仍是原来的一个
JMP minute_lin_next
tominute_yl: MOV SIgle,0
JMP minute_yl
minute_lin_next:
INC count_hour
CALL CLk
MOV DL,CL
CALL bcd2 ;bcd->16
MOV CL,6
MUL CL ;al*cl
PUSH AX
MOV DL,second2
CALL bcd2
XOR AH,AH
MOV CL,12
DIV CL
MOV CL,AL ;second2/12
POP AX
MOV CH,0
ADD AX,CX
MOV minute2,AX
AAAa1:
MOV SIgle,2
MOV Color,0
MOV AX,minute
MOV BX,r0
ADD BX,10
CALL renovate
MOV DX,yuanx
MOV x3,DX
MOV DX,yuany
MOV y3,DX
ADD AX,268
ADD BX,800 ;90
CALL renovate
MOV DX,yuanx
MOV x2,DX
MOV DX,yuany
MOV y2,DX
MOV DX,x0
MOV x1,DX
MOV DX,y0
MOV y1,DX
CALL sjx
ADD AX,180
CALL renovate
MOV DX,yuanx
MOV x2,DX
MOV DX,yuany
MOV y2,DX
ADD AX,90
SUB BX,200
CALL renovate
MOV DX,yuanx
MOV x3,DX
MOV DX,yuany
MOV y3,DX
CALL sjx
inc count0
cmp count0,5
jnz minute_yl
mov count0,0
;**********************************重写
minute_yl: MOV sigle,1
MOV AL,color_min
MOV color,AL
MOV AX,minute2
MOV BX,r0
ADD BX,30
CALL renovate
MOV DX,yuanx
MOV x3,DX
MOV DX,yuany
MOV y3,DX
ADD AX,90
ADD BX,900 ;90
CALL renovate
MOV DX,yuanx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -