程序运行效果如下:
如题,程序可以实现四位十六进制数转换为十进制数
思路是,循环输入字符并将其转换为真实的数值(0-9的ASCII码减去30H,a-f的ASCII码减去57H)分别存入内存,再循环将这些数组合成想要的十进制数(用移位的方式实现,例:0001左移四位变为10000,变为原来的16倍),以循环除以10取余的方式得到各位上的结果,逐位输出。
具体代码如下:
DATAS SEGMENT
TWO DW 10 DUP(?) ;存放二进制数
TEN DB 5 DUP(?) ;存放十进制数
MSG1 DB 'Please input a hex number',13,10,'$'
MSG2 DB 'The dec number:',13,10,'$'
CRLF DB 13,10,'$'
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV BX,0
LEA DX,MSG1
MOV AH,9
INT 21H
INPUT:
MOV AH,1
INT 21H
SUB AL,30H
CMP AL,0
JL INIT
CMP AL,10
JL TOBIN
SUB AL,27H
CMP AL,0AH
JL INIT
CMP AL,10H
JGE INIT
TOBIN:
MOV CL,4
SHL BX,CL
MOV AH,0
ADD BX,AX
JMP INPUT
INIT:
MOV AX,BX
MOV BX,10
MOV SI,4
TODEC:
MOV DX,0
DIV BX
MOV [TEN+SI],DL
DEC SI
CMP AX,0
JNBE TODEC
LEA DX,CRLF
MOV AH,9
INT 21H
LEA DX,MSG2
MOV AH,9
INT 21H
OUTPUT:
INC SI
MOV DL,[TEN+SI]
ADD DL,30H
MOV AH,2
INT 21H
CMP SI,4
JNE OUTPUT
MOV AH,4CH
INT 21H
CODES ENDS
END START
思路参考文章:https://www.cnblogs.com/Zhang-Shangyu/p/5152393.html