前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

计算机补码乘法器(补码乘法符号位)

qiguaw 2024-09-08 06:37:26 资源文章 21 ℃ 0 评论

乘法的应用千千万

? 浮点乘法和定点乘法的原理是相同的

? 早期处理器通过软件迭代

? 使用加法和移位

? 现代处理器都实现硬件乘法器

? 提高程序性能

硬件模拟软件的“移位-加”操作

? 两个N位数相乘,结果为2N位

? 使用3组触发器,锁存住乘数、被乘数和结果

? 乘数每次算术右移一位,被乘数每次算术左移一位

如果参与运算的是补码?

? 先判断结果符号位

? 将补码转为原码进行运算

? 补上符号位,转换回补码

? 太麻烦,不如自行推导补码乘法算法

? 问题: 已知[X] 补 和[Y] 补 ,求[X*Y] 补 .

? [X] 补 +[Y] 补 =[X+Y] 补 (方括号内为普通加法,方括号外为补码加法)

? 但[X] 补 *[Y] 补 !=[X*Y] 补

? 若[Y ] 补 =y 31 y 30 ......y 1 y 0 ,

? 则Y= -y 31 *2 31 + y 30 *2 30 +......+y 1 *2 1 +y 0 *2 0

已知[X] 补 和[Y] 补 ,求[X*Y] 补

[X*Y] 补 = [X*( -y 31 *2 31 +y 30 *2 30 +......+y 1 *2 1 +y 0 *2 0 )] 补

= [-X*y 31 *2 31 +X*y 30 *2 30 +......+X*y 1 *2 1 +X*y 0 *2 0 ] 补

= [-X*y 31 *2 31 ] 补 +[X*y 30 *2 30 ] 补 +......+[X*y 1 *2 1 ] 补 +[X*y 0 *2 0 ] 补

= - [X] 补 *(y 31 *2 31 ) +[X] 补 * (y 30 *2 30 ) +......+[X] 补 * (y 1 *2 1 ) +[X] 补 * (y 0 *2 0 ) ???

方括号内为普通加法,方括号外为补码加减(符号位扩充到64位再加)

定理:[X*2 k ] 补 =[X] 补 *2 k

? 运算时,根据y i 取0或1,进行操作

? 结果先置为0, [X] 补 扩展为64位

? 当i = 0 ... 30,若y i 为1,将[X] 补 左移i位,补码加法到结果

? 当i = 31,若y i 为1,将[X] 补 左移i位,补码减法到结果

? 和原码“移位-加”算法类似(除了最高位)

补码运算注意

? 符号位扩充到8位,结果保留8位

? 补码减法:按位取反加1(-11010000 = 00101111+1)

将之前的迭代加乘法器稍微修改,就可以实现补码乘法

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表