【发布时间】:2012-10-31 00:22:20
【问题描述】:
首先我通过 movl 12(%ebp) %edx. 分配 edx = y
为什么leal (%edx, %edx, 2) , %edx = edx = 3*y
【问题讨论】:
-
LEAL Assembler instruction 的可能重复项在提问之前请先在此处至少进行基本搜索。
首先我通过 movl 12(%ebp) %edx. 分配 edx = y
为什么leal (%edx, %edx, 2) , %edx = edx = 3*y
【问题讨论】:
LEA 是“加载有效地址”的缩写。 (在 AT&T 语法中,对于 32 位操作数,它拼写为“leal”。)基本上,它采用给定括号中的内容计算的地址,而不是读取或写入内存,而是分配地址本身 到目标操作数。
它通常用于进行地址计算,但也经常用于乘以某些整数常量(3、5 和 9),假装一个数字是一个地址。 (地址是只是数字,所以一点也不难。)
【讨论】:
直译为“将有效地址EDX + EDX * 2装入EDX”。
80x86 有一些相对强大的寻址模式。例如,“movl (%edx, %edx, 2), %edx”将是“将有效地址 EDX + EDX
您的部分困惑可能是由 AT&T 语法引起的——地址的书写方式远非自然。为了比较;对于 Intel 语法,它会更清晰(例如“lea edx,[edx+edx*2]”)。
【讨论】: