我遇到了这个内联的asm。如果没有这种语法,我不确定应该怎么看...有人能给我看一下吗?
__asm__ volatile ("lock\n\tincl %0"
:"=m"(llvm_cbe_tmp__29)
:"m"(*(llvm_cbe_tmp__29))"cc");
答案 0 :(得分:4)
lock
incl llvm_cbe_tmp__29
但是,因为操作数是抽象地指定的,所以编译器将生成引用它所需的代码,即使这意味着加载和存储。因此,可能会添加两个以上的指令或寻址模式。
答案 1 :(得分:3)
在此上使用gcc -S:
int main()
{
int *p;
asm volatile ("lock\n\tincl %0":"=m"(p):"m"(*(p)):"cc");
}
给出
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $20, %esp
movl -8(%ebp), %eax
#APP
# 4 "asm.c" 1
lock
incl -8(%ebp)
# 0 "" 2
#NO_APP
addl $20, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret