快速提问,我正在阅读 Richard C. Detmer 的题为“80x86 汇编语言和计算机体系结构简介”的教科书,在第 21 页和第 22 页上,它讨论了借用的概念,但它并没有真正描述它的真正含义. 以下是正文:
在计算机中,数字 a 和 b 的减法 a - b 通常通过取 b 的 2 的补码并将结果加到 a 来执行。这对应于添加 b 的否定。例如,对于十进制减法 195 - 618 = -423,
00C3 - 026A
改为加FD96,即026A的2的补码。
00C3 + FD96 = FE59
十六进制数字 FE59 表示 -423。查看前面的二进制加法,您有
0000 0000 1100 0011 + 1111 1101 1001 0110 = 1111 1110 0101 1001
请注意,加法中没有进位。但是,这个减法确实涉及借用。当 b 大于 a 作为无符号数时,a - b 减法中会出现借位。计算机硬件可以通过查看相应的加法中是否出现进位来检测减法中的借位。如果加法没有进位,则减法中有借位。如果加法中有进位,则减法中没有借位。(请记住,“携带”本身就是“执行”。)
这是另一个例子。使用字长 2 的补码表示进行十进制减法 985 - 411 = 574,
03D9 - 019B
改为添加 FE65,即 019B 的 2 补码。
03D9 + FE65 = 1023E
0000 0011 1101 1001 + 1111 1110 0110 0101 = 1 0000 0010 0011 1110
去掉多余的 1,十六进制数字 023E 代表 574。这个加法有一个进位,所以在相应的减法中没有借位。
什么是减法借位?我想当例如 00C3 - 026A 时,A 大于 3,所以我们必须从相应的 C 中“借用”,将其设为 B,现在将其设为 13(以 16 为底)减去 A。我们可以这样做,但是发生了“借”。在这个特定的例子中,确实发生了本书上下文中的借用。但是当我们看下一个例子时,他们给了我们 03D9 - 019B,B 比 9 大,所以我们必须从 D 中“借用”它,将其设为 C 并将 9 设为 19(以 16 为底)减去 B。我们可以做到,并且发生了“借用”,但书上说没有发生借用。
什么是借?我知道你知道是否发生了一个进位是否发生在加法中但进行原始减法,什么是真正的借位。我什么时候可以确定是否发生了?
例如,您知道发生进位是因为有一个额外的十六进制数字。长度超出了您的两个十六进制数字的长度(希望保持在其中的长度)。
谢谢你。
-担