gpt4 book ai didi

assembly - imul 汇编指令 - 一个操作数?

转载 作者:行者123 更新时间:2023-12-04 00:23:27 24 4
gpt4 key购买 nike

我正在使用运行时调试器。

EAX:0000 0023
EDX:5555 5556

imul edx

EAX:aaaa aac2
EDX:0000 000b

我完全困惑,无法弄清楚这种乘法是如何工作的。这里发生了什么事?我注意到一个类似的 question here那个 imul ebx ; result in EDX:EAX我不明白 EDX:EAX 符号虽然:/

最佳答案

imul的一操作数形式传递了一个 32 位参数,它实际上意味着 EAX * src其中两个EAX源操作数是 32 位寄存器或内存。
两个 32 位值的乘积不一定适合 32 位:完整的乘法结果最多可能需要 64 位。答案的高 32 位将写入 EDX寄存器和低 32 位到 EAX登记;这用 EDX:EAX 表示符号。
在您的情况下 imul edx , 你得到 EDX:EAX = EAX * EDX .显式源操作数可以是隐式操作数之一,即使 EAX平方成 EDX:EAX .

如果您只想要结果的低 32 位,请使用 imul 的 2 操作数形式;它运行得更快并且没有任何隐式操作数(因此您可以使用任何最方便的寄存器)。imul ecx, esi是否ecx *= esi如您所料,无需触摸 EAXEDX .就像 C where unsigned x=...; x *= y;结果的宽度与输入的宽度相同。imul也有一个直接形式:imul ecx, ebx, 1234是否ecx = ebx * 1234 .许多组装商会接受imul ecx, 1234作为 imul ecx, ecx, 1234 的简写.

这些 32x32 => imul 的 32 位形式为签名或未签名正常工作;一操作数的结果mulimul仅在上半部分(在 EDX 中)有所不同,下半部分没有 EAX输出。
Intel's instruction reference manual entry for imul .

关于assembly - imul 汇编指令 - 一个操作数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818755/

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