⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.asm

📁 一个基于IBM汇编语言实现的数字钟完整程序
💻 ASM
字号:
CODE	SEGMENT
		ASSUME CS:CODE , DS:CODE
BEGIN:
	JMP INIT ;跳转至设置中断向量
	
	;中断响应函数
	TIME ELAPSED PROC FAR
		MOV AX , CS
		MOV DS , AX
	
		ADD TICKS , 55	
		CMP TICKS , 1000
		JNL DO DETAIL
		IRET
DO DETAIL :
		SUB TICKS , 1000
		INC SEC2
		CMP SEC2 , 3AH
		JL  PRINT
		
		MOV SEC2 , 30H
		INC SEC1
		CMP SEC1 , 36H
		JL  PRINT
		
		MOV SEC1 , 30H
		INC MIN2
		CMP MIN2 , 3AH
		JL  PRINT
		
		MOV MIN2 , 30H
		INC MIN1
		CMP MIN1 , 36H
		JL  PRINT
		
		MOV MIN1 , 30H
		INC HOUR2
		CMP HOUR2 , 34H
		JL  PRINT
		CMP HOUR1 , 32H
		JE	COND1
		CMP HOUR2 , 3AH
		JL  PRINT
		MOV HOUR2 , 30H
		INC HOUR1
		JMP PRINT
		COND1:
		MOV HOUR2 , 30H
		MOV HOUR1 , 30H
	
PRINT:
		MOV AH , 3
		MOV BH , 0
		INT 10H
		MOV POSR , DH
		MOV POSC , DL
		
		LEA BP , HOUR1	
		MOV AH , 2
		MOV BH , 0
		MOV DH , 0
		MOV DL , 70
		INT 10H
PRINT1:
		MOV AH , 14
		MOV AL , DS:[ BP ]
		MOV BH , 0
		MOV CX , 1
		INT 10H
			
		INC BP
		INC NUM
		CMP NUM , 8
		JNE PRINT1
RETURN:
		MOV AH , 2
		MOV BH , 0
		MOV DH , POSR
		MOV DL , POSC
		INT 10H
		MOV NUM , 0
		IRET	
	TIME ELAPSED ENDP
	
	;数据结构
	TICKS  DW 0	;时间计数
	HOUR1  DB 30H  ;时十位
	HOUR2  DB 30H  ;时个位
		   DB ':'
	MIN1   DB 30H  ;分十位
	MIN2   DB 30H  ;分个位
		   DB ':'
	SEC1   DB 30H  ;秒十位
	SEC2   DB 30H  ;秒个位
	NUM	   DB 0
	POSR   DB 0
	POSC   DB 0
	LEN EQU WORD PTR ( $ - TIME ELAPSED )/2 ;计算驻留程序的长度
	
	MENU   DB 'Please select a time to start:' , 0DH , 0AH 
		   DB '1.System time' , 0DH , 0AH
		   DB '2.Manual time' , 0DH , 0AH
		   DB 'Press any other key to Quit' , 0DH , 0AH
		   DB '$'
		   
	BREAK  DB 0DH , 0AH , '$'
		   
	BUF	   DB  9
		   DB  ?
		   DB  8 DUP( 0 )
		   
	;设置新的中断向量
INIT:
	MOV AX , CS
	MOV DS , AX
	
	MOV AH , 9
	LEA DX , MENU
	INT 21H
	
	MOV AH , 1
	INT 21H
	
	CMP AL , 31H
	JE  GET SYS TIME
	CMP AL , 32H
	JE  SET MANUAL TIME
	MOV AH , 4CH
	INT 21H
	
GET SYS TIME:	
	MOV AH , 0
	MOV AL , 2
	INT 10H	
	
	MOV AH , 2CH
	INT 21H
	
	
	;初始化时间
	MOV AH , 0
	MOV AL , CH
	MOV BL , 10
	DIV BL
	MOV HOUR1 , AL
	ADD HOUR1 , 30H
	MOV HOUR2 , AH
	ADD HOUR2 , 30H
	
	MOV AH , 0
	MOV AL , CL
	MOV BL , 10
	DIV BL
	MOV MIN1 , AL
	ADD MIN1 , 30H
	MOV MIN2 , AH
	ADD MIN2 , 30H
	
	MOV AH , 0
	MOV AL , DH
	MOV BL , 10
	DIV BL
	MOV SEC1 , AL
	ADD SEC1 , 30H
	MOV SEC2 , AH
	ADD SEC2 , 30H
	JMP SET TIMER
	
SET MANUAL TIME:
	LEA DX , BUF
	MOV AH , 10
	INT 21H
	MOV BP , DX
	INC BP
	CMP [ BP ] ,BYTE PTR 8
	JNZ SET MANUAL TIME
	INC BP
	MOV AL , [ BP ]
	MOV HOUR1 , AL

	INC BP
	MOV AL , [ BP ]
	MOV HOUR2 , AL

	ADD BP , 2
	MOV AL , [ BP ]
	MOV MIN1 , AL

	INC BP
	MOV AL , [ BP ]
	MOV MIN2 , AL

	ADD BP , 2
	MOV AL , [ BP ]
	MOV SEC1 , AL

	INC BP
	MOV AL , [ BP ]
	MOV SEC2 , AL


SET TIMER:
	MOV DX , OFFSET TIME ELAPSED
	MOV AL , 1CH ;
	MOV AH , 25H
	INT 21H
	
	MOV AL , 0
	MOV DX , LEN
	MOV AH , 31H
	INT 21H
CODE	ENDS
END BEGIN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -