gpt4 book ai didi

assembly - SUB指令的目的是什么?

转载 作者:行者123 更新时间:2023-12-04 09:47:16 25 4
gpt4 key购买 nike

我正在自己学习汇编,我有一个困惑,我想澄清一下。

因此,据我所知,x86 计算机使用相同的电路进行加法和减法。对于减法,将负数转换为其 2 补码,然后可以使用加法电路进行减法。例如:方程 4 - 2转换为 4 + (-2)
因此,如果可以使用 2 补码进行减法,那么 SUB 的目的是什么?操作说明?

最佳答案

在 2 的补码世界中,可以通过取 1 的补码(所有位反转)加 1 来求整数的否定。例如,在 8 位世界中:

A:   0x00000002    ; my number
~A: 0xFFFFFFFD ; 1's complement of my number
-A: 0xFFFFFFFE ; 2's complement of my number (negative A)

减去 A-B ,当然我们可以添加负数, A+(-B) :
NOT  B              ; invert each bit in the 8-bit value, B
ADD B, 1 ; add 1, giving the 2's complement negated B
ADD A, B

当然我不得不修改 B (否定它)在我添加它之前。如果我想要怎么办 B保持完整?
PUSH B              ; save B
NOT B ; invert each bit in the 8-bit value, B
INC A ; add 1, giving the 2's complement negated B
ADD A, B
POP B ; restore B

或者
NOT  B              ; invert each bit in the 8-bit value, B
INC A ; add 1, giving the 2's complement negated B
ADD A, B
NOT B ; restore B

所以这有效。但是拥有一个 SUB 不是更容易吗?操作说明?
SUB  A, B

如果您正在编写汇编语言来进行大量算术运算,您更喜欢哪种方法?而且,在第一种情况下,我使用了 INC A操作说明。我可以离开 INC只需使用 ADD A, 1 .但是一个 ADD A, 1 ,在许多微处理器上,要求我从指令存储器中获取更多来执行以获得立即数 1值(value)。因此,一个 INC之所以提供,是因为这种操作非常普遍。

当微处理器设计人员确定要使用的指令集时,他们会考虑最常用的操作类型。减法很常见,所以 SUB指导非常方便。因此,它几乎存在于您会找到的任何指令集中。指令集中还有其他指令存在的原因不太明显。例如,x86 具有 XLAT指令,以及所有“字符串”指令, LODS , STOS等。当我可以用 MOV 完成所有工作时,它们为什么存在?和 INC , 等等?因为有人认为这些操作很常见,值得拥有一条指令。

所以 SUB背后的目的与 CPU 实现的许多其他指令一样,指令是提供更快(执行时间)和更简单的方法来执行最常在软件中执行的操作,同时平衡了可以实现的指令数量的实际限制。

关于assembly - SUB指令的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29193329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com