簡體   English   中英

將預處理器輸出用作內聯匯編

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM