인라인 어셈블리 코드 아래에 문제가 있습니까? spinlock_lock 함수를 실행할 때 "잘못된 명령 (코어 덤프 됨)"이 발생했습니다.인라인 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의 L 「 \t \t \t \t : // '= R"(a) \t \t \t \t "R"(자물쇠 -> cmos_lock) \t \t \t \t : "eax"); – dykw
@dykw 예, jnz가 함수 진입 점으로 다시 분기 할 것이므로 인라인 어셈블러 코드 내에서 분기를 유지해야합니다. –
작동하지 않습니다. "__asm__ __volatile__ ("lock; cmpxchg %% edx, % 0 \ n "".) 이유문이 사라집니다. 왜? – dykw