mov a,#29h ;输入六位数的被加数存入三个字节中
mov 0f0h,a
mov a,#99h
mov 0f1h,a
mov a,#99h
mov 0f2h,a
mov a,#99h ;输入六位数的加数存入三个字节中
mov 0f3h,a
mov a,#99h
mov 0f4h,a
mov a,#99h
mov 0f5h,a
mov a,#00h ;计数位初始化赋值为0
mov 0f6h,a
mov a,#00h ;进位位初始化赋值为0
mov 0f7h,a
mov a,0f2h ;取被加数的低位字节放入R0寄存器中
mov r0,a
mov a,0f5h ;取加数的低位字节放入R1寄存器中
mov r1,a
jmp tt1 ;一个字节中的低位相加函数入口
t1:
mov a,r2 ;将低位计算的结果从R2寄存器中取出存放在0F8H地址存储器中
mov 0f8h,a
jmp tt2 ;一个字节中高位相加函数入口
t2:
mov a,r2 ;将高位计算的结果从R2寄存器中取出放在0F9H地址存储器中
mov 0f9h,a
mov a,0f1h ;取被加数的中间位字节放入R0寄存器
mov r0,a
mov a,0f4h ;取加数的中间位字节放入R1寄存器中
mov r1,a
jmp tt1 ;进入字节中低位位相加函数的入口
t3:
mov a,r2 ;将字节中计算结果从R2中取出放置0FAH中去
mov 0fah,a
jmp tt2 ;进入字节中高位的计算函数入口
t4:
mov a,r2 ;将计算结果从R2中取出放置0FBH中。
mov 0fbh,a
mov a,0f0h ;将被加数高位字节取出放入R0寄存器中
mov r0,a
mov a,0f3h ;将加数高位字节取出放入R1寄存器中
mov r1,a
jmp tt1 ;进入字节中低位计算函数入口
t5:
mov a,r2 ;将低位计算的结果从R2中取出放入存储地址为0FCH中
mov 0fch,a
jmp tt2 ;进入字节中高位计算函数入口
t6:
mov a,r2 ;将结果从R2寄存器中存入以0FDH为地址的存储器中
mov 0fdh,a
; 结果输出
mov a,0f8h ;输出低位结果到寄存器R3
add a,0f9h
mov r3,a
mov a,0fah ;输出结果中位到寄存器R2
add a,0fbh
mov r2,a
mov a,0fch ;输出结果中高位到寄存器R1
add a,0fdh
mov r1,a
mov a,0f7h ;进位位结果输出到寄存器R0中
mov r0,a
loop: ;程序结束
jmp loop
tt1: ;字节中低位位计算
mov a,0f6h ;计数位加一
add a,#01h
mov 0f6h,a
mov a,r0 ;将被加数从R0寄存器取出
and a,#0fh ;取出被加数字节中的低位数
mov r2,a ;将取出的低位存至R2寄存器中
mov a,r1 ;取出加数从R1寄存器取出
and a,#0fh ;取出加数字节中低位数
mov r3,a ;将取出的低位存至R3寄存器中
add a,0f7h ;与进位位相加
add a,r2 ;与被加数相加
mov r2,a ;将结果保存至R2寄存器中
and a,#10h ;将结果与10H相与去出第五数字
sub a,#10h 将取出的数字与10H相减判断是否有进位
jz ttt1 ;有进位跳转到进位处理子函数
mov a,#09h ;将09H赋给寄存器A
sub a,r2 ;比较R2中的数值与09H的数值的大小
jc ttt2 ;大于09H说明有进位跳转到结果为0AH~0FH之间的处理函数
mov a,#00h ;当范围落到00H~09H之间时,将进位位清零。
mov 0f7h,a
jmp ttt3 ;加法处理结束,进入返回主调函数判断阶段
ttt1: ;当结果结果超过10H时进行的处理子函数
mov a,r2
and a,#0fh
add a,#06h ;将运算结果少加的06H加上
mov r2,a
mov a,#10h ;将进位位赋值为10H,等待高位计算时用该进位位
mov 0f7h,a
jmp ttt3 ;低位加法结束,进入结束返回主调函数判断函数
ttt2: ;当结果处于0AH~0FH时处理的子函数
mov a,r2
sub a,#0ah ;减去0AH保留下应当当留存的数值
mov r2,a ;将处理数值保存在R2寄存器中
mov a,#10h ;将进位位赋值为10H,等待高位处理
mov 0f7h,a
ttt3: ;返回主调函数判断函数
mov a,0f6h ;取出标记位里面存储的数值
sub a,#02h ;将其与02H进行求查,来判断返回主调函数的位置
jc t1
jz t3
jmp t5
tt2: ;字节内高位处理函数
mov a,r1 ;从r1寄存器中取出
and a,#0f0h ;取出该加数的高位数
mov r3,a ;将高位数存至r3寄存器
mov a,r0 ;从R0寄存器中取出被加数
and a,#0f0h ;取出被加数的高位数
mov r2,a ;将取出的高位数存至R2寄存器
add a,0f7h ;同时与进位位相加
add a,r3 ;再与被加数的结果
jc ttt4 ;判断是否产生进位,若有进位就跳转到有进位处理函数ttt4
mov r2,a ;如果没有进位就将结果存至R2寄存器
mov a,#90h ;判断结果与90H的大小
sub a,r2
jc ttt5 ;大于90H就产生进位,就跳转到ttt5
mov a,#00h ;小于90H就将进位位赋值为0
mov 0f7h,a
jmp ttt6 ;字节中高位数加法结束进入返回主调函数阶段
ttt4: ;当相加有进位时的处理函数
add a,#60h ;计算的结果加上60H
mov r2,a ;并将结果存至R2寄存器
mov a,#01h ; 将进位位赋值为01H,
mov 0f7h,a
jmp ttt6 ;字节高位相加结束,进入返回主调函数判断函数
ttt5: ;相加的结果范围在A0H~F0H时,处理结果函数
mov a,r2 ;从寄存器R2中取出结果
sub a,#0a0h ;将结果的数值减去A0H
mov r2,a ;将结果存至R2寄存器
mov a,#01h ;将进位位赋值为01H,等待下一字节低位数相加用
mov 0f7h,a
jmp ttt6 ;字节高位数相加结束,进入返回主调函数判断函数
ttt6: ;返回主调函数判断函数
mov a,0f6h
sub a,#02h
jc t2
jz t4
jmp t6
COP2000实现BCD码的加法
最新推荐文章于 2023-06-28 18:23:28 发布