X86 X64 讀取rflags的方法

2021-09-19 14:41:05 字數 635 閱讀 6721

工作中遇到的問題,需要讀取rflags的值然後顯示的列印出來。

翻了sdm的指令卷,找到了lahf指令,這個指令可以把rflags的值寫入ah暫存器中,那麼問題來了,ah暫存器只有8位,但是rflags在保護模式或者x64模式是32位/64位的,來看下sdm的說明

可知,確實只擷取了rflags的低8位,intel這麼做想必也是因為低8位比較常用,編寫的**如下:

#include #include #define lahf() \

()int main(int argc, char *ar**)

這樣,就可以讀取出rflags的低8位了。

可是如果不能滿足rflags低8位的讀取怎麼辦?再次翻了sdm中指令的部分,發現也就只有pushf和pop這兩個指令配合來讀取rflags的值了(也許還有別的方法暫時沒發現), **如下:

#define read_rflags_low16() \

()

這樣就成功的把rflags的低16位讀取出來,intel還提供讀取更多的pushf版本,可以選擇使用。

x86,x64表示什麼含義

簡單的說x86代表32位作業系統 x64代表64位作業系統 windows7 32位和64位的區別主要有以下兩個方面 1.兩種系統對cpu gprs的資料寬度要求不同,乙個是64位,乙個是32位 如果你的cpu是雙核以上,那肯定支援64位作業系統了 2.對記憶體的要求,64位支援4g及以上記憶體的電...

X86 X64 函式呼叫約定

c 語言有 cdecl stdcall fastcall naked pascal。c 語言有 cdecl stdcall fastcall naked pascal thiscall,比 c 語言多出一種 thiscall 呼叫方式。下面詳細介紹如上六種呼叫方式 1 cdecl cdecl呼叫約定...

《x86 x64體系探索及程式設計》試讀

現在正在和一些朋友研究 os 核心 基於haiku 當然,這些研究只是作為興趣 有興趣的朋友可以在iteye上發郵件給我,一起研究,編譯器方向的也熱烈歡迎!在研究的過程中,需要對像 x86 64 的底層要有一定的了解。現在還是在看的 深入理解計算機系統 intel 處理器等書還沒接觸到。在看了這本書...