| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1494 人关注过本帖
标题:判断输入的数字是否在-128~+127之间
只看楼主 加入收藏
hero2007
Rank: 1
来 自:湖北武汉
等 级:新手上路
威 望:1
帖 子:130
专家分:0
注 册:2007-3-22
收藏
 问题点数:0 回复次数:13 
判断输入的数字是否在-128~+127之间

我经过自己编程测试了BUF里面每个空间的内容,实际BUF(从[BUF+2]开始)每个空间对应输入的1个字符的ASCII码。

以下是通过TEST确定输入的数字的符号,正则输出1,负则输出-1,0则输出0
已经做到。里面判断输入的数字是否小于-128还没做完,输入一位、二位负数(第二位不大于2)结果为-1,第二位大于2则为ERROR!输入三位输出总为ERROR!达不到判定是小于-128则输出ERROR,大于-128则输出-1的目的。不知道错在哪?
DATAS SEGMENT
INPUT DB 'Please input a number:$'
OUTPUT1 DB 0AH,0DH,'ERROR!$'
BUF DB 20
DB ?
DB 20 DUP(?)
OUTPUT2 DB 0AH,0DH,'Y='
YH DB ?
YL DB ?
Z DB '$'
DATAS ENDS

STACKS SEGMENT
DB 200 DUP(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX

LEA DX,INPUT
MOV AH,9
INT 21H

MOV AH,10
LEA DX,BUF
INT 21H


TEST [BUF+2],0CFH
JZ ABOUTY3
TEST [BUF+2],0D2H
JZ ABOUTY2
JMP ABOUTY1

EXIT: MOV AH,4CH
INT 21H

ERROR: LEA DX,OUTPUT1
MOV AH,9
INT 21H
JMP EXIT

ABOUTY1:MOV YL,0
MOV YH,31H
LEA DX,OUTPUT2
MOV AH,9
INT 21H
JMP EXIT
ABOUTY2: TEST [BUF+6],0FFH
JNZ ERROR
TEST [BUF+4],0FFH
JZ ABOUTY21
TEST [BUF+5],0FFH
JZ ABOUTY21
CMP [BUF+4],'2'
JA ERROR
CMP [BUF+4],'2'
JB ABOUTY21
CMP [BUF+5],'8'
JA ERROR
JMP ABOUTY21
JMP EXIT

ABOUTY21:
MOV YH,2DH
MOV YL,31H
LEA DX,OUTPUT2
MOV AH,9
INT 21H
JMP EXIT
ABOUTY3:
MOV YH,30H
MOV YL,0
LEA DX,OUTPUT2
MOV AH,9
INT 21H
JMP EXIT

CODES ENDS
END START

[此贴子已经被作者于2007-4-29 16:04:06编辑过]

搜索更多相关主题的帖子: 数字 BUF 输入 判断 
2007-04-29 15:31
hero2007
Rank: 1
来 自:湖北武汉
等 级:新手上路
威 望:1
帖 子:130
专家分:0
注 册:2007-3-22
收藏
得分:0 
上面判断范围的方法出问题了,不知道错在哪?
我想换一种思路:
以判断输入的负数是否在-128到-1范围为例,输入的负数
[BUF+6]不为空则输出EROOR!为空则在[BUF+5]不为空
的前提下,分别取出[BUF+3]、[BUF+4]、[BUF+5]里的
内容(ASCII码)都减去30H,再分别乘100、10、1,求
和与128比较。[BUF+5]为空则直接跳转(在范围内)。

[此贴子已经被作者于2007-4-29 16:04:40编辑过]

2007-04-29 15:52
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 

你这种思路还是可以 我做个一次 不过用寄存器的时候要用好


   好好活着,因为我们会死很久!!!
2007-04-29 17:16
hero2007
Rank: 1
来 自:湖北武汉
等 级:新手上路
威 望:1
帖 子:130
专家分:0
注 册:2007-3-22
收藏
得分:0 
哦,能否具体点?
2007-04-29 21:04
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
在输入数的时候 先输入一个数字 在判断下一个是不是数字 如是的 就将前面的哪个数字乘10
在和才输入的数字相加 在判断输入的是不是数字 。。。。。。
这样 就把数输入进去拉撒
你不是这样的吗

   好好活着,因为我们会死很久!!!
2007-04-29 21:14
hero2007
Rank: 1
来 自:湖北武汉
等 级:新手上路
威 望:1
帖 子:130
专家分:0
注 册:2007-3-22
收藏
得分:0 
没看明白你说的。
2007-04-30 19:35
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用hero2007在2007-4-29 15:52:02的发言:
上面判断范围的方法出问题了,不知道错在哪?
我想换一种思路:
以判断输入的负数是否在-128到-1范围为例,输入的负数
[BUF+6]不为空则输出EROOR!为空则在[BUF+5]不为空
的前提下,分别取出[BUF+3]、[BUF+4]、[BUF+5]里的
内容(ASCII码)都减去30H,再分别乘100、10、1,求
和与128比较。[BUF+5]为空则直接跳转(在范围内)。


这种思路比较清晰


2007-04-30 20:18
hero2007
Rank: 1
来 自:湖北武汉
等 级:新手上路
威 望:1
帖 子:130
专家分:0
注 册:2007-3-22
收藏
得分:0 
照说最上面的一种思路也没问题的,后来发现
TEST [BUF+6],0FFH
JNZ ERROR
根本不起作用,没弄明白原因。
2007-04-30 22:18
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
不要用TEST,TEST不改变标志寄存器,用CMP试试

2007-04-30 22:27
hero2007
Rank: 1
来 自:湖北武汉
等 级:新手上路
威 望:1
帖 子:130
专家分:0
注 册:2007-3-22
收藏
得分:0 

DATAS SEGMENT
INPUT DB 'Please input a number:$'
OUTPUT1 DB 0AH,0DH,'ERROR!$'
BUF DB 20
DB ?
DB 20 DUP('A')
OUTPUT2 DB 0AH,0DH,'Y='
YH DB ?
YL DB ?
Z DB '$'
DATAS ENDS

STACKS SEGMENT
DB 200 DUP(?)
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX

LEA DX,INPUT
MOV AH,9
INT 21H

MOV AH,10
LEA DX,BUF
INT 21H


TEST [BUF+2],0CFH
JZ ABOUTY3
TEST [BUF+2],0D2H
JZ ABOUTY2
JMP ABOUTY1

EXIT: MOV AH,4CH
INT 21H

ERROR: LEA DX,OUTPUT1
MOV AH,9
INT 21H
JMP EXIT

ABOUTY1:MOV YL,0
MOV YH,31H
LEA DX,OUTPUT2
MOV AH,9
INT 21H
JMP EXIT
ABOUTY2: TEST [BUF+6],0BEH
JNZ ERROR
MOV YH,2DH
MOV YL,31H
LEA DX,OUTPUT2
MOV AH,9
INT 21H
JMP EXIT
ABOUTY3:
MOV YH,30H
MOV YL,0
LEA DX,OUTPUT2
MOV AH,9
INT 21H
JMP EXIT


CODES ENDS
END START

例如我把键盘缓冲区全部置'A'
那么通过
TEST [BUF+6],0BEH
JNZ ERROR
...
应该可以实现输入-3456输出ERROR!
输入-345则输出-1
而实际是,输入-345也输出ERROR!

[此贴子已经被作者于2007-4-30 22:32:33编辑过]

2007-04-30 22:31
快速回复:判断输入的数字是否在-128~+127之间
数据加载中...
 
   



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

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