Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 什么';s at&;中带$symbol或不带$symbol的数字之间的差异;t汇编语法?_Assembly_X86_Att_Immediate Operand - Fatal编程技术网

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地址?
内存访问
这里是数据,不是指令