- UID
- 1036470
- 阅读权限
- 20
- 推广
-
- 幽默
-
- 注册时间
- 2018-2-27
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2018-3-28 22:05:49
|
显示全部楼层
8x8乘法器是一块十分简单的硬件,它绕过了PICmicro微控制器的ALU和ALUSTA寄存器,把WREG的内容与另一个值相乘,16位的结果被放在PRODL和PRODH寄存器中:
用8位乘法把两个16位数乘起来,两个二元表达式乘起来,先把它们的“头两个值”乘起来,然后依次是“外面的两个值”、“里面的的两个值”和“最后的两个值”,即:
(A+B)*(C+D)=AC+AD+BC+BD
把一个16位数分成两个字节,并注意到高位比特字节应乘以 0x0100 , A 和 B 可以写成:
A = ( AH * 0x0100 ) + AL
B = ( BH * 0x0100 ) + BL
要计算 A * B ,只需按照上面的乘法:
A * B = ( AH * 0x0100 + AL ) * ( BH * 0x0100 + BL )
= ( AH * 0x0100 * BH * 0x0100 ) + ( AH * 0x0100 * BL ) + ( AL * AH * 0x0100 ) + ( AL * BL )
我们知道把一个数乘以 0x0100 相当于把它左移一个字节(或者说8位),所以两个16位的变量可以用下面的代码乘在一起得到一个32位的积:
Product = MUL ( AL ,BL ) ;
Tproduct = MUL ( AL ,BH ) << 8 ;
Product = Product + Tproduct ;
Tproduct = MUL ( AH ,BL ) << 8 ;
Product = Product + Tproduct ;
Tproduct = ( MUL ( AH ,BH ) << 8 ) << 8 ;
Product = Product + Tproduct ;
这个程序可以很容易地转换成汇编语言。
|
|