+ -
当前位置:首页 → 问答吧 → 小弟一个天大的困惑,上次小弟向一位牛人请教了自己数字钟的错误,他教我改的地方我都改了,可还是不能计时,可我将他改给我的代码粘贴上去却行了,小弟又前前后后比对了2

小弟一个天大的困惑,上次小弟向一位牛人请教了自己数字钟的错误,他教我改的地方我都改了,可还是不能计时,可我将他改给我的代码粘贴上去却行了,小弟又前前后后比对了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

作者: 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

作者: bobo1269219446   发布时间: 2010-11-06

前面一个是小弟改的,后面一个是牛人改的叫nanlingcg ,可能大家都认识他了,小弟我前前后后比对了20多次,硬是没发现有什么不同,各位大哥来教教小弟吧,小弟觉得可能是小弟格式的问题,如果是这样,求各位大哥教教我该注意些什么格式问题,以及该怎么用debug来调试自己的程序,小弟写程序经常出错,小弟好郁闷啊!用debug也调不出,难道小弟一点天赋都没有吗?

作者: bobo1269219446   发布时间: 2010-11-06