博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编——将5位十进制数的ASCII串转换为一个字的二进制,然后在屏幕上以16进制形式输出
阅读量:4181 次
发布时间:2019-05-26

本文共 1498 字,大约阅读时间需要 4 分钟。

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

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

DDATA	SEGMENTMES	DB	'The ascii code of decimal code are:$'BUF	DB	30H,30H,39H,31H,32H         		DB	10H DUP(0)DDATA	ENDSCODE SEGMENT		ASSUME CS:CODE,DS:DDATASTART:	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,30HA1: 	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,4A3:	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   	21HCODE	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.

在这里插入图片描述

转载地址:http://rgqai.baihongyu.com/

你可能感兴趣的文章
CMake手册详解 (十五)
查看>>
map::lower_bound/upper_bound的使用
查看>>
C++ STL中Map的按Key排序和按Value排序
查看>>
互斥量、条件变量与pthread_cond_wait()函数的使用,详解
查看>>
IO模式设置网络编程常见问题总结
查看>>
windows 编译webrtc 58版本库
查看>>
git tag操作教程
查看>>
Ubuntu系统中git每次提交都要输入密码怎么办?
查看>>
constexpr关键字
查看>>
std::copy详解
查看>>
C++11 新特性摘抄
查看>>
WebRTC学习之函数的异步执行
查看>>
WebRTC 的 PROXY - 如何解决应用中的线程乱入
查看>>
Android Audio回声消除学习笔记
查看>>
Android AudioRecord和AudioTrack介绍
查看>>
Mac系统升级Git
查看>>
vs2017 编译webrtc warning C4005: “AF_IPX”: 宏重定义的解决办法
查看>>
std::max、std::min error C2589: “(”:“::”右边的非法标记,error C2059: 语法错误:“::”
查看>>
在Ubuntu Server上编译FFmpeg
查看>>
git 切换到远程分支
查看>>