二、乘除倒数算术电路外挂方案
  乘法运算与倒数运算共用一个电路,除法运算是先对除数进行倒数运算,之后再用被除数与倒数进行乘法运算。
  (一)电路特征
  1、电路共用。乘法、除数、倒数运算共用一个电路。
  2、输入端口共用。有A、B两个输入端口,倒数运算、乘法运算、除法运算共用这两个输入端口。
  3、输出端口各自独立。乘法运算的输出端口由高16位与低16位两个输出端口组成。除法运算的输出端口由一个16位整数与一个16位小数两个输出端口组成。倒数运算的输出端口由一个16位整数输出端口,一个16位除数标志位输出端口,一个用16位小数表达的倒数运算结果输出端口,共三个端口组成。其中,倒数运算的16位整数输出端口与16位除数标志位输出端口,用于再次做除法运算时与被除数相乘。
  4、由于运算电路共用与输入端口共用,每次运算只能选用一种算术模式。
  (二)外挂到CPU上的方式
  1、乘法、除法、倒数电路有A、B两个输入端口。A输入端口挂接到两个16位寄存器上,第一个寄存器存放16位数据,第二个寄存器存放除数标志位。B输入端口挂接到两个16位的寄存器上,第一个寄存器存放16位整数,第二个寄存器存放16位小数。倒数运算分为整数的倒数运算与带小数的倒数运算。进行整数的倒数运算时,使用B端口挂接的第一个寄存器。进行带小数的倒数运算时,使用B端口挂接的两个寄存器。进行乘法运算时,使用A端口挂接的第一个寄存器与B端口挂接的第一个寄存器。进行除法运算时,先对除数进行倒数运算,倒数运算的整数输出端口的数据送入A端口挂接的第一个寄存器中,倒数运算的除数标志位输出端口的数据送入A端口的第二个寄存器中,被除数送入B端口挂接的第一个寄存器中。
  2、乘法、除法、倒数电路有三个输出端口。乘法运算的输出端口挂接到两个16位寄存器上,一个寄存器存放高16位数据,另一个寄存器存放低16位数据,两个寄存器表达一个32位的整数数据。除法运算的输出端口挂接到两个16位寄存器上,一个寄存器存放整数,另一个寄存器存放小数。倒数运算的输出端口挂接到三个寄存器上,第一个寄存器存放整数,第二个寄存器存放除数标志位数据,第三个寄存器存放倒数的运算结果。其中,为了保障除法运算输出结果有32位精度,进行除法运算必须使用倒数运算的整数输出结果与除数标志位输出结果。
  3、电路有三个模式控制位,第一个是乘法模式控制位,第二个是整数的倒数模式控制位,第三个是带小数的倒数模式控制位。整数的倒数模式控制位挂接到寄存器的第5位上,带小数的倒数模式控制位挂接到寄存器的第6位上,乘法模式控制位挂接到寄存器的第7位上。当寄存器的某一个模式位为1时,即选择该模式运算。三种算术模式控制位每次只能选择一个模式控制位。
  (三)电路所用的元件数量与电路级数
  乘法、倒数、除法共用电路共需基本逻辑元件2506个,隔离元件555个。
  在乘法电路中,从数据全部到达电路的输入端口开始,到运算结果全部到达电路的输出端口,电路总级数为98级。
  在倒数电路中,从数据到达电路的输入端口开始,到运算结果全部到达电路的输出端口,电路总级数为67级。
  (四)编程举例
  1、简单挂接的编程例
  设:模式寄存器为P,A操作数的数据寄存器为A10,除法标志位寄存器为A11;B操作数的整数寄存器为B1,B操作数的小数寄存器为B2。倒数运算的结果数据寄存器为J30,除法标志位寄存器为J31,用16位小数表达的倒数结果数据寄存器为J32;乘法运算的结果寄存器高16位为J40,低16位为J41;除法运算结果的整数寄存器为J50,小数寄存器为J51。
  设:R1、R2内存有16位整数,R3内存有16位小数。
  (1)R1*R2的编程:
  mov    P,#10000000B          ;选择乘法运算
  mov    A10,R1
  mov    B10,R2
  mov    R3,J40               ;乘法结果的高16位存入R3
  mov    R4,J41               ;乘法结果的低16位存入R4
  (2)R2进行倒数运算编程:
  mov    P,#100000B            ;选择整数的倒数运算
  mov    B10,R2
    mov    R4,J32               ;倒数运算结果存入R4
  (3)R1/R2的运算编程:
  mov    P,#100000B            ;选择整数的倒数运算
  mov    B10,R2
  mov    A10,J30              ;倒数运算结果的整数部分送入A操作数的数据寄存器
  mov    A11,J31              ;除法标志位送入A操作数的除法标志位寄存器
  mov    P,#10000000B          ;选择乘法运算
  mov    B10,R1                ;被除数送入B1寄存器
  mov    R4,J50               ;除法结果的整数部分存入R4
  mov    R5,J51               ;除法结果的小数部分存入R5
  (4)R2、R3进行倒数运算编程:
  mov    P,#1000000B           ;选择带小数的倒数运算
  mov    B10,R2
  mov    B11,R3
  mov    R4,J32               ;倒数运算结果存入R4
  (5)R1/(R2,R3)的运算编程:
  mov    P,#100000B            ;选择带小数的倒数运算
  mov    B10,R2
  mov    B11,R3
  mov    A10,J30              ;倒数运算结果的整数部分送入A操作数的数据寄存器
  mov    A11,J31              ;除法标志位送入A操作数的除法标志位寄存器
  mov    P,#10000000B          ;选择乘法运算
  mov    B10,R1                ;被除数送入B1寄存器
  mov    R4,J50               ;除法结果的整数部分存入R4
  mov    R5,J51               ;除法结果的小数部分存入R5
  说明:进行除法运算时,倒数运算的结果要先送入A端口的两个寄存器中,然后再把倒数运算模式切换到乘法运算模式。这是因为共用电路进行倒数运算时,A端口寄存器中的数据对倒数运算不产生影响。
  2、全管理挂接的编程例
  全管理挂接把运算结果存放到任意指定的地址或寄存器中。
  设:两个16位寄存器R1、R2内存有数据。DAO为倒数指令。
  MUC  R4,R5,R1,R2          ;R1*R2    R4、R5寄存器,两个寄存器共32位
  DIV  R4,R5,R1,R2          ;R1/R2    R4、R5寄存器,一个存整数,另一个存小数
  DAO  R4,R5,R2              ;1/R2     R4、R5寄存器
  DIV  R4,R5,R1,R2,R#      ;R1/(R2,R3)    R4、R5寄存器,一个存整数,另一个存小数
  DAO  R4,R5,R2,R4          ;1/(R2,R3)     R3、R4寄存器
 返回上页
 返回首页