assembly - "leal 0x10(%ebx), %eax"x86 汇编指令中的 0x10 是什么?

标签 assembly x86 instructions

对于这条 LEAL 指令,0x10 的作用是什么?是乘法、加法还是其他什么?

leal 0x10(%ebx), %eax

有人可以澄清一下吗?这是 Linux 机器上的 x86 汇编器。

最佳答案

leal 或 lea 全称是“加载有效地址”,它的作用正是如此:它进行地址计算。

在您的示例中,地址计算非常简单,因为它只是向 ebx 添加偏移量并将结果存储在 eax 中:

eax = ebx + 0x10

lea 可以做更多事情。它可以将寄存器与常量 2、4 和 8 相加、相乘,以进行字、整数和 double 的地址计算。它还可以添加偏移量。

请注意,lea 的特殊之处在于它永远不会修改标志,即使您将其用作简单的添加(如上例所示)。编译器有时会利用此功能并用 lea 替换添加项以帮助调度程序。由于这个原因,在编译代码中执行简单算术的 lea 指令并不罕见。

关于assembly - "leal 0x10(%ebx), %eax"x86 汇编指令中的 0x10 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4003894/

相关文章:

linux - 为什么递增对较大数字的作用与对单个数字的作用不同?

assembly - x86 操作码编码中的方向/符号扩展位

c++ - project00.exe : 0xC0000005: Access violation 中 0x93b3237d 的未处理异常

assembly - 如何将 128 位立即数移至 XMM 寄存器

c - GCC内联汇编中的 "=w"是什么意思?

linux - 如何通过程序根据汇编语句获取内存空间中的准确地址

c - if (!boolvar) { ... 在 1 个 asm 指令中可以做吗?

language-agnostic - 我如何在运行时生成和执行机器代码?

c - 无效指令的解释

c - IA32 到 Y86 汇编代码转换