gpt4 book ai didi

assembly - 为什么 x86 汇编中的被除数是 64 位?

转载 作者:行者123 更新时间:2023-12-04 16:48:00 26 4
gpt4 key购买 nike

为什么idiv x86 汇编指令除法 EDX:EAX (64 位)由给定的寄存器,而其他数学运算,包括乘法,只是对单个输入和输出寄存器进行操作?

乘法:

mov eax, 3
imul eax, 5

分配:
mov edx, 0
mov eax, 15
mov ebx, 5
idiv ebx

我知道 EDX用于存储余数,但为什么没有针对此行为的单独指令?这对我来说似乎不一致。

最佳答案

指令集提供了有效实现任意宽度整数运算所需的指令。对于加法和减法,除了固定宽度的结果之外,您需要知道的只是运算结果是进位(加法)还是借位(减法)。这就是为什么有一个进位标志。对于乘法,您需要能够将两个单词相乘并得到双单词结果。这就是为什么imuledx:eax 中产生结果.对于除法,您需要能够除以双倍宽度的数字并获得商和余数。

要了解为什么需要这些特定操作,请参阅 Knuth 的计算机编程艺术,第 2 卷,其中详细介绍了实现任意宽度算法的算法。

至于为什么x86指令集中没有更多不同形式的乘法和除法指令,不是2的幂的乘法和除法比其他指令少得多,所以Intel可能不想使用up 可用于更频繁使用的指令的操作码。通用程序中的大多数乘法和除法都是以 2 的幂计算的;对于这些,您可以使用位移位或 lea代替指令。

关于assembly - 为什么 x86 汇编中的被除数是 64 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12586232/

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