.data セクションに次の項目があるとします。
0x1234 00010203 04050607 08090a0b 0c0d0e0f
0x1238 10000000
そしてコードでは、
mov $0x1234, %eax
mov 0x1238, %ebx
$記号を使用すると定数になると思いますので、%eaxにはメモリアドレスがありますが、%ebxはどうですか?
2つの命令の正確な違いは何ですか?
.data セクションに次の項目があるとします。
0x1234 00010203 04050607 08090a0b 0c0d0e0f
0x1238 10000000
そしてコードでは、
mov $0x1234, %eax
mov 0x1238, %ebx
$記号を使用すると定数になると思いますので、%eaxにはメモリアドレスがありますが、%ebxはどうですか?
2つの命令の正確な違いは何ですか?
違いは、ある$
場合は数値であり、ない$
場合はそのアドレスのメモリの内容であるということです
命令の引数に特別なマーカー (レジスタの % や数値定数の $ など) がない場合、それはメモリ アクセスです。したがって、次のとおりです。
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