汇编——将5位十进制数的ASCII串转换为一个字的二进制,然后在屏幕上以16进制形式输出

本文介绍了一种将十进制数转换为二进制,进而转换为十六进制数的汇编语言实现方法。通过具体的代码示例,详细解释了如何在内存中进行数值转换,并最终在屏幕上输出转换后的十六进制形式。

十进制转化为二进制数的方法:从十进制数的最高位开始做乘10加次高位的操作,依次类推,即可求出二进制数的结果,这里二进制的意思是在内存中的存储形式。

文章中的例子是在缓冲区中有5个十进制数的ASCII码值,然后将这5个十进制数转化成一个字大小的二进制数,最后转化成16进制形式输出在屏幕上。

DDATA	SEGMENT
MES	DB	'The ascii code of decimal code are:$'
BUF	DB	30H,30H,39H,31H,32H         
		DB	10H DUP(0)
DDATA	ENDS
CODE SEGMENT
		ASSUME CS:CODE,DS:DDATA
START:	MOV    	AX,DDATA
		MOV		DS,AX
		MOV		SI,OFFSET BUF
		MOV		BL,0AH                ;送被乘数
		MOV 	CX,0004H              ;送转换位数
		MOV    	 AH,00H              
		MOV 	AL,[SI]               ;取第一位ASCII码
		SUB 	AL,30H
A1: 	INC     SI
		IMUL    BL                    ;乘10
		ADD 	AL,[SI]
		SUB 	AL,30H
		LOOP 	A1
	   	MOV     BX,AX
		MOV		DX,OFFSET MES            ;显示提示信息
		MOV		AH,09H
		INT		21H
		MOV     AX,BX                    ;显示结果
		MOV     CX,4
A3:	PUSH   	CX
		MOV    	CL,4
		ROL    	AX,CL
		POP    	CX
		MOV    	BX,AX			;用BX保存AX移位之后的结果,之后再将保存的结果回送给AX,AX经过四次移位,四次分别处理16位,依次输出16进制的4位
		AND    	AL,0FH
		CMP    	AL,0AH	
		JB     	A2		
		ADD    	AL,07H		
A2:  	ADD    	AL,30H		
		MOV     DL,AL		
		MOV     AH,02H
		INT     21H
	  	MOV    	AX,BX			;将存在BX中AX移位结果回送给AX,
   		LOOP   	A3
   		MOV    	AH,4CH		
		INT   	21H
CODE	ENDS
		END	START

16-20行代码的功能是将十进制数串转化成二进制,用的就是文章开头讲的那个方法。

21行代码 用BX寄存器作先将AX的值保存一下。

25-41行的代码就是将已经转化成二进制的十进制数转化成16进制的形式输出在屏幕上。 整个转化过程分一共循环四次,因为AX是16位寄存器,存了一个字大小的数据,要将这个数据转化成16进制,每4位一组,所以16进制是4位表示。每一次循环,AX左移4位,并用BX将移位的结果保存下来,然后一次循环处理完之后,再将BX中存的值回送给AX,转换成16进制后输出显示;下一次循环的时候,AX又右移4位,BX保存,以此循环,四次操作之后,AX的值被处理成了4位表示的16进制。

33-36行的代码作用:其中0H~ 9H之间的数加30H,即可得0H~ 9H的ASCII码,而AH~FH的ASCII码,则需再加7H。

测试结果,十进制912对应的16进制数就是0390.
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值