我試圖禁用/啓用緩存在Linux內核空間。C使用匯編:操作數類型不匹配推
我使用的代碼是
__asm__ __volatile__(
"pushw %eax\n\t" /*line 646*/
"movl %cr0,%eax\n\t"
"orl $0x40000000,%eax\n\t"
"movl %eax,%cr0\n\t"
"wbinvd\n\t"
"pop %eax");
我編譯後,我得到的錯誤消息如下:
memory.c: Assembler messages:
memory.c:645: Error: operand type mismatch for `push'
memory.c:646: Error: unsupported for `mov'
memory.c:648: Error: unsupported for `mov'
memory.c:650: Error: operand type mismatch for `pop'
make[4]: *** [memory.o] Error 1
我的機器是英特爾(R)至強(R)CPU E5-1650 v2 @ 3.50GHz。 64位機器。
任何人都可以幫我指出哪一部分是不正確的,我該如何解決它?
我猜這是因爲指令和寄存器的不匹配。但我很困惑如何解決它。 :(
在此先感謝
是不是'pushw'的字大小(16位)? EAX是32位,請嘗試'pushl' – Leeor
Hi @Leeor,非常感謝您的評論!但pushl會報錯:memory.c:645:錯誤:'push'的指令後綴無效;我也嘗試過pushq,它也不工作 – Mike