+1 0 0 0 1 0 1 0 ;乘数最低位为1,部分积加被乘数,被乘数左
;移一位,乘数右移一位。
1 1 0 0 1 1 1 1 0 0 ;部分积
+0 0 0 0 0 0 0 0 0 0 ;乘数最低位为0,部分积加0,被乘数左移一
;位,乘数右移一位。
1 1 0 0 1 1 1 1 0 0 ;部分积
+1 0 0 0 1 0 1 0 0 0 0 0 ;乘数最低位为1,部分积加被乘数,被乘数左 ;位,乘数右移一位。
1 0 1 1 1 1 0 1 1 1 0 0 ;计算的最后结果前面的0省去不写了
即:1000 1010×0001 0110=0000 1011 1101 1100(0BDCH)
图1 4位无符号乘法实例演示
②硬件原理框图
下图2为COP2000软件自带的硬件结构图:
图2 硬件原理框图
③算法流程图:
在模型机上实现无符号数乘法运算时,采用“加法—移位”的重复运算方法。因为设计的时候不想过多与存取器打交道,所以就设计了压栈指令和出栈指令,用来保存高8位的结果。这也正是我的得意之处。具体的硬件分配见第3步的内容。因此,无符号乘法的算法流程图如图3所示。
开始初始化乘数与被乘数及存放最后结果的寄存器将R的值送入栈中先保存起来乘数是否为0N 测试被乘数 最低位是否为1YY计算部分积输出 结果N结束被乘数带进位左移乘数不带进位右移
图3 无符号乘法的算法流程图
(2)无符号除法
①实例演示(即,列8位除法具体例子演算的算式):
被除数为0111 1110(二进制),即为十进制的126;除数为0000 1011(二进制),即为十进制的11。那么,可以通过笔算得到:
0111 1110÷0000 1011=1011?0101
即十进制运算结果为:
126÷11=11?5
无符号除法的实例演示如图4所示
0 1 0 1 1
0000 1011 0 1 1 1 1 1 1 0 ;被除数 1 0 1 1 ;除数 ;减去除数
1 1 0 0 1 ;余数为负,C=1,商上0
1 0 1 1 ;商左移一位,除数右移一位(1) ;加上除数
0 0 1 0 0 1 ;余数为正,C=0,商上1
1 0 1 1 ;商左移一位,除数右移一位(2)
;减去除数
1 1 1 1 1 0 1 ;余数为负,C=1,商上0
1 0 1 1 ;商左移一位,除数右移一位(3)
;加上除数
0 0 0 1 0 0 0 0 ;余数为正,C=0,商上1
1 0 0 1 ;商左移一位,除数右移一位(4)
;减去除数
0 0 0 0 0 1 0 1 ;余数为正,C=0,商上1,余数为5 ;余数为正不用处理
图4 无符号除法的算法流程图
②硬件原理框图:
下图5为COP2000软件自带的硬件结构图:
图5 无符号除法的硬件原理框图
③算法流程图:
在模型机上实现无符号数除法运算时,采用“加减交替算法”的运算方法。因此,无符号除法的算法流程图如图6所示。
开始初始化被除数R0,除数R1,商R2为 计算循环的次数,存入R3寄存器溢出处理Y除数R1为0 N被除数R0 减 除数R1恢复除数R2,余数R0 加 除数R2结束Y有借位么 N N余数R0为负Y商R2左移一位,加0商R2左移一位,加1除数R1右移一位,计数器R3减1 除数R1右移一位,计数器R3减1 Y计数器R3为1 N被除数R0 加除数 除数R1Y计数器R3为1 N被除数R0 减 除数R1 N有进位么有借位么 N
图6 无符号除法的算法流程图
3.对应于以上算法如何分配使用COP2000实验仪中的硬件
(1)无符号乘法
符号乘法对应于COP2000实验仪的硬件具体分配使用情况如下表所示:
表3 无符号乘法的硬件分配情况
硬件名称 寄存器R0 寄存器R1 寄存器R2 累加器A 寄存器W 左移门L 直通门D 右移门R 实现算法功能描述 存放被乘数;后来和R2一起用于存放左移后的被乘数。 刚开始用来存放乘数;后来用于存放向右移后的乘数。 存放被乘数左移至CF的数;最后用来存放运算结果的高8位。 执行加法、左移、右移等命令时所必须使用的寄存器。 执行加法,测试R2的末位等双操作数命令时所必须使用的寄存器。 用来实现相应数据左移一位的运算,并能够控制该运算后的结果是否输出到数据总线。 用来控制ALU的执行结果是否输出到数据总线。 用来实现相应数据右移一位的运算,并能够控制该运算后的结果是否输出到数据总线。 ① 控制程序按顺序正常执行; ② 当执行转移指令时,从数据线接收要跳转的地址,使程序能够按需要自动执行。 ③ 当要从EM中读取数据时,由PC提供地址。 存储指令和数据。 向微程序存储器μM提供相应微指令的地址。 程序计数器PC 存储器EM 微程序计数器μPC 微程序存储器μM 存储微程序。 堆栈ST (2)无符号除法
无符号除法对应于COP2000实验仪的硬件具体分配使用情况如下表所示:
当存储于累加器A的值将要受到破坏时,将其数据保存在堆栈ST中,使程序能够正常地执行。 表4 无符号除法的硬件分配情况
硬件名称 寄存器R0 寄存器R1 寄存器R2 寄存器R3 累加器A 寄存器W 实现算法功能描述 初始化时,用来存放被除数;存放程序执行过程中的余数。 初始化时,用来存放除数;在程序执行的过程中,用来存放向右移位后的除数。 在程序执行过程中,用来保存当前算得的商。 当作计数器使用,用来控制计算是否结束(初始值0)。 计算时用来存放中间结果;执行ADD A,R?(加法)、SUB A,R?(减法)等命令时所必须使用的寄存器。 执行SUB A,R?(减法)等双操作数命令时所必须使用的寄