gpt4 book ai didi

c - 简化 assembly 说明

转载 作者:行者123 更新时间:2023-11-30 19:19:50 25 4
gpt4 key购买 nike

我正在尝试使用 leal 将以下代码转换为一行。

movl 4(%esp), %eax
sall $2, %eax
addl 8(%esp), %eax
addl $4, %eax

我的问题分为三部分:

  1. 寄存器前面的“%”是否只是将后面的字符串定义为寄存器?
  2. 整数前面的“$”是否将后面的值类型定义为 int?
  3. leal 4(%rsi, 4, %rdi), %eax 是上述程序集的正确转换吗? (忽略从32位到64位的变化)

编辑:另一个问题。会

unsigned int fun3(unsigned int x, unsigned int y)
{
unsigned int *z = &x;
unsigned int w = 4+y;
return (4*(*z)+w);
}

生成上面的代码?我对指针不熟悉。

最佳答案

1:如果%是

2:asm 中没有 int 或 float 或 bool 或 char 或...。你正在和机器打交道。这意味着它是一个常数

3:将 (esp - 4) 中的 1 个值移动到 eax。 esp是堆栈指针,eax是c函数用于返回值的寄存器。

2 向左移动两次。与乘以 4 相同

3 将 (esp - 8) 中的值添加到 eax 中的值

4 eax 中的值加 4

x*4+y+4 = eax x 为 (esp -4),y 为 (esp-8)

leal 与 4+rsi+4*rdi =eax 相同

所以是的,在某种程度上是一样的。

这取决于编译器,但是是的,这是有效的翻译。 4*x+y+4

关于c - 简化 assembly 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23646631/

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