内存折叠汇编语言
我是汇编语言的初学者,我对现在的许多东西了解很多,但是很多日子里,我陷入了一段,它让我感到困惑,最糟糕的是,通过我通过互联网访问的许多页面,信息再次被扭曲,本节是寻址模式专门用于存储器参考 ,例如在汇编语言(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