汇编语言(数字钟问题)
时间:2010-11-09
来源:互联网
麻烦大家改下这程序 实现数字时钟“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 ;程序结束
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 ;程序结束
作者: z2362499 发布时间: 2010-11-09
在中断子程序显示字符串前,应该修改字符串,否则一直在显示00:00:00。
作者: shzhfu 发布时间: 2010-11-09
能不能具体该下啊?我自己做的是取的系统时间,你能人为改下不?
作者: z2362499 发布时间: 2010-11-09
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28