我的8086数字时钟

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

INTEL 8086/8088系列

微型计算机

原理及接口技术

设计题目:时钟显示(具有年月日时分秒功能)

院系:电气工程学院

班级:2009级1班

设计者:周晓宇

学号:200900191224

同组者:马天慧

指导教师:刘志珍

设计时间:2011.12.18—2011.12.24

目录

一、设计内容与要求 (3)

二、设计思路 (3)

三、流程图 (4)

四、程序 (7)

五、运行结果 (12)

六、硬件设计 (13)

七、调试步骤 (14)

八、心得体会 (14)

九、参考文献 (15)

一、设计内容与要求:

用汇编语言编写一个时钟程序,在微机屏幕上显示当前时间****年**月**日**时**分**秒。在程序启动后,微机屏幕上显示当前时间,按下e键退出程序。

二、设计思路:

利用BIOS的INT 1AH的2号系统功能调用,将计算机系统的时间参数(BCD 码)送入寄存器。其中CH 和CL中保存的是小时数和分钟数;DH中保存的是秒钟数。

利用除法命令DIV,若进行字节操作,16位被除数隐含在AX中,8位除数就是源操作数,结果的8位商在AL中,8位余数在AH中,即

(AL)(AH)/(SRC)的商

(AL)(AH)/(SRC)的余数

若进行字操作,32位被除数低16位隐含在AX中,高16位8位隐含在DX中,16位除数就是源操作数,结果的16位商在AX中,16位余数在DX中,即(AX)(DX,AX)/(SRC)的商

(DX)(DX,AX)/(SRC)的余数

通过以上方法将二进制表示的年月日时分秒转换为BCD码,再将BCD码表示的时,分,秒转换成AS CⅡ码并送入屏幕显示。能调用子程序,若显示时间与当前时间不符,则校准显示时间,并用INT 21H 的7号功能调用判断输入回车并清屏。若输入字符e,则令SIGN=3,即退出程序,若无输入或输入字符不是e,则反复从系统中取出当前时间并显示。

详细过程见程序注释。

三、流程图:

四、程序:

XIANSHI MACRO Y,Z,W ;宏定义(用于显示字符串,颜色为红色) MOV BP,OFFSET Y

MOV AH,13H

MOV AL,0B

MOV BX,0CH

MOV CX,Z

MOV DX,W

INT 10H

ENDM

XIANSHI2 MACRO Y,Z,W ;宏定义(用于显示字符串,颜色为黄色) MOV BP,OFFSET Y

MOV AH,13H

MOV AL,0B

MOV BX,0EH

MOV CX,Z

MOV DX,W

INT 10H

ENDM

DATA SEGMENT ;定义数据段

BUFFER1 DB 11 DUP (?)

BUFFER2 DB 9 DUP (?)

SECOND DB ?

SIGN DB ?

STR1 DB 'THE TIME: $'

STR4 DB 'PRESS E TO EXIT:$'

STR6 DB '(*~--~*)$'

STR7 DB '- - - - - - - - - - -$'

STR8 DB 'I$'

DATA ENDS

STACK SEGMENT STACK 'STACK' ;定义堆栈段

DB 100 DUP ('S')

STACK ENDS

CODE SEGMENT PARA 'CODE' ;定义代码段

ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA

STA PROC FAR ;定义子程序

PUSH DS

XOR AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV AX,0600H

MOV BX,0754H

MOV CX,0000H

MOV DX,194FH

INT 10H

XIANSHI STR1,9,0722H ;显示‘ THE TIME:’

XIANSHI STR4,16,0E22H ;显示‘ PRESS E TO EXIT:’

BEGIN: CMP SIGN,3 ;若输入字符e,则令SIGN=3,即退出程序,若无输

入或输入字符不是e,则反复从系统中取出当前时

间并显示

JE TUI1

MOV AH,2AH

INT 21H ;取日期

LEA BX,BUFFER1

PUSH DX ;保护寄存器

MOV AX,CX ;利用除法产生商和余数,把以二进制形式保存的

年号转换为BCD码

MOV DX,0000H ;年号除以1000得到商即为年号的千位

MOV CX,1000

DIV CX

OR AL,30H ;年号的千位转换为其ASCII码并存入BUFFER1第1

存储单元中

MOV [BX],AL

MOV AX,DX ;年号的百位转换为其ASCII码并存入BUFFER1第2

存储单元中

MOV CL,64H

DIV CL

OR AL,30H

INC BX

MOV [BX],AL

MOV AL,AH

MOV AH,00H ;年号的十位转换为其ASCII码并存入BUFFER1第3

存储单元中

MOV CL,10

DIV CL

OR AL,30H

INC BX

MOV [BX],AL

OR AH,30H ;年号的个位转换为其ASCII码并存入BUFFER1第4存

储单元中

INC BX

MOV [BX],AH

POP DX ;年号转换完毕

INC BX

相关文档
最新文档