admin 管理员组

文章数量: 887021


2024年1月25日发(作者:linux的mkdir)

二进制数转换为BCD

作者:佚名

来源:不详

录入:Admin

更新时间:2008-7-26 20:09:41

点击数:2

【字体:

本例为单字节二进制数(0X20)转换为非压缩BCD 码,存在0X25,0X24,0X23

中,0X25 为百位,0X23 为个位。

main: MOV a,@0xa4 ;赋值

MOV 0x20,a

MOV 0x21,a

MOV 0x22,a

MOV a,@0x0 ;0x23,0x24,0x25 单元清0

MOV 0x23,a

MOV 0x24,a

MOV 0x25,a

MOV a,@0x64 ;对100 的个数计数

MOV 0x26,a

MOV a,@0x25 ;百位存在0x25 中

MOV 0x04,a

call a0 ;调计数子程

MOV a,@0x0a ;对10 的个数计数

MOV 0x26,a

dec 0x04 ;个位存在0x24 中

call a0

MOV a,0x22 ;除去百位,十位,余下的即个位,存入0x23

MOV 0x23,a

self: jmp self

a0: ;计数子程

MOV a,0x26

sub 0x22,a

jbs 0x03,2

jmp a1

inc 0x00 ;无余数则对应位加1

MOV a,@0x0 ;0x21 与0x22 在返回时应保持相同

MOV 0x21,a

ret

a1: jbs 0x03,0 ;小于则跳a2

jmp a2

inc 0x00 ;大于则计数值加1

MOV a,0x22

MOV 0x21,a ;将0x22 保存到0x21 中

jmp a0 ;跳回a0 继续计数

a2: MOV a,0x21 ;0x21 中保存的减之前的数据,此时恢复到0x22

MOV 0x22,a

ret

eop

本例为单字节二进制数(0X20)转换为非压缩BCD 码,存在0X25,0X24,0X23 中,0X25 为百位,0X

23 为个位。

main: MOV a,@0xa4 ;赋值

MOV 0x20,a

MOV 0x21,a

MOV 0x22,a

MOV a,@0x0 ;0x23,0x24,0x25 单元清0

MOV 0x23,a

MOV 0x24,a

MOV 0x25,a

MOV a,@0x64 ;对100 的个数计数

MOV 0x26,a

MOV a,@0x25 ;百位存在0x25 中

MOV 0x04,a

call a0 ;调计数子程

MOV a,@0x0a ;对10 的个数计数

MOV 0x26,a

dec 0x04 ;个位存在0x24 中

call a0

MOV a,0x22 ;除去百位,十位,余下的即个位,存入0x23

MOV 0x23,a

self: jmp self

a0: ;计数子程

MOV a,0x26

sub 0x22,a

jbs 0x03,2

jmp a1

inc 0x00 ;无余数则对应位加1

MOV a,@0x0 ;0x21 与0x22 在返回时应保持相同

MOV 0x21,a

ret

a1: jbs 0x03,0 ;小于则跳a2

jmp a2

inc 0x00 ;大于则计数值加1

MOV a,0x22

MOV 0x21,a ;将0x22 保存到0x21 中

jmp a0 ;跳回a0 继续计数

a2: MOV a,0x21 ;0x21 中保存的减之前的数据,此时恢复到0x22

MOV 0x22,a

ret

eop


本文标签: 计数 二进制 本例 单字节