括号在x86 asm中的含义是什么?

时间:2010-01-08 20:04:15

标签: assembly x86

给出以下代码:

L1     db    "word", 0

       mov   al, [L1]
       mov   eax, L1

括号([L1])代表什么?

8 个答案:

答案 0 :(得分:44)

[L1]表示地址L1的内存内容。在此处运行mov al, [L1]后,al寄存器将在地址L1(字母'w')处接收字节。

答案 1 :(得分:34)

此类操作数(例如[ebp])称为memory operands

这里的所有答案都很好,但是我看到没有人告诉我这是一个严格的规则 - 如果是括号,那么取消引用,除非它是什么lea指令

lea是上述规则的例外。说我们

mov eax, [ebp - 4]

ebp的值减去4,括号表示结果值被视为地址,驻留在该地址的值存储在eax中。但是,在lea的情况下,括号不代表:

lea eax, [ebp - 4]

ebp的值减去4,结果值存储在eax中。该指令只计算地址并将计算出的值存储在目标寄存器中。有关详细信息,请参阅this post

答案 2 :(得分:30)

简单地意味着将内存放在标签L1标记的地址上。

如果您喜欢C,请按照以下方式考虑:[L1]*L1相同

答案 3 :(得分:6)

括号表示取消引用地址。例如

mov eax, [1234]

表示将地址1234的内容移动到EAX。所以:

1234 00001

EAX将包含00001。

答案 4 :(得分:2)

Direct memory addressing - al将加载位于内存地址L1的值。

答案 5 :(得分:1)

它们意味着不是将寄存器或数值L1的值移动到寄存器al中,而是将寄存器值或数值L1视为指向内存的指针,取指令该内存地址的内容,并将该内容移动到al

在这种情况下,L1是一个内存位置,但如果寄存器名称在括号中,则会应用相同的逻辑:

mov al, [ebx]

也称为负载。

答案 6 :(得分:0)

与许多汇编语言一样,这意味着间接。换句话说,第一个mov加载al {em>内容 L1(换句话说,字节为'w'),而不是地址。

您的第二个mov实际上会使用地址 eax加载L1,您可以稍后取消引用该内容以获取或设置其内容。

在这两种情况下,L1在概念上被认为是地址。

答案 7 :(得分:0)

它表示寄存器应该用作实际位置的指针,而不是作用于寄存器本身。