计算机组成原理 课后练习
例一:
例二:
1. 原码一位乘
基本原理
- 原码是一种直接表示数值符号和大小的方式:最高位为符号位(0表示正,1表示负),其余位表示数值的绝对值。
- 原码一位乘的核心思想是逐位相乘,并通过移位累加得到最终结果。
步骤
假设两个数分别为 XX 和 YY,它们的原码表示为 [X]原[X]原 和 [Y]原[Y]原:
-
分离符号位:
- 提取 XX 和 YY 的符号位 SXSX 和 SYSY,并计算结果的符号位 SR=SX⊕SYSR=SX⊕SY(异或运算)。
- 取 XX 和 YY 的绝对值部分进行乘法运算。
-
逐位相乘:
- 从最低位开始,依次检查 YY 的每一位是否为1。
- 如果某一位为1,则将 XX 左移相应的位数后累加到部分积中。
- 如果某一位为0,则跳过该位。
-
结果处理:
- 将累加的部分积作为结果的绝对值。
- 结合符号位 SRSR,得到最终结果。
特点
- 优点:逻辑简单,易于理解。
- 缺点:需要单独处理符号位,计算效率较低。
2. 补码一位乘
基本原理
- 补码是一种更高效的数值表示方式,可以直接表示正数和负数,避免了原码中“+0”和“-0”的问题。
- 补码一位乘的核心思想是利用补码的特性,通过逐位判断和调整,直接对补码形式的数进行乘法运算。
步骤
假设两个数分别为 XX 和 YY,它们的补码表示为 [X]补[X]补 和 [Y]补[Y]补:
-
初始化:
- 设置部分积初值为0。
- 将 YY 的最低位和次低位组合成一个两位的操作码。
-
逐位操作:
- 根据操作码的不同情况,执行不同的操作:
- 操作码为01时:部分积加上 [X]补[X]补。
- 操作码为10时:部分积减去 [X]补[X]补。
- 操作码为00或11时:部分积保持不变。
- 每次操作后,右移部分积(算术右移,保留符号位)。
- 根据操作码的不同情况,执行不同的操作:
-
循环处理:
- 重复上述操作,直到处理完 YY 的所有位。
-
结果处理:
- 最终的部分积即为乘法结果的补码表示。
特点
- 优点:不需要单独处理符号位,适合硬件实现,效率高。
- 缺点:算法复杂度较高,理解和实现相对困难。
原码一位乘 vs 补码一位乘
特性 | 原码一位乘 | 补码一位乘 |
---|---|---|
符号位处理 | 需要单独处理符号位 | 符号位与数值部分一起处理 |
计算效率 | 较低 | 较高 |
适用场景 | 简单场景、教学用途 | 实际计算机系统中的高效实现 |
实现复杂度 | 简单 | 复杂 |