我在C程序内的asm中编写代码,但我误解了__asm {...}是我能够做到这一点的必要条件。后来我发现__asm适用于MSVC编译器,而不适用于GCC。 MSVC的__asm关键字在C中的等效项是什么?我编写的代码中有标签和循环,不知道在__asm关键字中用于GCC的语法是什么。
我的代码正在(或试图做)古老的乘法方法。
int p = 0;
int b = 10;
int a = 5;
/*
while(b!= 0){
if(b%2 != 0) p+=a;
a+=a;
b/=2;
}
printf("%i\n",p);
*/
__asm{
mov p, 0
mov edx, p
mov ebx, a
mov ax,b
jmp checkend
notEven:
add edx, ebx
mov edx, a
checkend:
cmp b, 0
je endok
test ax, 1
jnz notEven
add ebx, ebx
mov a, ebx
mov dx, 0
mov ax, b
mov bx, 2
div bx
mov b,ax
}
printf("%i\n",p);
return 0;
}
答案 0 :(得分:3)
对于C ++的
__asm
函数,C语言等效于什么?
C没有用于内联汇编的标准条款,因此它取决于您的实现。该标准将asm
关键字记录为通用扩展名,但是该关键字是否可用以及其语义可能取决于您的C实现。
由于您已标记GCC,因此您想咨询GCC's documentation on inline assembly。 GCC确实为此使用了asm
关键字。最简单的用法是采用以下形式:
asm ( AssemblerInstructions ... );