小弟一个天大的困惑,上次小弟向一位牛人请教了自己数字钟的错误,他教我改的地方我都改了,可还是不能计时,可我将他改给我的代码粘贴上去却行了,小弟又前前后后比对了2
时间:2010-11-06
来源:互联网
data SEGMENT
count DB 0
second DB 0
minute DB 0
hour DB 0
oldsegment DW ?
oldoff DW ?
time DB "00:00:00",'$'
bobo DB "press any key to start AND space to quit",'$'
data ENDS
code SEGMENT
ASSUME CS:code,DS:data
main PROC FAR
MOV AX,data
MOV DS,AX
MOV ES,AX
LEA DX,bobo ;输出横幅
MOV AH,09h
INT 21h
MOV AH,2 ;把光标放在10行30列
MOV BH,0
MOV DH,10
MOV DL,30
INT 10h
LEA DX,time ;初始化时间
MOV AH,09h
INT 21h
MOV AH,0 ;判断开始或退出
INT 16h
CMP AL,32
JE exit1
PUSH ES
MOV AH,35h ;保存原向量
MOV AL,1ch
INT 21h
MOV oldsegment,ES
MOV oldoff,BX
POP ES
PUSH DS
MOV AX,SEG CLock ;把clock装入到1ch中
MOV DS,AX
MOV DX,OFFSET CLock
MOV AH,25h
MOV AL,1ch
INT 21h
POP DS
recicle: MOV AH,0 ;判断是否结束计时
INT 16h
CMP AL,32
JNE recicle
exit: PUSH DS
MOV AX,oldsegment ;恢复向量
MOV DS,AX
MOV DX,oldoff
MOV AH,25h
MOV AL,1ch
INT 21h
POP DS
exit1:MOV AH,4ch
INT 21h
main ENDP
CLock PROC NEAR ;clock程序
MOV AX,data
MOV DS,AX
MOV ES,AX
CLI
INC count ;计时程序段
CMP count,18
JNE quit
INC second
MOV count,0
CMP second,3ch
JNE quit
INC minute
MOV second,0
CMP minute,3ch
JNE quit
INC hour
MOV minute,0
CMP hour,24
JNE quit
MOV hour,0
quit: MOV SI,OFFSET time ;二进制转换成ASIIC
MOV AL,hour
XOR AH,AH
MOV CL,10
DIV CL
MOV [SI],AL
MOV [SI+1],AH
MOV AL,minute
XOR AH,AH
MOV CL,10
DIV CL
MOV [SI+3],AL
MOV [SI+4],AH
MOV AL,second
XOR AH,AH
MOV CL,10
DIV CL
MOV [SI+6],AL
MOV [SI+7],AH
ADD BYTE PTR [SI],30h
ADD BYTE PTR[SI+1],30h
ADD BYTE PTR [SI+3],30h
MOV BYTE PTR [SI+4],30h
MOV BYTE PTR[SI+6],30h
MOV BYTE PTR[SI+7],30h
MOV AH,2 ;置光标在10行30列
MOV BH,0
MOV DH,10
MOV DL,30
INT 10h
MOV AH,09h
MOV DX,OFFSET time
INT 21h
STI
IRET
CLock ENDP
code ENDS
END main
count DB 0
second DB 0
minute DB 0
hour DB 0
oldsegment DW ?
oldoff DW ?
time DB "00:00:00",'$'
bobo DB "press any key to start AND space to quit",'$'
data ENDS
code SEGMENT
ASSUME CS:code,DS:data
main PROC FAR
MOV AX,data
MOV DS,AX
MOV ES,AX
LEA DX,bobo ;输出横幅
MOV AH,09h
INT 21h
MOV AH,2 ;把光标放在10行30列
MOV BH,0
MOV DH,10
MOV DL,30
INT 10h
LEA DX,time ;初始化时间
MOV AH,09h
INT 21h
MOV AH,0 ;判断开始或退出
INT 16h
CMP AL,32
JE exit1
PUSH ES
MOV AH,35h ;保存原向量
MOV AL,1ch
INT 21h
MOV oldsegment,ES
MOV oldoff,BX
POP ES
PUSH DS
MOV AX,SEG CLock ;把clock装入到1ch中
MOV DS,AX
MOV DX,OFFSET CLock
MOV AH,25h
MOV AL,1ch
INT 21h
POP DS
recicle: MOV AH,0 ;判断是否结束计时
INT 16h
CMP AL,32
JNE recicle
exit: PUSH DS
MOV AX,oldsegment ;恢复向量
MOV DS,AX
MOV DX,oldoff
MOV AH,25h
MOV AL,1ch
INT 21h
POP DS
exit1:MOV AH,4ch
INT 21h
main ENDP
CLock PROC NEAR ;clock程序
MOV AX,data
MOV DS,AX
MOV ES,AX
CLI
INC count ;计时程序段
CMP count,18
JNE quit
INC second
MOV count,0
CMP second,3ch
JNE quit
INC minute
MOV second,0
CMP minute,3ch
JNE quit
INC hour
MOV minute,0
CMP hour,24
JNE quit
MOV hour,0
quit: MOV SI,OFFSET time ;二进制转换成ASIIC
MOV AL,hour
XOR AH,AH
MOV CL,10
DIV CL
MOV [SI],AL
MOV [SI+1],AH
MOV AL,minute
XOR AH,AH
MOV CL,10
DIV CL
MOV [SI+3],AL
MOV [SI+4],AH
MOV AL,second
XOR AH,AH
MOV CL,10
DIV CL
MOV [SI+6],AL
MOV [SI+7],AH
ADD BYTE PTR [SI],30h
ADD BYTE PTR[SI+1],30h
ADD BYTE PTR [SI+3],30h
MOV BYTE PTR [SI+4],30h
MOV BYTE PTR[SI+6],30h
MOV BYTE PTR[SI+7],30h
MOV AH,2 ;置光标在10行30列
MOV BH,0
MOV DH,10
MOV DL,30
INT 10h
MOV AH,09h
MOV DX,OFFSET time
INT 21h
STI
IRET
CLock ENDP
code ENDS
END main
作者: bobo1269219446 发布时间: 2010-11-06
data SEGMENT
count DB 0
second DB 0
minute DB 0
hour DB 0
oldsegment DW ?
oldoff DW ?
time DB "00:00:00",'$'
bobo DB "press any key to start AND space to quit",'$'
data ENDS
code SEGMENT
ASSUME CS:code,DS:data
main PROC FAR
MOV AX,data
MOV DS,AX
MOV ES,AX
LEA DX,bobo ;输出横幅
MOV AH,09h
INT 21h
MOV AH,2 ;把光标放在10行30列
MOV BH,0
MOV DH,10
MOV DL,30
INT 10h
LEA DX,time ;初始化时间
MOV AH,09h
INT 21h
MOV AH,0 ;判断开始或退出
INT 16h
CMP AL,32
JE exit1 ;<---这退出就不用恢复INT 1CH了
PUSH ES
MOV AH,35h ;保存原向量
MOV AL,1ch
INT 21h
MOV oldsegment,ES
MOV oldoff,BX
POP ES
PUSH DS
MOV AX,SEG CLock ;把clock装入到1ch中
MOV DS,AX
MOV DX,OFFSET CLock
MOV AH,25h
MOV AL,1ch
INT 21h
POP DS
recicle: MOV AH,0 ;判断是否结束计时
INT 16h
CMP AL,32
JNE recicle
exit:
PUSH DS
MOV AX,oldsegment ;恢复向量
MOV DS,AX
MOV DX,oldoff
MOV AH,25h
MOV AL,1ch
INT 21h
POP DS
exit1:
MOV AH,4ch
INT 21h
main ENDP
CLock PROC NEAR ;clock程序
MOV AX,data
MOV DS,AX
MOV ES,AX
CLI
INC count ;计时程序段
CMP count,18
JNE quit
INC second
MOV count,0
CMP second,3ch
JNE quit
INC minute
MOV second,0
CMP minute,3ch
JNE quit
INC hour
MOV minute,0
CMP hour,24
JNE quit
MOV hour,0
quit: MOV SI,OFFSET time ;二进制转换成ASIIC
MOV AL,hour
XOR AH,AH ;<-这的AH要清0,不要用CBW,下面同
MOV CL,10
DIV CL
MOV [SI],AL
MOV [SI+1],AH
MOV AL,minute
XOR AH,AH
MOV CL,10
DIV CL
MOV [SI+3],AL
MOV [SI+4],AH
MOV AL,second
XOR AH,AH
MOV CL,10
DIV CL
MOV [SI+6],AL
MOV [SI+7],AH
ADD BYTE PTR [SI],30h
ADD BYTE PTR [SI+1],30h
ADD BYTE PTR [SI+3],30h
ADD BYTE PTR [SI+4],30h
ADD BYTE PTR[SI+6],30h
ADD BYTE PTR[SI+7],30h
MOV AH,2 ;置光标在10行30列
MOV BH,0
MOV DH,10
MOV DL,30
INT 10h
MOV AH,09h
MOV DX,OFFSET time
INT 21h
STI
IRET
CLock ENDP
code ENDS
END main
count DB 0
second DB 0
minute DB 0
hour DB 0
oldsegment DW ?
oldoff DW ?
time DB "00:00:00",'$'
bobo DB "press any key to start AND space to quit",'$'
data ENDS
code SEGMENT
ASSUME CS:code,DS:data
main PROC FAR
MOV AX,data
MOV DS,AX
MOV ES,AX
LEA DX,bobo ;输出横幅
MOV AH,09h
INT 21h
MOV AH,2 ;把光标放在10行30列
MOV BH,0
MOV DH,10
MOV DL,30
INT 10h
LEA DX,time ;初始化时间
MOV AH,09h
INT 21h
MOV AH,0 ;判断开始或退出
INT 16h
CMP AL,32
JE exit1 ;<---这退出就不用恢复INT 1CH了
PUSH ES
MOV AH,35h ;保存原向量
MOV AL,1ch
INT 21h
MOV oldsegment,ES
MOV oldoff,BX
POP ES
PUSH DS
MOV AX,SEG CLock ;把clock装入到1ch中
MOV DS,AX
MOV DX,OFFSET CLock
MOV AH,25h
MOV AL,1ch
INT 21h
POP DS
recicle: MOV AH,0 ;判断是否结束计时
INT 16h
CMP AL,32
JNE recicle
exit:
PUSH DS
MOV AX,oldsegment ;恢复向量
MOV DS,AX
MOV DX,oldoff
MOV AH,25h
MOV AL,1ch
INT 21h
POP DS
exit1:
MOV AH,4ch
INT 21h
main ENDP
CLock PROC NEAR ;clock程序
MOV AX,data
MOV DS,AX
MOV ES,AX
CLI
INC count ;计时程序段
CMP count,18
JNE quit
INC second
MOV count,0
CMP second,3ch
JNE quit
INC minute
MOV second,0
CMP minute,3ch
JNE quit
INC hour
MOV minute,0
CMP hour,24
JNE quit
MOV hour,0
quit: MOV SI,OFFSET time ;二进制转换成ASIIC
MOV AL,hour
XOR AH,AH ;<-这的AH要清0,不要用CBW,下面同
MOV CL,10
DIV CL
MOV [SI],AL
MOV [SI+1],AH
MOV AL,minute
XOR AH,AH
MOV CL,10
DIV CL
MOV [SI+3],AL
MOV [SI+4],AH
MOV AL,second
XOR AH,AH
MOV CL,10
DIV CL
MOV [SI+6],AL
MOV [SI+7],AH
ADD BYTE PTR [SI],30h
ADD BYTE PTR [SI+1],30h
ADD BYTE PTR [SI+3],30h
ADD BYTE PTR [SI+4],30h
ADD BYTE PTR[SI+6],30h
ADD BYTE PTR[SI+7],30h
MOV AH,2 ;置光标在10行30列
MOV BH,0
MOV DH,10
MOV DL,30
INT 10h
MOV AH,09h
MOV DX,OFFSET time
INT 21h
STI
IRET
CLock ENDP
code ENDS
END main
作者: bobo1269219446 发布时间: 2010-11-06
前面一个是小弟改的,后面一个是牛人改的叫nanlingcg ,可能大家都认识他了,小弟我前前后后比对了20多次,硬是没发现有什么不同,各位大哥来教教小弟吧,小弟觉得可能是小弟格式的问题,如果是这样,求各位大哥教教我该注意些什么格式问题,以及该怎么用debug来调试自己的程序,小弟写程序经常出错,小弟好郁闷啊!用debug也调不出,难道小弟一点天赋都没有吗?
作者: bobo1269219446 发布时间: 2010-11-06
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28