+ -
当前位置:首页 → 问答吧 → 用汇编语言编写数字时钟程序问题

用汇编语言编写数字时钟程序问题

时间:2011-12-21

来源:互联网

在屏幕上显示一数字时钟,能够实现时间的校准,能够实现定时,即当定时时间到后计算机的BP喇叭给出提示。

作者: alissa2   发布时间: 2011-12-21

别人的代码:
;*****************************

;数据定义

data segment

count dw 0

hour dw 0

min dw 0

sec dw 0

row db 0

clom db 0

data ends

;*****************************

code segment

;------------------------------------------

;非驻留部分

main proc far

  assume cs:code,ds:data

start:

  push ds

  sub ax,ax

  push ax

  mov ax,data

  mov ds,ax

;读系统时间

  mov ah,2ch

  int 21h

  mov bh,0

  mov bl,ch

  mov hour,bx

  mov bh,0

  mov bl,cl

  mov min,bx

  mov bh,0

  mov bl,dh

  mov sec,bx

;保存原来的中断1CH

  mov al,1ch

  mov ah,35h

  int 21h

  push es

  push bx

  push ds

  mov count,18

;设置新的中断1CH

  mov dx,offset clock1

  mov ax,seg clock1

  mov ds,ax

  mov al,1ch

  mov ah,25h

  int 21h

;程序驻留 用DOS中的31H号中断

  mov ah,31h

  mov al,0

  int 21h

;恢复中断1CH

  pop ds

  pop dx

  pop ds

  mov al,1ch

  mov ah,25h

  int 21h

main endp
;--------------------------------

;驻留部分

;时钟中断程序

clock1 proc near

  mov ax,data

  mov ds,ax

;寄存器进栈

  push ax

  push bx

  push cx

  push dx

  push ds

  push es

  dec count

  jnz exit

;保存光标 用INT 10H中的3号中断

  mov bh,0

  mov ah,3

  int 10h

  mov row,dh

  mov clom,dl

;设置光标 用INT 10H中的2号中断

  mov bh,0

  mov dh,0

  mov dl,72

  mov ah,2

  int 10h

   

;计数和进位处理  

  inc sec

  cmp sec,60

  jnz noclear

  mov sec,0

  inc min

  cmp min,60

  jnz noclear

  mov min,0

  inc hour

  cmp hour,24

  jnz noclear

  mov hour,0

noclear:

   

  call show

  mov count,18

;恢复光标 用INT 10H中的2号中断

  mov ah,02h

  mov bh,0

  mov dh,row

  mov dl,clom

  int 10h

;寄存器出栈 

exit:

  pop es

  pop ds

  pop dx

  pop cx

  pop bx

  pop ax  

  iret

clock1 endp

;---------------------------------

;显示时间子程序

show proc near

   

  mov ax,hour

  call bindec


  mov bx,0

  mov al,':'

  mov ah,0eh

  int 10h


  mov ax,min

  call bindec

   

  mov bx,0

  mov al,':'

  mov ah,0eh

  int 10h


  mov ax,sec

  call bindec

  ret

show endp

;----------------------------------------

;将2为位数的整数转换为字符显示

bindec proc near

  mov cx,10d

  call decdiv

  mov cx,1

  call decdiv

  ret

bindec endp

;-------------------------------------------

decdiv proc near

  mov dx,0

  div cx

;显示单个字符用INT 10H中的0E号中断

  mov bx,0

  add al,30h

  mov ah,0eh

  int 10h


  mov ax,dx

  ret

decdiv endp

;---------------------------------------------

code ends

;*******************************

end start

作者: leetow2003   发布时间: 2011-12-24