assembly - x86-32 汇编中的 "lea eax, [ebx + eax]"和 "add eax, ebx"有什么区别?

标签 assembly x86

GCC 给我做了一些汇编代码,里面有这个语句:

lea eax, [ebx+eax]

(英特尔语法)
只是好奇,这有什么区别,和:
add eax, ebx

是?

eax 和 ebx 包含函数的返回值:)
mov eax, DWORD PTR [ebp+8]
mov DWORD PTR [esp], eax 
call CALC1
mov ebx, eax.
mov eax, DWORD PTR [ebp+8]
mov DWORD PTR [esp], eax
call CALC2
lea eax, [ebx+eax]

最佳答案

立即想到的一个区别是 lea不影响标志,而 add做。

如果没有看到汇编代码的其余部分,就不可能说这是否有任何相关性。它可能只是 GCC 代码生成器的人工制品(即它实际上可以为更一般的情况生成代码,或者只是使用 lea 作为更灵活的 add 。)

关于assembly - x86-32 汇编中的 "lea eax, [ebx + eax]"和 "add eax, ebx"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4316526/

相关文章:

assembly - x86 汇编语言高位和低位

assembly - 在 fasm (MS-DOS) 中访问 0xF000FFFE(计算机类型)处的内存

design-patterns - 汇编语言中的设计模式

一个时钟周期内的 C++ 字符串比较

assembly - IDA 专业版 : How to modify a function to always return true?

c - x86 汇编代码中的指针引用

assembly - 如何使用 AVR 的 gnu 汇编器相对于 PC 跳转?

linux - NASM 一次打印一个字符

Linux 32位反汇编有下一个字节的调用指令

windows - 使用 NASM 编译 Windows 可执行文件