接口技术实验二、BCD码转换为二进制码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39071593/article/details/83099480

BCD码转换为二进制码

BCD码分为组合码和未组合BCD码。组合BCD码每字节存放两位BCD数,未组合BCD码每字节只存放一位BCD数,高半字节为0。组合BCD码加、减后必须用DAA和DAS指令进行调整(乘法或除法没有调整指令)。未组合BCD码则可进行加、减、乘、除四则运算,其调整指和令分别为AAA,AAS,AAM和AAD。
组合BCD码转换为二进制数的算法通过实例说明如下。
一个用组合BCD码表示的数可以用其按权展开式表示。例如
2497=2×1000+4×100+9×10+7×1
=2×3E8H+4×64H+9×0AH+7×1H
由此,逐位转换后相加便可得到结果。
改为另一种表示方法,可以写成
2497=(((2×10)+4)×10+9)×10)+7
10=8+2。于是便可以采用循环结构程序来完成转换。
本实验是要把两位未组合BCD码数转换成二进制数。
设未组合BCD码已存放在起始地址为CS:150H的区域,把它们转换为二进制数后,再分别存入起始地址为CS:165H的区域。例如
ORG 150H
DB 03H,06H,08H,09H,06H,05H,02H,09H
则转换后CS:165H开始的单元的内容为:
CS:165H 24H,00H,59H,00H,41H,00H,1DH,00H

BCD码转换为二进制码程序流程图
BCD码转换为二进制码程序流程图

记得先用e命令存入在起始地址为CS:150H的区域DB
在这里插入图片描述
代码
在这里插入图片描述
用t命令逐句运行结果
在这里插入图片描述

解释:

  • MOV CX,0004 ;LOOP会根据CX的数值循环,比如现在为4就循环4次
  • 变址寄存器是指寄存器ESI、EDI、SI和DI的寄存器,它们主要用于存放存储单元在段内的偏移量。
  • MOV AL,[DI] ;把150的数据赋值给AL,此时AL为03H,同时循环在这开始
  • MOV DL,[DI+1];DI为了存放个位的数06,为了等一下AL*10后与其相加
  • AL要乘10,可以把10变成(2+8)相当于进位3次的AL加上进位1次的AL相加得到AL乘10,记得SHL AL,1
  • LOOP 0106;指向循环开始的地方,千万别指向0103,不然只有显示24结果

猜你喜欢

转载自blog.csdn.net/qq_39071593/article/details/83099480