内存折叠汇编语言

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

两条指令似乎相同,但评论是不同的

  • mov esi,var :将var的地址 (例如0x0040120e)复制到esi中
  • mov dword [eax],var1 :将var1中的复制到内存插槽中
    由eax指定
  • 这两个指令处理var或var1,它们是标签,但在注释中提到它是复制内容,而另一个则是复制地址。

    所以另外一个问题是我会问这个指令会有什么结果:

  • mov bx,[var]
  • 这些指令也有什么不同

  • mov [var],bx - 如果var是数组,那么它就是唯一的应用程序,如果不是它与下一条指令不同
  • mov var,bx
  • lea eax,[var] - var中的值放在EAX中,这里是平均值
  • LEA EBX,[MY_TABLE]这里是其平均有效地址
  • 所以我需要知道有什么不同,是否有一个信心来源,我可以阅读,并确定它是正确的,顺便说一句,我使用本教程和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放在eaxLEA表示加载有效地址。 你以同样的方式给它一个内存操作数,就好像你要访问内存一样,而不是在那个地址的值,你会得到地址本身。

    LEA也可以用来执行一些简单的算术。 例如, lea ebx,[eax*4 + eax]会计算eax*5并将结果放入ebx


    LEA EBX, [MY_TABLE]这里是其平均有效地址

    是。 这和前面的例子没有区别。

    链接地址: http://www.djcxy.com/p/72423.html

    上一篇: Memory refrencing Assembly Language

    下一篇: How to push a 64bit int in NASM?