汇编学习-程序改进:四位十六进制数转化为十进制数

程序运行效果如下:
在这里插入图片描述
如题,程序可以实现四位十六进制数转换为十进制数
思路是,循环输入字符并将其转换为真实的数值(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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值