0
#define MOV_MACRO(R0,R1)\
{\
"mov R0, R1 \n\t"\
}
__asm__ volatile(\
MOV_MACRO(r4,r5)
:"r4","r5"\
);\
是否可以在asm塊中使用這樣的函數? 如果沒有,請建議使用它的方法。我可以在gcc內聯彙編塊中使用函數宏嗎?
#define MOV_MACRO(R0,R1)\
{\
"mov R0, R1 \n\t"\
}
__asm__ volatile(\
MOV_MACRO(r4,r5)
:"r4","r5"\
);\
是否可以在asm塊中使用這樣的函數? 如果沒有,請建議使用它的方法。我可以在gcc內聯彙編塊中使用函數宏嗎?
是的,這是可能的,但如果你需要這樣的功能,你可能不應該使用內聯asm,而應該使用單獨的asm模塊。
#define MOV_MACRO(R0,R1) "mov " #R0 ", " #R1 "\n\t"
void foo()
{
__asm__ volatile(
MOV_MACRO(r4,r5)
::
:"r4","r5"
);
}
你能回答爲什麼它不應該內聯asm? – user3249055
內聯asm通常應用於簡短的代碼段,其中函數調用將不可能或具有大量開銷。如果你需要宏,這似乎表明你的代碼比這更復雜。當然也有例外,這只是一個通用的指導方針。 – Jester