COP2000实现BCD码的加法

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


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
COP2000 计算机组成原理实验系统主要是为配合讲授与学习《计算机组成原理》课程而研制的。与其它产品相比,具有以下特点: 1.1硬件先进特点:  实时监视器 各单元部件都以计算机结构模型布局,清晰明了,各寄存器、部件均有 8 位数据指示灯显示其二进制值,两个 8 段码 LED 显示其十六进制值,清楚明了,两个数据流方向指示灯, 以直观反映当前数据值及该数据从何处输出,而又是被何单元接收的。这是该产品独创的“实时监视器”,使得系统在实验时即使不借助 PC 机,也可实时监控数据流状态及正确与否,彻底改变了其它实验设备为监控状态必须加入读操作的不真实实验方法,使得学生十分容易认识和理解计算机组成结构。实验系统各部件可以通过 J1、J2、J3 座之间不同的连线组合, 可进行各部件独立的实验,也可进行各部件组合实验,再通过与控制线的组合,就可构造出不同结构及复杂程度的原理性计算机。  开放式设计 实验系统的软硬件对用户的实验设计具有完全的开放特性。与众不同的是:COP2000 各实验模块的数据线、地址线与系统之间的挂接是通过三态门,而不是其它实验设备所采用的扁平连线方法,而数据线、地址线是否要与系统连通,则由用户连线控制,这样,就真实的再现了计算机工作步骤。需要强调指出的是:用“连线跨接”并不能说明其开放特性,而所谓的开放性应指的是运算器、控制器及微程序指定的格式及定义能否进行修改和重新设计。 COP2000 系统的运算器采用了代表现代科技的 EDA 技术设计,随机出厂时,已提供一套已装载的方案,能进行加、减、与、或、带进位加、带进位减、取反、直通八种运算方式,若用 户不满意该套方案,也可自行重新设计并通过 JTAG 口下载。控制器微指定格式及定义可通过键盘和 PC 机进行重新设计,从而产生与众不同的指令系统。 系统的数据线、地址线、控制线均在总线插孔区引出,并设计了 40 芯锁进插座,供用 户进行 RAM、8251、8255、8253、8259 等接口器件的扩展实验。 系统提供的两种控制器之一的组合逻辑控制器已下载有一套完整的实验方案,用户也可使用 CPLD 工具在 PC 机上进行自动化设计。对于不熟悉 EDA 语言的用户,可利用 COP2000 调试环境中的图形表格组合自动产生 EDA 语言,然后在 CPLD 工具下载入大规模逻辑器件中, 对于熟悉 EDA 的语言的用户,则还可直接利用 ABEL 或 VHDL 进行重新设计。其开放程度非一般设备所及。 开放式设计的特点还在于,用户可以设计自己的指令/微指令系统。系统中已带三套指 令/微程序系统,用户可参照来设计新的指令/微程序系统。  万用汇编器 用户可以自定义指令/微指令系统,COP2000 软件可以对用户自己定义的汇编助记符进行编译,自动生成代码/微代码。实验系统出厂时提供了完善的指令系统: 算术运算:ADD、ADDC、SUB、SUBC 逻辑运算:AND、OR、CPL 赋值运算:MOV 转移指令:JMP、JC、JZ 调子程序:CALL、RET 中断指令:INT、RETI 端口输入输出:IN、OUT 外部设备输入输出:READ、WRITE 其中的输入输出指令:IN、OUT,模仿 CPU 的端口的输入输出,外部设备输入输出指令:READ、WRITE,可用来访问外设,这两条指令有否直接决定其能否进行接口器件的实 验。若没有则表明其无法进行完整模型机实验。 很多实验机还不支持子程序调用、返回指令 CALL、RET。我们知道在调用子程序时涉及到压栈、退栈的概念,这在 COP2000 实验仪中可从微程序层面上十分形象的观察整个执行过程。  完善的寻址方式 累加器寻址:如 CPL A 寄存器寻址:如 MOV A,R0 寄存器间接寻址:如 MOV A,@R0 立即数寻址:如 MOV A,#12H 存储器寻址:如 MOV 34H,A

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

&小鹏鹏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值