GCC の使用
__asm__("movl %edx, %eax\n\t"
"addl $2, %eax\n\t");
VC++ の使用
__asm {
mov eax, edx
add eax, 2
}
GCC には、それだけではありません。命令では、オプティマイザが失敗しないように、何が変更されたかをコンパイラに伝える必要があります。私は専門家ではありませんが、時々次のようになります:
asm ("lock; xaddl %0,%2" : "=r" (result) : "0" (1), "m" (*atom) : "memory");
サンプル コードを C で記述し、GCC にアセンブリ リストの作成を依頼して、そのコードを変更することをお勧めします。
C/C++ でのインライン アセンブリについて説明している次の記事を読むことから始めるとよいでしょう:
http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx
記事の例:
#include <stdio.h>
int main() {
/* Add 10 and 20 and store result into register %eax */
__asm__ ( "movl $10, %eax;"
"movl $20, %ebx;"
"addl %ebx, %eax;"
);
/* Subtract 20 from 10 and store result into register %eax */
__asm__ ( "movl $10, %eax;"
"movl $20, %ebx;"
"subl %ebx, %eax;"
);
/* Multiply 10 and 20 and store result into register %eax */
__asm__ ( "movl $10, %eax;"
"movl $20, %ebx;"
"imull %ebx, %eax;"
);
return 0 ;
}