x86英特尔组装 - 这两个声明是否相同?

时间:2011-10-10 21:31:47

标签: assembly x86 intel

这里非常简单的问题......我正试图围绕汇编程序,并对这些操作是否相同感到好奇:

mov [ebx], 5

lea esi, ebx
mov esi, 5

谢谢!

3 个答案:

答案 0 :(得分:4)

没有。 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 ptrword ptr,或者其他什么。另请注意,在这种情况下,使用lea相当浪费 - 您的确与mov esi, ebx完全相同。您通常只在需要进行更复杂的地址计算时使用lea,例如:lea esi, ebx*4+ebp

答案 1 :(得分:2)

你可以做到

lea esi, [ebx]
mov [esi], 5

这将等于您的第一个代码段。

答案 2 :(得分:0)

不,他们不是,mov [ebx], 5将5移动到ebx中指定的记忆位置,而

lea esi, ebx
mov esi, 5

将内存地址计算为esi(在这种情况下,它只是将ebx复制到esi),然后将5移到esi,而不是写入内存。