WEB开发网
开发学院软件开发汇编语言 定时器时间数据转换子程序分析 阅读

定时器时间数据转换子程序分析

 2008-04-29 09:34:00 来源:WEB开发网   
核心提示:CLK1的执行过程如下: ((15)->(19),此时转换小时值)(15): AAM指令,乘法的ASCII调整指令,把AL中的值调整为非压缩的BCD格式,即把AL除以0AH(10),商放在AH中,余数放在AL中.执行后,AX=0203H.(16): ADD AX,3030H令AX=3233H,就是2和3的ASCI

CLK1的执行过程如下: ((15)->(19),此时转换小时值)

(15):   AAM指令,乘法的ASCII调整指令,把AL中的值调整为非压缩的BCD格式,即把AL除以0AH(10),商放在AH中,余数放在AL中.执行后,AX=0203H.

(16):   ADD AX,3030H 令AX=3233H,就是2和3的ASCII值.

(17):   XCHG AH,AL 令AX=3332H.

(18):   MOV CS:[DI],AX 把转换后的数值(ASCII)存在HMS中.

(19):   RET 返回.  (返回执行第6条指令)

此时,HMS为 (高字) ':',':',':',':',':',':','3','2'(低字)

(6):   MOV AX,DS:[46CH] AX=1AA3H

(7),(8): BX=444H,DX=0

(9):   CALL CLK0 ;调用CLK0

CLK0的执行过程如下: ((13)->(19),此时转换分钟值)

(12):   ADD DI,3 把DI加3,即指向HMS的指针加3.

(14):   DIV BX  把1AA3H除以444H. 444H=1092,1092/18.2=60(秒).指令执行完后AX=06H(商),DX=10BH(余数)

(15)...(19): 即执行CLK1,执行过程与以上描述相同,把AX=06H(分钟)转换成能显示的ASCII值.(19)句 RET 返回到第(10)句.

此时,HMS为(高字) ':',':',':','6','0',':','3','2'(低字)

开始转换秒数值:

(10),(11):AX=10BH,CX=3CH.(3CH=60)

(12):   10BH*3CH=3E94,AX=3E94H

(13)...(19): 即再次执行CLK0. (14) DIV BX ;3E94H/444H AX=0EH,DX=2DCH.第三次执行CLK1,把AX=0EH(14)转换成可显示的ASCII字符.过程同上.(19) RET 返回调用TIME

子程序处.从(10)到(14) 267*60/1092=267/18.2,(10BH=267)意思是中断267次相当于多少秒.

最后,HMS为(高字) '4','1',':','6','0',':','3','2'(低字),时间为23:06:14。

由上可以看出,高字[0040:006EH]为时间值,低字[0040:006CH]为一小时发生中断次数65520次。上述的转换过程已经很清楚了。0040:006EH-0040:006CH中,高字直接调用CLK1转换成可视字符。低字除以444H(次/分)得分钟数值(商),再调用CLK1转换成可视字符。然后把余数(不足一分钟的中断次数)乘3CH,再除以444H,即把余数除以18.2(次/秒)得秒数值(商),最后一次调用CLK1转换成可视字符。所转换得字符存在HMS内存单元中。

子程序TIME的算法是很易懂的,但INT1CH中断的执行的过程本人还没有不清楚,也没有相应的参考文档,有几个疑问还解不开,特向各位超级大虾(龙虾?)请教。谢谢!

上一页  1 2 

Tags:定时器 时间 数据

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接