assembly - (汇编 32 位)不能使用没有括号的 lea?

标签 assembly x86 fasm

据我所知,我还没有看到任何人接触过这个,所以我使用的是平面汇编器,如果我尝试做类似“lea eax,测试”的事情,它不会工作,但如果我这个“lea eax,[测试]”有效吗? 我遇到过很多例子,我看到人们可以在没有括号的情况下做到这一点,但我不知道这是否可以在平面汇编器上完成,因为我不断收到错误的无效操作数,而且“测试”是一个 dd (double词)。

最后一件事 lea eax,[testing] 和 mov eax,testing 在我的平面汇编器上是等效的。我用 ollydbg 调试器测试了 eax 寄存器,在这两种情况下 eax 都等于地址 00401006。那么在这种情况下它们是等效的吗?

最佳答案

因为 LEA 就像 C 中的“&”,它希望您向它传递一个变量,而不是该变量的地址。在 FASM 中,当您写“[a]”时,您指的是变量“a”,而当您只写“a”时,您指的是它的地址。所以,“lea eax,[a]”和“mov eax,a”的意思完全一样。我希望这会有所帮助。

关于assembly - (汇编 32 位)不能使用没有括号的 lea?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28390407/

相关文章:

assembly - 简单的 hello world exec 是 10 KB

c - 我怎样才能让 GCC 编译器不优化像 'printf' 这样的标准库函数调用?

汇编将指针传递给函数

linux - x86_64 Linux 汇编中的逻辑与实现

linux - 有没有办法在linux中去除dll文件中的时间戳和日期?有可用的工具吗?

c - 在Y86汇编中如何为多个数组分配好空间?

assembly - 使用 gdb 比较汇编跟踪

c - 理解指针和汇编中的类型转换

linux - 如何仅使用 ptrace (linux, x86/x86_64) 获取 "backtrace"(如 gdb)

assembly - ASM:MASM,NASM,FASM?