注册 登录
编程论坛 汇编论坛

[求助]在编写一个时钟遇到的一个头晕的问题

CHEN5354520 发布于 2007-05-25 12:14, 1465 次点击
这个问题是这样的:程序如下,没有错!
如果源程序的扩展名为 TIME.ASM 得不到所要的功能
如果是别的扩展名就可以!
这是为什么
有那位大侠tell me
.MODEL SMALL
.DATA
.CODE

MAIN PROC
AAAA: MOV AH,02
MOV BH,0
MOV BL,34H
MOV DX,1220
INT 10H
MOV AH,2CH
INT 21H ;调用DOS中断查询系统时间

MOV AL,CH ;取得的小时数放到AL,为调用子程序准备入口参数
CALL DISP ;调用子程序,显示小时数

MOV DL,':'
MOV AH,02H
INT 21H ;显示小时与分钟间的“:”

MOV AL,CL ;取得的分钟数放到AL,为调用子程序准备入口参数
CALL DISP ;调用子程序,显示分钟数

MOV DL,':' ;显示分钟与秒间的“:”
MOV AH,02H
INT 21H

MOV AL,DH ;取得的秒数放到AL,为调用子程序准备入口参数
CALL DISP ;调用子程序,显示秒数


JMP AAAA

MOV AH,4CH
INT 21H ;退出返回DOS
MAIN ENDP
;子程序名:disp
;子程序功能:将两位十六进制数转换为十进制数显示出来(这里只显示十位和个位)
;入口参数:AL存放要转换的十六进制数
;出口参数:无
disp proc far

push ax
push cx
push dx
mov cl,64H
mov ah,0
div cl
mov al,ah ;余数放到AL,最高位(百位)不必显示
mov ah,0
mov cl,0AH
div cl
mov dh,ah
mov dl,al
or dl,30h
mov ah,02h
int 21h ;display sec.
mov dl,dh
add dl,30h
mov ah,02h
int 21h ;display 3
pop dx
pop cx
pop ax
ret

disp endp

END
10 回复
#2
菜鸟上路2007-05-25 12:29
不知道。谁能解释一下啊
#3
Pants2007-05-25 15:35
不清楚
个人猜想:time是否与asm的关键字冲突?
#4
菜鸟上路2007-05-25 16:26
不是的,有冲突的话,应该不能编译,现在只是运行效果是另一种
#5
zhulei19782007-05-29 12:25
这个程序我用RadASM编译为什么不能通过呢,出现如下错误:
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Rad16.asm(15) :error A2006: undefined symbol : DISP
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Rad16.asm(22) : error A2006: undefined symbol : DISP
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Rad16.asm(29) : error A2006: undefined symbol : DISP
#6
爱以走远2007-05-29 13:23
你在调用子程序的时候
disp proc far 不要far
#7
zhulei19782007-05-29 21:58
去掉far就可以了.
请问版主,为什么加上一个far就会出错呢
还有,这个程序如何退出.
#8
爱以走远2007-05-29 23:28

你去看看调用子程序
呵呵
还有就是他程序好象不怎么对
你们看看他是不是死循环

#9
CHEN53545202007-05-30 12:06

不错,这个程序是死循环的,我有个习惯在程序调试时是用死循环的
我学汇编刚二个多月,不是很会写程序!

#10
爱以走远2007-05-30 12:28
习惯在程序调试时是用死循环   
#11
CHEN53545202007-05-31 12:02

这个问题已经解决了
原来在DOS中有TIME.EXE


程序中加

MOV AH,0BH
INT 21H
CMP AL,0FFH
JZ EXIT

那就OK了

1