汇编语言:十进制数转二进制

设计完整的8086汇编源程序,其功能是通过键盘把多位的十进制转换为二进制数,并通过显示器显示出来。

         题目分析:

本汇编源程序包括以下模块:

         ⑴利用计算机系统调用功能实现数据输入,并把输入的ASCⅡ码转换为扩展的BCD码;

         ⑵设计一个算法,把多位的BCD码转换为多位的二进制数;

         ⑶利用计算机系统调用功能实现数据输出,把二进制数转换为ASCⅡ码显示出来。

         程序设计如下变量:

ASCⅡ码数组X_ASCⅡ码,用于存放输入的ASCⅡ码串;

BCD码数组X_BCD,用于存放转换的BCD码串;

二进制数数组Y_HEX,用于存放多位二进制数,变量定义如下:

DATA         SEGMENT

         BUFFER    DB    32                                 ;允许输入字符数目为32

         CHAR_L    DB    0                                   ;实际输入字符串的长度

         X_ASC       DB    32 DUP(0)                  ;定义ASCⅡ码串

         X_BCD      DB    32 DUP(0)                  ;定义BCD码串

         Y_HEX      DB    16 DUP(0)                  ;定义二进制数数组

         TMP          DB    16 DUP(0)                  ;工作单元

DATA         ENDS

         源程序主程序部分流程图如图1所示。

         模块一:键盘输入ASC码可以直接采用10号系统调用实现,将其转换为BCD数,只需将数字高4位清“0”即可。

         模块二:将BCD数转换为二进制是本程序的难点,转换原理可根据以下公式:

yhex=i=0N-1di×10i                                                    (1)

其中,di是十进制数码,下标i表示第i位,N表示十进制长度,如果计算用二进制法则进行,则完成十进制到二进制的转换。

         本程序可以处理的十进制数位数最多可达32位,所以采用迭代的方法显示转换,将公式(1)进行变换,得:

yhex=yhex×10+di

该部分流程图如图2所示。

开始

通过键盘输入ASC码数字

ASC码转换为BCD

BCD数转换为二进制数

把二进制数转换为ASC码显示

结束

图1 主程序流程图

图2 BCD转换为二进制数程序流程图

Y

开始

Y_HEX=0,i=十进制数长度

Xi

计算Y_HEX=10 Y_HEX+di

i=i-1

返回

i=0

本代码尽可以将0-255的十进制数转成二进制数,老师题目是32位十进制数,能力有限,决定摆烂。

DATA	SEGMENT
	BUFFER	DB	32				;允许输入字符数目为32
	CHAR_L	DB	0				;实际输入字符串的长度
	X_ASC	DB	32 DUP(0)		;定义ASCⅡ码串
	X_BCD	DB	32 DUP(0)		;定义BCD码串
	Y_HEX	DB	16 DUP(0)		;定义二进制数数组
	TMP		DB	16 DUP(0)		;工作单元
DATA	ENDS
assume cs:code,ds:data
code segment
start: mov ax,data
        mov ds,ax

		MOV DX,OFFSET BUFFER	;把偏移地址给DX,也可以用 LEA DX,BUF  二者皆可
		MOV AH,0AH	 ;键盘输入的时候,给AH  10
		INT 21H		 ;然后INT 21H调用,默认输入到BUF中
		mov bx,0
		lea si,BUFFER
		add si,2
com:	mov al,[si] 
		sub al,30h
		cmp [si+1],0dh
		ja l1 

		add bh,al
		mov bl,bh
  		mov cx,8
LP1:	rol bl,1
		mov dl,0
		adc dl,30h
		mov ah,02h
		int 21h
		loop LP1
		mov ah,4ch
        int 21h

l1: 	add al,bh
		mov bl,0AH
		MUL bl
		mov bh,al
		inc si
		call com
		
code ends
end start

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值