dword操作数在汇编中的作用是什么

时间:2014-05-07 08:11:38

标签: assembly opcode

你好我想在intel32上拿起程序集,

我的完整问题是,这是什么意思?

mov dword ptr [esp+18h], 0AH

我特别不参与[esp + 18h]

4 个答案:

答案 0 :(得分:2)

这意味着在地址0AH的内存中存储双字(x86上的4个字节)值0000000AH(与esp+18h相同)。例如,如果esp包含值4,并且内存内容如下所示:

Address      Contents
-----------------------------------------------------
0000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0010: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F

您将拥有mov dword ptr [esp+18h], 0AH之后:

Address      Contents
-----------------------------------------------------
0000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
0010: 10 11 12 13 14 15 16 17 18 19 1A 1B 0A 00 00 00

只是写mov [esp+18h], 0AH是不明确的,因为无法从指令中推断出立即(0AH)的大小。因此添加dword ptr以告诉汇编器内存操作数是dword,因此立即数也应该是dword

答案 1 :(得分:2)

[ESP+18h]中的括号表示MOV的目的地是ESP + 18h的记忆位置。例如,如果ESP的值为10000000h,那么您的目标是内存位置10000018h。

DWORD定义用于移动操作的内存位置的“大小”。在您的示例中,您将0000000Ah(4个字节)移动到内存位置ESP + 18h。由于0Ah是立即值,因此如果不使用DWORDWORDBYTE或其他类似限定符,则无法确定其大小。

英特尔惯例是定义目标内存位置的“大小”而不是直接本身(例如MOV DWORD PTR [ESP+18h], 0Ah vs MOV [ESP+18h], dword 0Ah)。

答案 2 :(得分:1)

这可能是指用作变量位置的内存位置。 [esp + 18h]是C中指针(*)的引用.ESP代表扩展堆栈指针。 ESP寄存器包含存储值的存储器表的地址。您取值为ESP并添加18h偏移量以查找要存储值0AH的内存地址的最终位置。

答案 3 :(得分:0)

mov dword ptr [esp+18h], 0AH

我几天前问过这个问题:

  1. 我使用的是Intel ia-32,所以DWORD对我来说意味着4个字节或32位

  2. 读取[..]符号为;使用此处的值作为包含数据的内存中的位置地址。

  3. 在MOV操作数的情况下,当与dword ptr一起使用时,它意味着在内存中访问该位置并引用存储在那里的值。我提出这一点是因为如果使用LEA操作数而不是结果可能会有所不同。

  4. 所以上面显示的代码表示,使用值esp + 18h作为内存中的地址并添加10; 10因为A是十六进制的10。