Chapter 9 Arithmetic(7)

这一章是很难的,不过我打的就是精锐。😎乘法已经被干掉了,除法老弟?

中英对照表:

内容 英语
正整数的手动除法 Manual Division of Positive Integers
恢复除法(Restoring Division) Restoring Division
非恢复除法(Non-Restoring Division) Non Restoring Division
中文 英文
Quotient
被除数 Dividend
除数 Divisor
余数 Remainder
部分余数 Partial Remainders
比较 Compare
减法 Subtract
移位 Shift
结果 Result
Bit
加法 Add

手动除法计算正整数

例子:计算 100010010 ÷ 1101

image-20241122170435854

恢复除法(Restoring Division)

硬件结构:

恢复除法的硬件通常包括:

  • A 寄存器(余数):存储中间的余数值。
  • Q 寄存器(商):存储最终的商值。
  • M 寄存器(除数):存储除数。
  • n + 1 位加法器:用来执行加法和减法操作。
  • 控制序列器:控制除法过程的步骤,决定每个操作的执行。

硬件操作过程:

  1. 将被除数(Dividend)存储在 Q 中。
  2. 将除数(Divisor)存储在 M 中。
  3. 使用加法器进行加法和减法操作,处理商和余数的计算。
  4. 通过左移操作来更新 A 和 Q 的值。

恢复除法的流程图:

  1. 开始:初始化 A = 0,M = 除数,Q = 被除数,计数器 Count = n(n 是除法的位数)。
  2. 移位:将 A 和 Q 左移,准备下一步操作。
  3. 减法
    • 执行 A = A - M
    • 如果 A 的结果为负(A < 0),则将 A 恢复,即 A = A + M
  4. 设置商的位:根据余数的符号确定商的当前位是 1 还是 0。
    • 如果 A < 0,商的当前位是 0。
    • 如果 A >= 0,商的当前位是 1。
  5. 计数器减一:将计数器减 1,直到计数器为 0。
  6. 结束:完成所有计算后,A 中存储的就是余数,Q 中存储的就是商。

例子:

image-20241122171448770
image-20241122171457228

非恢复除法 (Non-Restoring Division)

非恢复除法是一种除法算法,它与恢复除法不同,不需要每一步都恢复余数。它通过更高效地处理余数和商的生成来实现除法。以下是非恢复除法的流程和示例:

非恢复除法的步骤:

  1. 步骤 i-1 (初始状态)
    • 初始化余数 $ R_{i-1} $ 和商位 $ Q_0 $。
    • 如果 $ R_i' > 0 $,则 $ Q_0 = 1 $,余数 $ R_i = R_i' $。
    • 如果 $ R_i' < 0 $,则 $ Q_0 = 0 $,余数 $ R_i = R_i' + M $,其中 $ M $ 为除数。
  2. 步骤 i (主循环步骤)
    • 计算新的余数 $ R_i' = 2 R_{i-1} - M $。
    • 如果 $ R_i' > 0 $,则 $ R_i = R_i' $,并继续下一步。
    • 如果 $ R_i' < 0 $,则 $ R_i = R_i' + M $,并继续下一步。
  3. 步骤 i+1 (后续步骤)
    • 计算新的余数 $ R_{i+1}' = 2 R_i' - M $。
    • 如果 $ R_i' > 0 $,则 $ R_i = R_i' $,余数 $ R_{i+1}' = 2 R_i' - M $。
    • 如果 $ R_i' < 0 $,则 $ R_i = R_i' + M $,余数 $ R_{i+1}' = 2(R_i' + M) - M = 2 R_i' + M $。

例子:

image-20241122171819473
image-20241122171832112

结论

  1. 没有简单的算法
    与有符号乘法的算法相比,直接对有符号操作数进行除法运算没有类似的简单算法。
    即目前没有一种像乘法那样简单、直接处理有符号数的除法算法。

  2. 处理正数
    在除法过程中,操作数可以经过处理,转换为正数形式进行运算。
    通过将有符号数转换为正数,计算过程可以变得更为简单。

  3. 结果转换
    在使用恢复除法或非恢复除法算法之后,结果会根据需要转换为正确的有符号值。
    这意味着除法算法本身不直接处理符号,而是通过中间步骤得到的结果,再根据符号规则调整最终的结果。

Quiz

使用非恢复除法算法进行除法运算

给定无符号的 4 位数 A = 0111 和 B = 0011,我们将使用非恢复除法算法进行除法操作。

image-20241122172557888