实验三 数码转换程序实验
一、实验目的
掌握不同进制数及编码相互转换的程序设计方法。
二、实验内容及说明
计算机输入设备输入的信息一般是由ASCII 码或BCD 码表示的数据或字符,CPU 一般均 用二进制数进行计算或其他信息处理,处理结果的输出又必须依照外设的要求变为ASCII 码、BCD 码或七段显示码等。因此,在应用软件中,各类数制的转换和代码的转换是必不可少的。计算机与外设间的数码转换关系如图3-1 所示。数码转换对应关系表3-1。 表3-1 数码转换对应关系表 十六进制数 0 1 2 3 4 5 6 7 8 9 A B C D E F BCD 码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 二进制机器码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 ASCⅡ码 共阳 30H 31H 32H 33H 34H 35H 36H 37H 38H 39H 41H 42H 43H 44H 45H 46H 40H 79H 24H 30H 19H 12H 12H 78H 00H 18H 08H 03H 46H 21H 06H 0EH 七段码 共阴 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 67H 77H 7CH 39H 5EH 79H 71H
1.将ASCII 码表示的十进制数转换为二进制数
nn-10i
十进制数可以表示为:Dn ×10 +Dn-1 ×10+…+D0 ×10 =Di×10 中Di代表十进制
数 1、2、3 ... 9、0。
i
上式可以转换为:∑Di×10=((…Dn ×10+Dn-1 )×10)+ Dn-2)×10+…+Di ) ×10+D0 由上式可归纳十进制数转换为二进制的方法:从十进制数的最高位D 开始作乘10 加次位的操作,依次类推,则可求出二进制数结果。
- 11 -
二进制 ASCII码 键盘、光机电 BCD码 拨码开关 二进制 数据开关 ASCII码 CRT显示、打印机 主机段码 多段显示 位码 位显示
图3-1 计算机与外设间的数码转换关系
本实验要求将缓冲区中的一个五位十进制数00012 的ASCII 码转换成二进制数,并将转换结果按位显示在屏幕上。转换过程的参考流程如图3-2 所示。
开始
确定转换数的位数n
CX = N-1
取第一位ASCII码
减30H
乘以10
加下一位ASCII码减30H
N 转换完否?
Y
送屏幕显示
图3-2 十进制ASCII 转换为二进制数参考流程
2 .将十进制数的ASCII 码转换为BCD码
本实验要求将键盘输入的一个五位十进制数 54321的ASC Ⅱ码存放在数据区中,转换
- 12 -
为BCD码后 ,将转换结果按位分别显示于屏幕上。若输入的不是十进制数的ASCⅡ码,则输 出“FF”。提示:一字节ASCⅡ码取其低四位即变为BCD 码。转换部分的实验流程参见3-3。
开始 确定转换数的位数 n CX = N 取数 N 是否0-9的ASCII吗? Y BL = ASCII-30H 保存BL到相应单元 N 转换完否? Y 送屏幕显示 图3-3 十进制数的ASCII 码转换为BCD码参考流程
BL = 0FFH
3 .将十六进制数的ASCII 码转换为十进制数
十六位二进制数值域0-65535,最大可转换为五位十进制数。五位十进制数可表示为:
ND = D4×104 + D3×103 + D2×102 + D1×101 +D0
因此,将十六位的二进制数转换为5位ASCII 码表示的十进制数,就是求D1 - D4 ,并将它们转化为ASCII码供显示。
本实验要求将缓冲区中存放的000CH的ASCII码转换为十进制数,并将转换结果显示在屏幕上。其实验流程图见图3-4。
- 13 -
开始 取出转换数 SI指向存储单元的尾地址 SI = SI-1 AX = 转换数 AX除以10,AX = 商,DX = 余数 将余数转化为ASCII码并保存 N 商为0? Y 将余下位填充为0 送屏幕显示 图3-4 将十六进制数的ASCII 码转换为十进制数参考流程
4.BCD码转换为二进制码
本实验要求将四个二进制的BCD码存放在某一单元中,转换出的二进制数码存入其后的内存单元中,转换结束送屏幕显示。参考流程图见图3-5。
开始 送屏幕显示 CX = 转换的个数取 Y
N
商为0? 取数的个位 乘以10 将指针指向下一个数 取数的十位,与个位相加 保存到相应单元 图3-5 BCD 码转换为二进制码参考流程
- 14 -
三、实验步骤
(1) 运行DVCCJH32P 软件,选择编辑Edit 菜单,根据实验内容描述的数码转换内容分别编写实验程序。
(2) 使用“ASM编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。汇编、连接无误的话,就直接运行程序。观察运行结果。
(3) 或使用动态调试,进入调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。
(4) 更改数据区中的数据,考察程序的正确性。
四、参考程序
1.将ASCII 码表示的十进制数转换为二进制数
实验源文件名DVA3_1.ASM(在文件夹“ASM_汇编例程”中) 实验程序清单如下: STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS
DDATA SEGMENT
MES DB 'The ascii code of decimal code are:$' BUF DB 30H,30H,30H,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 BX,000AH MOV CX,0004H MOV AH,00H MOV AL,[SI] SUB AL,30H A1: IMUL BX
ADD AL,[SI+01] SUB AL,30H INC SI LOOP A1
MOV [SI],AX
- 15 -