Assembly 什么';s at&;中带$symbol或不带$symbol的数字之间的差异;t汇编语法?
假设。数据部分有以下项:Assembly 什么';s at&;中带$symbol或不带$symbol的数字之间的差异;t汇编语法?,assembly,x86,att,immediate-operand,Assembly,X86,Att,Immediate Operand,假设。数据部分有以下项: 0x1234 00010203 04050607 08090a0b 0c0d0e0f 0x1238 10000000 在代码中 mov $0x1234, %eax mov 0x1238, %ebx 我相信有了$symbol,它将是一个常量,所以%eax将有内存地址,但是%ebx呢 两条指令之间到底有什么区别?区别在于,有了$它是数值,而没有$它是该地址的内存内容 若指令的参数并没有任何特殊标记(如%表示寄存器或$表示数值常量),那个么它就是内存访问。因此: movl
0x1234 00010203 04050607 08090a0b 0c0d0e0f
0x1238 10000000
在代码中
mov $0x1234, %eax
mov 0x1238, %ebx
我相信有了$symbol,它将是一个常量,所以%eax将有内存地址,但是%ebx呢
两条指令之间到底有什么区别?区别在于,有了
$
它是数值,而没有$
它是该地址的内存内容
若指令的参数并没有任何特殊标记(如%表示寄存器或$表示数值常量),那个么它就是内存访问。因此:
movl 10, %eax
movl foo, %eax
对应于英特尔语法:
mov eax, [10]
mov eax, [foo]
mov eax, 10
mov eax, offset foo
要使用数字常量或使用标签地址,有$operator:
movl $10, %eax
movl $foo, %eax
在英特尔语法中:
mov eax, [10]
mov eax, [foo]
mov eax, 10
mov eax, offset foo
所以你是说,
mov$0x1238,%ebx
只是数值常量,而不是内存访问,即使内存中存在0x1238地址?内存访问
这里是数据,不是指令