内存折叠汇编语言
我是汇编语言的初学者,我对现在的许多东西了解很多,但是很多日子里,我陷入了一段,它让我感到困惑,最糟糕的是,通过我通过互联网访问的许多页面,信息再次被扭曲,本节是寻址模式专门用于存储器参考 ,例如在汇编语言(IA-32 NASM)的这种寻址模式下,
两条指令似乎相同,但评论是不同的
由eax指定
这两个指令处理var或var1,它们是标签,但在注释中提到它是复制内容,而另一个则是复制地址。
所以另外一个问题是我会问这个指令会有什么结果:
这些指令也有什么不同
所以我需要知道有什么不同,是否有一个信心来源,我可以阅读,并确定它是正确的,顺便说一句,我使用本教程和NASM作为Windows下的汇编程序。
mov dword [eax], var1
:将mov dword [eax], var1
值复制到由eax
指定的内存插槽中
不。 如果var1
是标签,则会将var1
的地址作为32位值存储到由eax
指向的内存中。 例如,如果var1
的地址是0x04000000
并且eax包含0x12345678
那么这会将0x04000000
写入0x12345678
内存。
这条指令的注释是什么: mov bx, [var]
?
; Move the word located at var into bx
(注意:汇编中的“移动”确实意味着复制)
mov [var], bx
如果var
是一个数组mov [var], bx
是唯一的应用程序? 如果不是它与mov var, bx
?
类型不是由汇编程序强制执行的。 您可以在任何地方存储任何内容(以及您的程序允许写入的任何地方)。 所以你声明的var
基本上是不相关的。 对于所有汇编程序的关心,可能会在代码中放置var
(除非你真的知道你在做什么,否则这可能不是一个好主意)。
与mov var,bx
的区别在于mov var,bx
不是有效的指令。 var
的地址是直接的,所以这有点像说mov 5, bx
,这显然不起作用。
lea eax, [var]
-在值var
被放置在EAX
号的地址var
放在eax
。 LEA
表示加载有效地址。 你以同样的方式给它一个内存操作数,就好像你要访问内存一样,而不是在那个地址的值,你会得到地址本身。
LEA
也可以用来执行一些简单的算术。 例如, lea ebx,[eax*4 + eax]
会计算eax*5
并将结果放入ebx
。
LEA EBX, [MY_TABLE]
这里是其平均有效地址
是。 这和前面的例子没有区别。
链接地址: http://www.djcxy.com/p/72423.html