| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 668 人关注过本帖
标题:[求助]新人举双手求助!
只看楼主 加入收藏
ningcc
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-6-3
收藏
 问题点数:0 回复次数:2 
[求助]新人举双手求助!

这是我编的一道秒表显示的程序,理论上应该没错,我知道就差一点了,但就是调不出来,老显示溢出,我想可能是PUSH和POP没用好的问题,望有高手能帮忙看看,新人感激不尽.......
其功能是按一下空格秒表开始计数,再按一下空格则暂停,再按空格则继续计数,按ESC返回DOS。

DATA SEGMENT
BUF DB '0','0',3AH,'0','0','$'
DATA ENDS ;段定义结束
CODE SEGMENT
ASSUME CS:CODE,DS:DATA

MAIN PROC FAR

START:
MOV AX,DATA ;DS初始化
MOV DS,AX
;================================================================
MOV AH,0BH ;判断有无键输入
INT 21H
CMP AL,0FFH
JE BEGIN ;若有,则跳到BEGIN
PUSH2: CALL DISPLAY1 ;若无,则显示BUF内容
BEGIN:
MOV AH,7 ;输入一个按键
INT 21H
CMP AL,20H
JE PROCESS ;若是空格,则跳转到PROCESS开始计数
CMP AL,1BH
JE EXIT ;若是ESC,则跳转到EXIT返回DOS
JMP BEGIN ;循环判断输入按键
;=================================================================
EXIT: ;返回DOS
MOV AH,4CH
INT 21H
;=================================================================
PROCESS:
MOV AX,0000H ;寄存器清零
MOV BX,0000H
MOV CX,0000H
MOV DX,0000H
PUSH AX ;堆栈保护
PUSH BX
PUSH CX
PUSH DX
;=================================================================
DELAY:
MOV BX,0A4H ;延时10MS子程序
LP2: MOV CX,0FFFFH
LP1: NOP
LOOP LP1
DEC BX
MOV CX,BX
LOOP LP2
;=================================================================
POP DX ;寄存器出栈
POP CX
POP BX
POP AX
INC CX ;CX中存毫秒,加一
PUSH CX ;保存加一后的值
CMP CX,100 ;判断是否计到99毫秒
JB HAOMIAO ;若没有则跳转到HAOMIAO将其值转换

MOV CX,0000H ;若计到100毫秒,清0
INC BX ;BX中存秒值,加一
PUSH BX ;保存加一后的值
CMP BX,60 ;判断是否计到60秒
JE PROCESS ;若是则返回到PROCESS重新开始计时
MOV AX,BX ;若没有计到60秒,则将BX值转换为16进制用于显示
MOV BL,10
DIV BL ;BX值除以10
MOV BX,AX
MOV AH,BL ;商
OR AH,30H
MOV AL,BH ;余数
OR AL,30H
JMP LOAD ;将秒值装入BUF数据段中
CALL DISPLAY1 ;显示BUF数据段内容
JMP DELAY ;继续计时

HAOMIAO:
MOV DX,CX
MOV CL,10
DIV CL ;CX值除以10
MOV CX,DX
MOV DH,CL ;商
OR DH,30H
MOV DL,CH ;余数
OR DL,30H
JMP LOAD ;将毫秒值装入BUF数据段中

LOAD: ;装载要显示的值
MOV BUF,AH
MOV BUF+1,AL
MOV BUF+3,DH
MOV BUF+4,DL


CALL DISPLAY1 ;调用显示子程序

MOV AH,0BH ;判断有无键输入
INT 21H
CMP AL,0FFH
JE PUSH1 ;若有,则跳转到PUSH1
JMP DELAY ;若无,则继续计时
;=================================================================
PUSH1:
MOV AH,7 ;输入一按键
INT 21H
CMP AL,20H
JE PUSH2 ;若是空格,则跳转到PUSH2,计时暂停
CMP AL,1BH
JE EXIT1 ;若是ESC,则跳转到EXIT,返回DOS
JMP DELAY
;=================================================================
EXIT1:
MOV AH,4CH
INT 21H
;=================================================================
DISPLAY1 PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX

MOV CX,5 ;逐个显示BUF数据段中的数据
LEA SI,BUF
XS: MOV DL,BUF[SI] ;XS为显示循环标号
MOV AH,02H
INT 21H
INC SI
LOOP XS

MOV DL,0DH ;覆盖显示数据
MOV AH,02H
INT 21H

POP DX
POP CX
POP BX
POP AX
RET
DISPLAY1 ENDP
;==================================================================
MAIN ENDP
CODE ENDS
END START

搜索更多相关主题的帖子: 新人 双手 
2007-06-08 00:10
ningcc
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-6-3
收藏
得分:0 

为什么就是没人帮我???

2007-06-08 19:08
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
HAOMIAO那里错了,除法运算的被除数一定要放在AX中,不能是CX
AL是商,AH是余数

2007-06-09 10:15
快速回复:[求助]新人举双手求助!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025239 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved