用汇编实现十六进制数向十进制数的转换

用汇编实现十六进制数向十进制数的转换

一、实现功能

实现一位十六进制数向十进制数的转换。

二、设计分析

      汇编语言中,字符在机器中都是以ascii码的二进制格式存储,但是汇编语言写的时候常用十六进制,因此需要好好看看ascii码的十六进制表。

      特别是进制转换一定要注意,机器中存储的是数的二进制数本身,而我们输入输出的是数的ascii码的值,因此注意对寄存器中数的加减操作

  1. 实现十六进制数向十进制数的转换,先输入一位16进制数,判断输入字符的ascii码在30H-39H(0-9)之间,还是在41H-46H(A-F)之间,或者是在61H-66H(a-f)之间。如果是第一种情况则SUB DL,30H,如果是第二种情况则SUB DL,37H,如果是第三种情况则SUB DL,57H。

  2. 接下来需要将DL中的二进制数转换为十进制数输出。这里我选择将DX除以10,商在AL中,用来表示十位数,余数在AH中,用来表示个位数,如果商是0,则不用输出;如果商是1,则ADD AH,30H,输出AH。余数ADD AL,30H,输出AL。即可得到16进制对应的十进制数。

  3. 注意输出的字符的值是不等于机器中存放的二进制的值,因此需要进行加减法)最后输出对应的16进制的ascii码的值。

  4. 十六进制数向十进制数的转换流程图:
    在这里插入图片描述

三、源代码

DATA SEGMENT
	TIP DB 'INPUT THE NUMBER: ','$'
	TIP1 DB '  <=>  ','$'
DATA ENDS

CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
	MOV AX,DATA
	MOV DS,AX
	LEA DX,TIP
	MOV AH,09H
	INT 21H

INPUT:
	MOV AH,1
	INT 21H
	CMP AL,30H
	JB EXIT
	CMP AL,39H
	JA COMPER1
	JMP CHANGE1    ;0~9之间
COMPER1:
	CMP AL,41H
	JB EXIT
	CMP AL,46H
	JA COMPER2
	JMP CHANGE2    ;在A-F之间
COMPER2:
	CMP AL,61H
	JB EXIT
	CMP AL,66H
	JA EXIT
	JMP CHANGE3    ;在a~f之间

CHANGE1:
	SUB AL,30H
	JMP ENT
CHANGE2:
	SUB AL,37H
	JMP ENT
CHANGE3: 
	SUB AL,57H
	JMP ENT
ENT:
	MOV BL,AL
	LEA DX,TIP1
	MOV AH,09H
	INT 21H
	MOV AL,BL
	MOV AH,0
	MOV BL,10
	DIV BL
	MOV DH,AH
	CMP AL,0
	JE ONE
	MOV DL,AL      ;十位数是1
	ADD DL,30H
	MOV AH,02H
	INT 21H
ONE:	                        ;十位数是0
	MOV DL,DH
	ADD DL,30H
	MOV AH,02H
	INT 21H
EXIT:
	MOV AH,4CH
	INT 21H
CODE ENDS
END START
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值