| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1494 人关注过本帖
标题:判断输入的数字是否在-128~+127之间
只看楼主 加入收藏
hero2007
Rank: 1
来 自:湖北武汉
等 级:新手上路
威 望:1
帖 子:130
专家分:0
注 册:2007-3-22
收藏
得分:0 
以下是引用菜鸟上路在2007-4-30 22:27:38的发言:
不要用TEST,TEST不改变标志寄存器,用CMP试试

我是用DOS10号功能调用实现输入数字的,我测试过,输入的数字都当字符串处理了。BUF从[BUF+2]开始每个空间对应一个字符的ASCII码,输入的负数并不是按其补码存储的。即使把BUF定义为DW类型,输入的负数也并未按其补码存储。
将TEST改为CMP,达不到效果,因为这里我想实现的是测试某一位是否存入数字。
看来只能用我的第二种思路了,将输入的数字个位、十位、百位分别乘1、10、100求和,存入一个空间,再将128存入一个空间,两者比较判断。

2007-04-30 23:00
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
存储还是原码,但运算是补码

2007-05-02 13:45
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]为空则直接跳转(在范围内)。

没完全实现:
DATAS SEGMENT
INPUT DB 'Please input a number:$'
OUTPUT1 DB 0AH,0DH,'ERROR!$'
DAT1 DW ?
DAT2 DW ?
DAT3 DW ?
DAT4 DW ?
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
JMP EXIT

EXIT: MOV AH,4CH
INT 21H

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

ABOUTY1: TEST [BUF+5],0BEH
JNZ ERROR

CMP [BUF+3],'0'
JB ABOUTY11
CMP [BUF+3],'9'
JA ABOUTY11
CMP [BUF+4],'0'
JB ABOUTY11
CMP [BUF+4],'9'
JA ABOUTY11

MOV AL,[BUF+2]
SUB AL,30H
MOV CL,100
MUL CL
MOV DAT1,AX

MOV AX,0
MOV AL,[BUF+3]
SUB AL,30H
MOV CL,10
MUL CL
MOV DAT2,AX

MOV AX,0
MOV BX,DAT1
MOV CX,DAT2
ADD BX,CX
MOV DAT3,BX

MOV AX,0
MOV AL,[BUF+4]
SUB AL,30H
MOV CX,DAT3
ADD AX,CX
MOV DAT4,AX

MOV CX,0
MOV CX,127
MOV AX,DAT4
CMP AX,CX
JNA ABOUTY11
JMP ERROR
JMP EXIT
ABOUTY11: MOV YL,0
MOV YH,31H
LEA DX,OUTPUT2
MOV AH,9
INT 21H
JMP EXIT
ABOUTY2:
CMP [BUF+4],'0'
JB ABOUTY21
CMP [BUF+4],'9'
JA ABOUTY21
CMP [BUF+5],'0'
JB ABOUTY21
CMP [BUF+5],'9'
JA ABOUTY21

MOV AL,[BUF+3]
SUB AL,30H
MOV CL,100
MUL CL
MOV DAT1,AX

MOV AX,0
MOV AL,[BUF+4]
SUB AL,30H
MOV CL,10
MUL CL
MOV DAT2,AX

MOV AX,0
MOV BX,DAT1
MOV CX,DAT2
ADD BX,CX
MOV DAT3,BX

MOV AX,0
MOV AL,[BUF+5]
SUB AL,30H
MOV CX,DAT3
ADD AX,CX
MOV DAT4,AX

MOV CX,0
MOV CX,128
MOV AX,DAT4
CMP AX,CX
JNA ABOUTY21
JMP ERROR
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-05-05 00:46
hero2007
Rank: 1
来 自:湖北武汉
等 级:新手上路
威 望:1
帖 子:130
专家分:0
注 册:2007-3-22
收藏
得分:0 

新思路(已实现):

首先判断输入的数字是正还是负,接着判断位数,大于三位就溢出了,是三位的话,比较第1位,大于1则溢出,是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

CMP BUF+1,4
JA ERROR

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: CMP [BUF+1],3
JA ERROR
CMP BUF+1,2
JNA ABOUTY11
CMP [BUF+2],'1'
JA ERROR
CMP [BUF+3],'2'
JA ERROR
CMP [BUF+3],'2'
JB ABOUTY11
CMP [BUF+4],'7'
JA ERROR
JMP ABOUTY11
JMP EXIT

ABOUTY11:MOV YL,0
MOV YH,31H
LEA DX,OUTPUT2
MOV AH,9
INT 21H
JMP EXIT

ABOUTY2:
CMP BUF+1,3
JNA ABOUTY21
CMP [BUF+3],'1'
JA ERROR
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-5-5 23:33:21编辑过]

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



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

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