gpt4 book ai didi

c - 了解 ATT 汇编语言

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:03 24 4
gpt4 key购买 nike

C 版:

int arith(int x, int y, int z)
{
int t1 = x+y;
int t2 = z*48;
int t3 = t1 & 0xFFFF;
int t4 = t2 * t3;
return t4;
}

同一程序的 ATT 汇编版本:

x 在 %ebp+8,y 在 %ebp+12,z 在 %ebp+16

movl   16(ebp), %eax    
leal (%eax, %eax, 2), %eax
sall $4, %eax // t2 = z* 48... This is where I get confused
movl 12(%ebp), %edx
addl 8(%ebp), %edx
andl $65535, %edx
imull %edx, %eax

除了左移之外,我理解它在程序的所有点上所做的一切。

我假设它会向左移动 4 次。这是为什么?

谢谢!

编辑:我也明白我混淆的部分相当于 C 版本的 z*48 部分。

我不明白的是左移 4 次如何等于 z*48。

最佳答案

您错过了 leal (%eax, %eax, 2), %eax 行。应用一些数学运算,汇编代码如下:

a := xa := a + 2*a    // a = 3*xa := a * 2^4    // a = x * 3*16

关于c - 了解 ATT 汇编语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14915791/

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