NUMBER_INPUT PROC
jmp @again
@ERROR:
LEA DX, ILLEGAL
MOV AH, 9
INT 21H
@AGAIN:
print num
MOV CX, 8
XOR BX, BX
MOV AH, 1
@INPUT:
INT 21H
CMP AL, 0DH
JE @END
CMP AL, 30H
JL @ERROR
; CMP AL, 31H
; JG @ERROR
AND AL, 0FH
SHL BX, 1
OR BL, AL
LOOP @INPUT
@END:
RET
NUMBER_INPUT ENDP
BASE_INPUT PROC
JMP @AGAIN
@ERROR:
LEA DX, ILLEGAL
MOV AH, 9
INT 21H
@AGAIN:
print base
MOV CX, 2
XOR DX, DX
MOV AH, 1
@INPUT:
INT 21H
CMP AL, 0DH
JE @END
CMP AL, 30H
JL @ERROR
AND AL, 0FH
SHL DX, 1
OR DL, AL
LOOP @INPUT
@END:
RET
BASE_INPUT ENDP
答案 0 :(得分:0)
唯一的方法 - 如果没有约定来表示作为数字表示的一部分的数字基数,使数字基数明确,则检测任何数字的数值是否大于或等于预期的数字基数。但即使指定了数字基数,您仍然需要检查所有数字的合法性,只是为了避免产生垃圾输出。数字" A"代表价值" 10"基数10可能不会出现。" 8"没有数字基数8和更低的位置。并且可能没有" G" (我们将数值16定义为)对于十六进制是非法的。您可能希望将转换器限制为基数36,因为您使用了有意义的符号来表示数字,因为基数36可以使用0-9,A-Z。