下面的內聯彙編代碼有什麼問題嗎? 運行函數spinlock_lock時遇到「非法指令(核心轉儲)」。Inline Aseembly關於「非法指令(核心轉儲)」,我該怎麼辦
void spinlock_lock(struct spinlock * lock) {
int a;
__asm__ __volatile__("movl %0, %%eax;"
"test %%eax, %%eax;"
"jnz spinlock_lock;"
:"=r"(a)
:"r"(lock->cmos_lock)
:"eax");
__asm__ __volatile__ ("lock; cmpxchg %%edx, %0\n"
:"=r"(a)
:"r"(lock->cmos_lock)
:"edx", "memory");
你正在談論他的__ asm__ __volatile __( 「L」? 「MOVL%0,%% EAX;」 \t \t \t 「測試%% EAX,EAX %%;」 // \t \t \t「JNZ spinlock_lock ;」 \t \t \t 「JNZ升;」 \t \t \t \t:// 「= R」(一) \t \t \t \t: 「R」(鎖相> cmos_lock) \t \t \t \t:「eax」); – dykw
@dykw是的,您的jnz將分支回函數入口點,您應該保持內聯彙編代碼中的分支。 –
它不起作用。我嘗試評論「__asm__ __volatile__(」lock; cmpxchg %% edx,%0 \ n「」。非法指令消失,爲什麼? – dykw