[英]Use preprocessor output as inline assembly
我找不到混合使用預處理器和內聯匯編的方法,也無法在Google上找到任何解決方案。
假設您有這個常數:
(簡化代碼)
#define SOME_ASM \
.short 0x0000; \
.short 0x0000; \
movw %eax, %ebx; \
在程序集文件中,我可以執行以下操作:
SOME_ASM
or %cx, %cx
jnz 1f
or %dx, %dx
jnz 1f
mov %ax, %cx
mov %bx, %dx
而且有效。 但是現在我正在做一個新的和改進的ASM代碼版本,並且我正在用C語言做它
我如何在C中做這樣的事情而不修改常量:
asm(
SOME_ASM
"or %cx, %cx\n"
"jnz 1f\n"
"or %dx, %dx\n"
"jnz 1f\n"
"mov %ax, %cx\n"
"mov %bx, %dx\n"
);
避免復制代碼和常量
asm塊只是一個字符串,因此請使用字符串宏。 如果您真的需要內聯匯編,請重新考慮。
#define SOME_ASM \
".short 0x0000;" \
".short 0x0000;" \
"movw %ax, %bx;"
void foo()
{
asm(
SOME_ASM
"or %cx, %cx\n"
"jnz 1f\n"
"or %dx, %dx\n"
"jnz 1f\n"
"mov %ax, %cx\n"
"1:\n"
"mov %bx, %dx\n"
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.