gpt4 book ai didi

c - x86 汇编中 "imul"指令的不熟悉语法

转载 作者:太空狗 更新时间:2023-10-29 14:55:10 31 4
gpt4 key购买 nike

我写了一个非常基本的 C 函数,叫做“multby22”,它的作用正如它的名字所暗示的那样:它需要一个 long 并返回那个 long 乘以 22。(我知道这是一个毫无意义的函数,但我把它写到尝试帮助我进行 x86 汇编。)所以:

long multby22(long x) {
return 22 * x;
}

当我编译程序并在可执行文件上运行“objdump”时,我发现“multby22”的反汇编代码如下:

080483ff <multby22>:
80483ff: 55 push %ebp
8048400: 89 e5 mov %esp,%ebp // Create the stack frame.
8048402: 8b 45 08 mov 0x8(%ebp),%eax // Grab the argument and put it into the %eax register.
8048405: 6b c0 16 imul $0x16,%eax,%eax // ???
8048408: 5d pop %ebp // Pop the buffer pointer and return.
8048409: c3 ret

我知道“imul”用于整数乘法,但我一直无法找到任何可以帮助我使用此语法的东西!我找到的最接近的是:

imul [reg] [reg] [const]

...其中第二个和第三个参数相乘,然后放入第一个参数,它必须是一个寄存器。在我生成的程序集中,第一个参数是常量!

最佳答案

您找到了正确的说明。 AT&T 的汇编语法恰好是其他人使用它的方式的“倒退”。目标寄存器在右边。

您的代码将 EAX 乘以 22 (0x16) 并将结果放入 EAX。

如果您尝试将说明与文档进行比较,您可能应该研究可以输出 Intel 语法反汇编的反汇编器。

关于c - x86 汇编中 "imul"指令的不熟悉语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816726/

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