Assembly 从任意基到任意基的程序集转换
我正在做一个程序来输入一个数字和基数,然后把这个数字转换成任意基数。在这个初始阶段,我从用户那里得到了数字和基数,问题是。。我怎样才能确认号码是否来自该基地Assembly 从任意基到任意基的程序集转换,assembly,numbers,base,Assembly,Numbers,Base,我正在做一个程序来输入一个数字和基数,然后把这个数字转换成任意基数。在这个初始阶段,我从用户那里得到了数字和基数,问题是。。我怎样才能确认号码是否来自该基地 NUMBER_INPUT PROC jmp @again @ERROR: LEA DX, ILLEGAL MOV AH, 9 INT 21H @AGAIN: print num
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
唯一的方法-如果没有将数字基数表示为数字表示的一部分的约定,则使数字基数明确无误的唯一方法是检测任何数字的数值是否大于或等于预期的数字基数。但即使指定了基数,您仍然需要检查所有数字的合法性,以避免产生垃圾输出。例如,表示值“10”的数字“A”可能不会以基数10出现。“8”在以8为基数或更低的数字中没有位置。对于十六进制,可能没有“G”(我们将数字值16赋给它)是非法的。您可能希望将转换器限制为基数36,因为表示数字的有意义符号将用尽,因为基数36可能使用0-9,A-Z