2010-10-16 45 views
2

我想知道如何僅使用c來獲取eflags註冊內容,而沒有任何_asm插入。可能嗎?如何僅使用c獲取eflags

+0

根據你的編譯器的不同,你可能有一個頭文件,它有一些特殊的功能來訪問CPU特有的功能。 – 2010-10-16 16:25:33

回答

4

不,在沒有_asm的標準C中是不可能的,除非你有一個C編譯器,它有一些編譯器特定的方法來完成它。

0

沒辦法。但是你可以用一個很好的宏來欺騙你自己。我現在不能測試這個,但是沿着這條線:

#define GET_FLAGS(X) asm volatile ("pushfl;\ 
            popl %%eax;  \ 
            movl %%eax, %0;" \ 
            :"=m" (X)   \ 
            ); 

uint32_t getFlags() { 
    uint32_t flags; 
    GET_FLAGS(flags); 

    return flags; 
} 

當然,它是高度依賴於體系結構的。這裏的可移植性非常低。

相關問題