+ -
当前位置:首页 → 问答吧 → 给出一个BCD数,怎么将其转成ASCII值存储?

给出一个BCD数,怎么将其转成ASCII值存储?

时间:2010-11-18

来源:互联网


汇编初学者求助!!!!

作者: as86878   发布时间: 2010-11-18

网上这类的例子很多, 比如下面这个例子:

题目要求:编制一个完整的程序,将一字节压缩BCD码转换为两个ASCII码,并将结果存放在ASC和ASC+1单元,按高位存低地址、低位存高地址的格式存放。

解题分析:一字节压缩BCD码是两位0~9的数字,4位二进制数对应一位BCD码。所以关键是要将两个4位二进制数分离开来。“分离”可以用移位指令和逻辑运算指令来实现,然后用加30H的加法,便可以得到相应的ASCII码。

程序清单:

DATA SEGMENT

BCD DB 98H

ASC DB ?,?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV CL,4

MOV AL,BCD ;将BCD码存放到AL和BL

MOV BL,AL

SHR AL,CL ;右移4位,高4位移到低4位

ADD AL,30H ;得到高位的ASCII码

MOV ASC,AL

AND BL,0FH ;清高4位

ADD BL,30H ;得到低位的ASCII码

MOV ASC+1,BL

MOV AH,4CH

INT 21H

CODE ENDS

END START

此程序经汇编后对应的列表文件

右移4位相当于除以16,所以也可用除法指令实现。程序段为:

MOV AL,BCD

MOV BL,16

XOR AH,AH ;扩展到16位

DIV BL ;商在AL,余数在AH

ADD AL,30H ;高位的ASCII码

MOV ASC,AL

ADD AH,30H ;低位的ASCII码

MOV ASC+1,AH

作者: masmaster   发布时间: 2010-11-18