这里非常简单的问题......我正试图围绕汇编程序,并对这些操作是否相同感到好奇:
mov [ebx], 5
和
lea esi, ebx
mov esi, 5
谢谢!
答案 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 ptr
或word 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
,而不是写入内存。