由于我是GCC的新手,因此我遇到了内联汇编代码的问题。问题是我无法弄清楚如何将C变量(类型为UINT32
)的内容复制到寄存器eax
中。我试过以下代码:
__asm__
(
// If the LSB of src is a 0, use ~src. Otherwise, use src.
"mov $src1, %eax;"
"and $1,%eax;"
"dec %eax;"
"xor $src2,%eax;"
// Find the number of zeros before the most significant one.
"mov $0x3F,%ecx;"
"bsr %eax, %eax;"
"cmove %ecx, %eax;"
"xor $0x1F,%eax;"
);
但是mov $src1, %eax;
不起作用。
有人可以建议解决这个问题吗?
答案 0 :(得分:12)
我猜你要找的是extended assembly例如:
int a=10, b;
asm ("movl %1, %%eax; /* eax = a */
movl %%eax, %0;" /* b = eax */
:"=r"(b) /* output */
:"r"(a) /* input */
:"%eax" /* clobbered register */
);
在上面的示例中,我们使用汇编指令和b
寄存器使a
的值等于eax
的值:
int a = 10, b;
b = a;
请参阅内联评论。
注意:强>
mov $4, %eax // AT&T notation
mov eax, 4 // Intel notation
关于GCC环境中inline assembly的好读。