+ -
当前位置:首页 → 问答吧 → 汇编语言(数字钟问题)

汇编语言(数字钟问题)

时间: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 ;程序结束

作者: z2362499   发布时间: 2010-11-09

在中断子程序显示字符串前,应该修改字符串,否则一直在显示00:00:00。

作者: shzhfu   发布时间: 2010-11-09

能不能具体该下啊?我自己做的是取的系统时间,你能人为改下不?

作者: z2362499   发布时间: 2010-11-09