COP2000实现BCD码的加法

本文详细解析了使用微处理器指令实现六位数加法操作的过程,包括初始化计数位和进位位,以及如何分别处理被加数和加数的各个字节位,最终输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&小鹏鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值