GCC 的 MSVC __asm 关键字是什么?
What is the MSVC __asm keyword for GCC?
我在 C 程序中用 asm 编写代码,我误读了 __asm{...} 是我需要的才能做到这一点。后来我发现 __asm 是针对 MSVC 编译器的,而不是 GCC。 MSVC 的 __asm 关键字在 C 中的等价物是什么?我在我编写的代码中有标签和循环,但不知道在 GCC 的 __asm 关键字中它们的语法是什么。
我的代码正在做(或试图做)古老的乘法。
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;
}
What is the equivalent in C for C++'s __asm
function?
C 没有内联汇编的标准规定,所以这取决于您的实现。标准将 asm
关键字记录为 通用扩展 ,但它是否可用及其语义可能取决于您的 C 实现。
既然你已经标记了 GCC,你会想要参考 GCC's documentation on inline assembly。 GCC 确实为此使用了 asm
关键字。最基本的用法采用这种形式:
asm ( AssemblerInstructions ... );
我在 C 程序中用 asm 编写代码,我误读了 __asm{...} 是我需要的才能做到这一点。后来我发现 __asm 是针对 MSVC 编译器的,而不是 GCC。 MSVC 的 __asm 关键字在 C 中的等价物是什么?我在我编写的代码中有标签和循环,但不知道在 GCC 的 __asm 关键字中它们的语法是什么。
我的代码正在做(或试图做)古老的乘法。
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;
}
What is the equivalent in C for C++'s
__asm
function?
C 没有内联汇编的标准规定,所以这取决于您的实现。标准将 asm
关键字记录为 通用扩展 ,但它是否可用及其语义可能取决于您的 C 实现。
既然你已经标记了 GCC,你会想要参考 GCC's documentation on inline assembly。 GCC 确实为此使用了 asm
关键字。最基本的用法采用这种形式:
asm ( AssemblerInstructions ... );