我经过自己编程测试了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编辑过]