4

.data セクションに次の項目があるとします。

0x1234 00010203 04050607 08090a0b 0c0d0e0f
0x1238 10000000

そしてコードでは、

mov $0x1234, %eax
mov 0x1238, %ebx

$記号を使用すると定数になると思いますので、%eaxにはメモリアドレスがありますが、%ebxはどうですか?

2つの命令の正確な違いは何ですか?

4

1 に答える 1

10

違いは、ある$場合は数値であり、ない$場合はそのアドレスのメモリの内容であるということです

命令の引数に特別なマーカー (レジスタの % や数値定数の $ など) がない場合、それはメモリ アクセスです。したがって、次のとおりです。

movl 10, %eax
movl foo, %eax

intel 構文に対応:

mov eax, [10]
mov eax, [foo]

数値定数を使用するか、ラベルのアドレスを使用するには、$ 演算子があります。

movl $10, %eax
movl $foo, %eax

インテルの構文:

mov eax, 10
mov eax, offset foo

http://x86asm.net/articles/what-i-dislike-about-gas/

于 2013-09-25T07:01:32.160 に答える