【发布时间】:2011-10-11 05:42:43
【问题描述】:
这里有一个非常简单的问题...我正试图围绕汇编程序来思考这些操作是否等效:
mov [ebx], 5
和
lea esi, ebx
mov esi, 5
谢谢!
【问题讨论】:
这里有一个非常简单的问题...我正试图围绕汇编程序来思考这些操作是否等效:
mov [ebx], 5
和
lea esi, ebx
mov esi, 5
谢谢!
【问题讨论】:
没有。 mov [ebx], 5 将值 5 放入 ebx 指向的地址中(至少这是它应该做什么的一般想法。MASM 一方面会拒绝它,因为它不知道你想要什么大小的目的地,所以你需要mov byte ptr [ebx], 5,或mov word ptr [ebx], 5等)
第二个将 ebx 复制到 esi,然后将 5 复制到 esi。它不会(甚至试图)将任何东西移入内存。您(显然)正在寻找的内容更像是:
lea esi, ebx
mov [esi], 5
同样,您会遇到同样的事情:您需要指定 byte ptr 或 word ptr 或其他任何内容。另请注意,在这种情况下,使用lea 是相当浪费的——您正在执行与mov esi, ebx 完全相同的操作。当您想要进行更复杂的地址计算时,通常只使用lea,例如:lea esi, ebx*4+ebp。
【讨论】:
lea 指令中仍然缺少[ebx]。
lea 的括号(其中一个 MASM 可能允许但忽略它们)但它们不是通常需要。
lea (%ebx), %esi 而不是lea %ebx, %esi)以及.intel_syntax与 NASM 相同)。
lea 确实引用了内存 Vol. 2A 3-579,不过它不会进行任何取消引用。因此,为什么它经常用于实际上不涉及内存引用的简单算术计算,例如lea eax, [eax+eax*2] 为eax *= 3。
你可以的
lea esi, [ebx]
mov [esi], 5
这将等于你的第一个 sn-p。
【讨论】:
lea esi, ebi 这样的东西。 lea itslef 将(l)加载(e)有效(a)地址,即您需要提供地址参数而不仅仅是注册。因此[ebx].
LEAstackoverflow.com/questions/1658294/…的详细信息
不,它们不是,mov [ebx], 5 将 5 移动到ebx 中指定的内存位置,而
lea esi, ebx
mov esi, 5
计算内存地址到esi(在这种情况下,它只是将ebx复制到esi),然后将5移动到esi,而不是写入内存。
【讨论】: