首页 文章

记忆恢复汇编语言

提问于
浏览
1

我是汇编语言的初学者,直到现在我理解很多东西,但很多天我陷入了一个区域,这让我感到困惑,最糟糕的是,通过互联网访问的很多页面,信息再次被扭曲,这部分是 Addressing Modes 具体为 memory refrence 所以例如在Addressing Modes in Assembly Language (IA-32 NASM)

两条说明似乎相同,但评论不同

  • mov esi, var :将var(例如0x0040120e)的 address 复制到esi中

  • mov dword [eax], var1 :将var1中的 value 复制到内存插槽中
    由eax指定

这两个指令都处理var或var1这些是标签,但是在注释中它提到了它复制了内容,而另一个指令复制了地址 .

所以另一个问题我会问这个指令的作用是什么:

  • mov bx, [var]

这些指令之间的差异是什么呢?

所以我需要知道什么是差异,是否有一个我可以阅读的信心源,并确保它's correct,by the way i'使用这个tutorial,并且NASM作为Windows下的汇编程序 .

1 回答

  • 1

    mov dword [eax],var1:将var1中的值复制到eax指定的内存槽中

    不 . 如果 var1 是标签,则会将 var1 的地址作为32位值存储到 eax 指向的内存中 . 例如,如果 var1 的地址是 0x04000000 且eax包含 0x12345678 ,那么这将在 0x12345678 处将 0x04000000 写入内存 .


    这条指令的评论是什么:mov bx,[var]?

    ; Move the word located at var into bx
    

    (注意:汇编中的"move"真的意味着复制)


    mov [var],如果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]这里是它的平均有效地址

    是 . 这与前一个例子没有区别 .

相关问题