汇编语言(数字钟问题)
麻烦大家改下这程序 实现数字时钟“00:00:00”2)增加开始和暂停
;用1CH定时中段的方式实现每秒一个,显示10个字符串
D_SEG SEGMENT ;数据段
MSG DB "00:00:00 ",'$'
OLD_INT_SEG DW 0 ;存储1ch中断入口的段地址
OLD_INT_OFF DW 0 ;存储1ch中断入口的偏移地址
COUNT DB 0 ;次数,全局变量,在主程序和
; 中断子程序间通信
COUNT1 DB 0 ;18次为1秒
D_SEG ENDS
S_SEG SEGMENT STACK ;堆栈段
DB 250 DUP(0)
S_SEG ENDS
C_SEG SEGMENT ;代码段
ASSUME CS:C_SEG,DS:D_SEG,SS:S_SEG
MAIN PROC FAR ;主程序开始
MOV AX,D_SEG
MOV DS,AX ;数据段初始化
CALL INIT_INT ;初始化中断
L1: CMP COUNT,10 ;50次
JNE L1
CALL RESTORE_INT ;恢复原1ch中断入口
EXIT1: MOV AX,4C00H ;退出,回到DOS
INT 21H
MAIN ENDP ;主程序结束
INIT_INT PROC NEAR ;初始化中断子程序开始
CLI
PUSH DS ;保存DS,因程序中修改了它
MOV AL,1CH
MOV AH,35H
INT 21H
MOV OLD_INT_OFF,BX ;保存原1ch的偏移地址
MOV OLD_INT_SEG,ES ;保存原1ch的段地址
MOV AX,SEG DISP ;安装新中断程序入口地址
MOV DS,AX
MOV DX,OFFSET DISP
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS ;恢复DS
STI
RET
INIT_INT ENDP ;初始化中断子程序结束
RESTORE_INT PROC NEAR ;恢复原中断子程序开始
CLI
MOV DX,OLD_INT_OFF
MOV AX,OLD_INT_SEG
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
STI
RET
RESTORE_INT ENDP ;恢复原中断子程序结束
DISP PROC NEAR ;新的1ch中段程序开始
CLI
MOV AX,D_SEG ;为确保访问到字符串,重新指定DS
MOV DS,AX
MOV DX,OFFSET MSG
MOV AH,9H ;显示字符串
INC COUNT1
CMP COUNT1,18
JNE LESSTHEN1SEC
INC COUNT
MOV COUNT1,0
INT 21H
LESSTHEN1SEC: STI
IRET
DISP ENDP ;新的1ch中段程序结束
C_SEG ENDS ;代码段结束
END MAIN ;程序结束