📄 终结版.asm
字号:
MOV DX,yuanx
MOV x3,DX
MOV DX,yuany
MOV y3,DX
CALL sjxx
CALL sjxy
MOV CX,minute2
MOV minute,CX
CALL hour_lin
minute_kk1:
minute_quit: POPa
RET
minute_lin ENDP
;******************in dh秒数*********************
second_lin PROC NEAR
PUSHa
CALL CLk
CMP second2,DH
JE to_second_quit
JMP second_lin_next
to_second_quit:JMP second_quit
second_lin_next:
MOV SIgle,80h
MOV second2,DH
MOV Color,0
MOV DL,second ;erase
CALL bcd2
MOV AH,0
MOV CL,6
MUL CL
MOV BX,r0
ADD BX,10 ;秒针不消失
CALL renovate
MOV DX,yuanx
MOV x1,DX
MOV DX,yuany
MOV y1,DX
ADD AX,180 ;秒针不消失
ADD BX,300 ;秒针不消失
CALL renovate
MOV DX,yuanx
MOV x2,DX
MOV DX,yuany
MOV y2,DX
CALL linex
CALL liney
;重写
MOV SIgle,80h
MOV AL,color_second
MOV color,AL
MOV DL,second2
CALL bcd2
MOV AH,0
MOV CL,6
MUL CL
MOV BX,r0
ADD BX,10
CALL renovate
MOV DX,yuanx
MOV x1,DX
MOV DX,yuany
MOV y1,DX
ADD AX,180
ADD BX, 300
CALL renovate
MOV DX,yuanx
MOV x2,DX
MOV DX,yuany
MOV y2,DX
CALL linex
CALL liney
CALL yuanxin
MOV DL,second2
MOV second,DL
CALL minute_lin
CALL skin2
MOV CL,second2
MOV second,CL
CMP count_minute,11
JE second_kk1
INC count_minute
JMP second_quit
second_kk1: MOV count_minute,0
second_quit: POPa
RET
second_lin ENDP
;******bxbbx*********in ax度数***bx长度,*********
;OUT x2->ax,y2->dx ;**
renovate PROC NEAR
PUSHa
ADD AX,270 ;270,为什么?
PUSH AX
CALL SIn
MOV DX,0
MOV CX,BX
DIV CX
CMP SI,1 ;秒针的正反转,与572行的CMP相同为顺时针
JE hjian
ADD AX,y0
JMP renovate_kk1
hjian: MOV CX,y0
SUB CX,AX
MOV AX,CX
renovate_kk1: MOV yuany,AX
POP AX
CALL cos
MOV DX,0
MOV CX,BX
DIV CX
CMP SI,1
JE hjian2
ADD AX,x0
JMP renovate_kk2
hjian2: MOV CX,x0
SUB CX,AX
MOV AX,CX
renovate_kk2: MOV yuanx,AX
POPa
RET
renovate ENDP
;**************************
Clk PROC
MOV AH,2
INT 1ah
RET
CLk ENDP
;*****************cosx in ax out ax ,si符号******************
cos PROC NEAR
ADD AX,90
cos_kk1: CALL SIn
RET
cos ENDP
;*********Sinx in ax out ax ,si符号*******************************
SIn PROC NEAR ;out ax
PUSH CX
PUSH DX
PUSH BX
sin360: CMP AX,90
JA dy90
sto0_90: MOV SI,0
JMP pp1
dy90: CMP AX,180
JBE z91to180
JMP dy180
z91to180: MOV CX,180
SUB CX,AX
MOV AX,CX
MOV SI,0
JMP pp1
z181to270: SUB AX,180
MOV SI,1
JMP pp1
z271to360: CMP AX,359
JA zdy359
MOV CX,360
SUB CX,AX
MOV AX,CX
MOV SI,1
JMP pp1
zdy359: SUB AX,360
JMP SIn360
dy180: CMP AX,270
JBE z181to270
JMP z271to360
pp1: MOV CX,175
XOR DX,DX
MUL CX
MOV sin_x,AX
XOR DX,DX
MOV CX,AX
MUL CX
MOV CX,10000
DIV CX
MOV sin_xx,AX
XOR DX,DX
MOV CX,120
DIV CX
MOV BX,1677 ;1677不懂
CALL SUBab
MOV CX,sin_xx
XOR DX,DX
MUL CX
MOV CX,10000
DIV CX ;xx(xx/120-10000/6)
MOV CX,10000
MOV DL,0
CMP DL,s
JE jia
SUB CX,AX
MOV AX,CX
JMP kk1
jia: ADD AX,CX
kk1: MOV CX,sin_x
XOR DX,DX
MUL CX
MOV CX,10000
DIV CX
POP BX
POP DX
POP CX
MOV s,0
RET
SIn ENDP
;**************;绝对值在ax中符号在S中ax-bx*****s要定义db*************
subab PROC ;AX大于等于BX,则AX=AX-BX
CMP AX,BX ;AX小于BX,则AX=BX,S取反
JAE goab
XOR s,1
XCHG AX,BX
goab:
SUB AX,BX
RET
subab ENDP
;***************************linex***y=(y2-y1)*(x-x1)/(x2-x1)+y1
;****in (x1,y1),(x2,y2)******************x++
linex PROC NEAR
PUSH x1
PUSH x2
PUSH y1
PUSH y2
pusha
CALL xymaxmin
MOV AX,y2
MOV BX,y1
CALL subab
MOV y2y1,AX
MOV AX,x2
MOV BX,x1
CALL subab
MOV SI,0
CMP SI,AX
JE zhixian
JMP lopx
zhixian: JMP zhixianxs
lopx: MOV x2x1,AX
MOV AX,xmin
MOV x,AX
line0x: SUB AX,xmin
MOV DX,0
MOV CX,y2y1
MUL CX
MOV CX,x2x1
DIV CX
MOV DX,0
CMP DL,s
JE zhengx
MOV CX,AX
MOV AX,xminy
SUB AX,CX
JMP kk2x
zhengx: ADD AX,xminy
kk2x: MOV y,AX
CALL DIan
INC x
MOV AX,x
CMP AX,xmax
JBE line0x
JMP quit12
zhixianxs: MOV AX,xmin
MOV x,AX
MOV AX,ymin
MOV y,AX
lopxx: CALL DIan ;得出点坐标?
INC y
MOV AX,ymax
CMP AX,y
JAE lopxx
quit12: MOV s,0
POPa
POP y2
POP y1
POP x2
POP x1
RET
linex ENDP
;**************************liney x=(x2-x1)(y-y1)/(y2-y1)+x1
;***************************y++
sjx PROC NEAR
PUSH x1
PUSH x2
PUSH y1
PUSH y2
pusha
CALL xymaxmin
MOV AX,y2
MOV BX,y1
CALL subab
MOV y2y1,AX
MOV SI,0
CMP SI,AX
JE to_sjxx
sjx_lop1: MOV AX,x2
MOV BX,x1
CALL subab
MOV x2x1,AX
MOV SI,0
CMP SI,AX
JE to_sjxy
MOV DX,0
MOV AX,y2y1
MOV CX,x2x1
DIV CX
CMP AX,1
JE to_sjxx
CMP AX,0
JE to_sjxx
JMP to_sjxy
to_sjxx: MOV s,0
CALL sjxx
JMP sjx_quit
to_sjxy: MOV s,0
CALL sjxy
sjx_quit: POPa
POP y2
POP y1
POP x2
POP x1
MOV s,0
RET
sjx ENDP
liney PROC NEAR
PUSH x1
PUSH x2
PUSH y1
PUSH y2
pusha
CALL xymaxmin
MOV AX,y2
MOV BX,y1
CALL subab
MOV y2y1,AX
MOV SI,0
CMP SI,AX
JE heng
JMP lop1
heng: JMP hengxian
lop1: MOV AX,x2
MOV BX,x1
CALL subab
MOV x2x1,AX
MOV AX,ymin
MOV y,AX
line0y: SUB AX,ymin
MOV DX,0
MOV CX,x2x1
MUL CX
MOV CX,y2y1
DIV CX
MOV DX,0
CMP DL,s
JE zhengy
MOV CX,AX
MOV AX,yminx
SUB AX,CX
JMP kky
zhengy: ADD AX,yminx
kky: MOV x,AX
CALL DIan
INC y
MOV AX,y
CMP AX,ymax
JBE line0y
JMP quity
hengxian: MOV AX,ymin
MOV y,AX
MOV AX,xmin
MOV x,AX
lopy: CALL DIan
INC x
MOV AX,xmax
CMP AX,x
JAE lopy
quity: MOV s,0
POPa
POP y2
POP y1
POP x2
POP x1
RET
liney ENDP
;***************************linex***y=(y2-y1)*(x-x1)/(x2-x1)+y1
;****in (x1,y1),(x2,y2)******************x++
sjxx PROC NEAR
pusha
PUSH x1
PUSH x2
PUSH x3
PUSH y1
PUSH y2
PUSH y3
CALL xymaxmin
MOV AX,xmin
MOV sjx_xmin,AX
MOV AX,ymin
MOV sjx_ymin,AX
MOV AX,xmax
MOV sjx_xmax,AX
MOV AX,ymax
MOV sjx_ymax,AX
MOV AX,xminy
MOV sjx_xminy,AX
MOV AX,y2
MOV BX,y1
CALL subab
MOV sjx_y2y1,AX
MOV AX,x2
MOV BX,x1
CALL subab
MOV DL,s
MOV s2,DL
MOV s,0
MOV SI,0
CMP SI,AX
JE sjx_zhixian
JMP sjx_lopx
sjx_zhixian:
MOV x1,AX
MOV AX,x3
MOV x2,AX
MOV AX,y3
MOV y2,AX
JMP sjx_zhixianxs
sjx_lopx: MOV sjx_x2x1,AX
MOV AX,x3
MOV x2,AX
MOV AX,y3
MOV y2,AX
MOV AX,sjx_xmin
MOV x1,AX
sjx_line0x: SUB AX,sjx_xmin
MOV DX,0 ;***y=(y2-y1)*(x-x1)/(x2-x1)+y1
MOV CX,sjx_y2y1
MUL CX
MOV CX,sjx_x2x1
DIV CX
MOV DX,0
CMP DL,s2
JE sjx_zhengx
MOV CX,AX
MOV AX,sjx_xminy
SUB AX,CX
JMP sjx_kk2
sjx_zhengx:
ADD AX,sjx_xminy
sjx_kk2:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -