gpt4 book ai didi

c - 阅读汇编中的数学函数

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

我正在将一些 x86 程序集翻译成 C 代码。 assembly 体的一小部分给我带来了麻烦。

mov %eax, %edx
sar $0x1f, %edx
idivl -0x18(%ebp)
mov %edx, %eax

我们的 eax 值从 0 开始。然后我们移动并旋转 0x1f (31)。我知道右移是除以 2 ......如果你移动并旋转到一个数字会发生什么?也是/2吗?然后我们除以空间 -0x18(%ebp) 中的元素,我们称之为 int x。还是 idivl 以不同的方式工作?然后我们把它放回 %eax 中,我就很容易得到程序的其余部分。

一些帮助将不胜感激。主要看不懂的是sar指令

最佳答案

这段汇编只是执行一个带符号的 32 位模运算:

a %= x;

sar 指令是算术右移(保留操作数符号的右移);查看前两条指令:

mov %eax, %edx
sar $0x1f, %edx

此符号将%eax 的内容扩展到双寄存器%edx:%eax;在伪 C 代码中:

edx_eax = (int64_t)eax;

接下来的两条指令:

idivl -0x18(%ebp)
mov %edx, %eax

执行有符号的 64 位除法,结果余数在 %edx 中,然后传输到 %eax。再次使用伪 C 代码:

edx = (int32_t)(edx_eax % x);
eax = edx;

关于c - 阅读汇编中的数学函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26051291/

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