Chapter 9 Arithmetic(7)
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
恢复除法(Restoring Division)
硬件结构:
恢复除法的硬件通常包括:
- A 寄存器(余数):存储中间的余数值。
- Q 寄存器(商):存储最终的商值。
- M 寄存器(除数):存储除数。
- n + 1 位加法器:用来执行加法和减法操作。
- 控制序列器:控制除法过程的步骤,决定每个操作的执行。
硬件操作过程:
- 将被除数(Dividend)存储在 Q 中。
- 将除数(Divisor)存储在 M 中。
- 使用加法器进行加法和减法操作,处理商和余数的计算。
- 通过左移操作来更新 A 和 Q 的值。
恢复除法的流程图:
- 开始:初始化 A = 0,M = 除数,Q = 被除数,计数器 Count = n(n 是除法的位数)。
- 移位:将 A 和 Q 左移,准备下一步操作。
- 减法:
- 执行 A = A - M。
- 如果 A 的结果为负(A < 0),则将 A 恢复,即 A = A + M。
- 设置商的位:根据余数的符号确定商的当前位是 1 还是
0。
- 如果 A < 0,商的当前位是 0。
- 如果 A >= 0,商的当前位是 1。
- 计数器减一:将计数器减 1,直到计数器为 0。
- 结束:完成所有计算后,A 中存储的就是余数,Q 中存储的就是商。
例子:
非恢复除法 (Non-Restoring Division)
非恢复除法是一种除法算法,它与恢复除法不同,不需要每一步都恢复余数。它通过更高效地处理余数和商的生成来实现除法。以下是非恢复除法的流程和示例:
非恢复除法的步骤:
- 步骤 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 $ 为除数。
- 步骤 i (主循环步骤):
- 计算新的余数 $ R_i' = 2 R_{i-1} - M $。
- 如果 $ R_i' > 0 $,则 $ R_i = R_i' $,并继续下一步。
- 如果 $ R_i' < 0 $,则 $ R_i = R_i' + M $,并继续下一步。
- 步骤 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 $。
例子:
结论
没有简单的算法:
与有符号乘法的算法相比,直接对有符号操作数进行除法运算没有类似的简单算法。
即目前没有一种像乘法那样简单、直接处理有符号数的除法算法。处理正数:
在除法过程中,操作数可以经过处理,转换为正数形式进行运算。
通过将有符号数转换为正数,计算过程可以变得更为简单。结果转换:
在使用恢复除法或非恢复除法算法之后,结果会根据需要转换为正确的有符号值。
这意味着除法算法本身不直接处理符号,而是通过中间步骤得到的结果,再根据符号规则调整最终的结果。
Quiz
使用非恢复除法算法进行除法运算
给定无符号的 4 位数 A = 0111 和 B = 0011,我们将使用非恢复除法算法进行除法操作。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Totoroの旅!
评论