分类: LINUX
2009-02-10 16:44:44
关于output限定符中&的含义:
GCC编译器不得为任何input表达式使用与此output表达式相同的寄存器。
原因是,此output表达式需要在所有input表达式被输入之前属出。
|
输出部的处理时机是在汇编代码执行之后,而输入部是在汇编代码执行之前。
这段代码的流程是:
1. __in1和__in2将会被装入GCC随机选定的寄存器x和y中
2. 将栈顶数字w弹出到eax中
3. 将寄存器x的值复制到esi,将寄存器y的值放入edi
4. 将eax中的这个数字w保存到__out中
注意,如果x和y中不幸有一个是寄存器eax,那么,第2步骤中的操作会覆盖eax的值,导致esi或edi不是__in1或__in2的原始值。此时如果在"=&a"(__out)有一个&号,则x和y都不会是eax了,就避免出错了。