x86 CPU的MSR暫存器

2021-08-28 03:57:41 字數 1374 閱讀 3545

msr(model specific register)是x86架構中的概念,指的是在x86架構處理器中,一系列用於控制cpu執行、功能開關、除錯、跟蹤程式執行、監測cpu效能等方面的暫存器。

msr暫存器的雛形開始於intel 80386和80486處理器,到intel pentium處理器的時候,intel就正式引入rdmsr和wrmsr兩個指令用於讀和寫msr暫存器,這個時候msr就算被正式引入。在引入rdmsr和wrmsr指令的同時,也引入了cpuid指令,該指令用於指明具體的cpu晶元中,哪些功能是可用的,或者這些功能對應的msr暫存器是否存在,軟體可以通過cpuid指令查詢某些功能是否在當前cpu上是否支援。

每個msr暫存器都會有乙個相應的id,即msr index,或者也叫作msr暫存器位址,當執行rdmsr或者wrmsr指令的時候,只要提供msr index就能讓cpu知道目標msr暫存器。這些msr暫存器的編號(msr index)、名字及其各個資料區域的定義可以在intel x86架構手冊」intel 64 and ia-32 architectures software developer's manual"的volume 4中找到。

msr顧名思義就是model specific,即不同的cpu型號或不同的cpu廠商(intel和amd都會做x86架構的處理器),它的msr暫存器可能是不一樣的,它會根據具體的cpu型號的變化而變化,每款新的cpu都有可能引入新的msr暫存器。事實證明,msr暫存器的引入用處還是很大的,有一些msr暫存器甚至是msr暫存器的部分區域將會被固定下來,並且未來的cpu都會支援這些msr暫存器或者msr暫存器的部分區域,這類msr暫存器就叫做「architecture msrs」,architecture msr由於歷史的原因(pentium處理器是32位的),它的名字都是以"ia32_"為字首的,即使是在目前主流的64位x86處理器中也是這樣命名。對於intel的x86 cpu和amd的x86 cpu而言,它們的msr暫存器可能會有區別,但是可能因為各種原因,或者為了軟體的相容性,它們的部分msr暫存器是一樣的,如ia32_lstar

另外,對於x86 cpu而言,它不僅僅有msr暫存器,它還包含了特別多的csr(control and status register)暫存器,這些暫存器主要是給bios/uefi使用,讓其根據具體的主機板結構對cpu的工作模式,內部功能控制,cpu之間的互連等進行配置。csr暫存器是通過類似pci配置空間訪問的方式進行訪問的,但是當bios/uefi配置完成後,會將其隱藏起來,所以對於os而言,它只能訪問到msr暫存器,它根本不知道csr暫存器的存在。總的來說,msr暫存器對於bios/uefi和os都是可見的,而csr暫存器只對bios/uefi可見,對於os來說是不可見的。

x86 CPU所有的暫存器種類

1.一般暫存器 ax bx cx dx ax 累加暫存器,bx 基址暫存器,cx 計數暫存器,dx 資料 暫存器 ax,bx,cx,dx 各為16 位即2bytes 空間的暫存器,其中 ax又可化分為ah與 al,而 bx可化分為bh與 bl,cx及 dx亦同,而ah與 al空間即為8位 1byte...

80X86CPU暫存器表

2009 08 04 22 59 17 分類 彙編 標籤 資料段 段 堆疊段 記憶體 堆 堆疊 cpu暫存器 字型大小 訂閱 學習彙編,會有很多類似標題列舉的這些概念,如果對這些概念沒有乙個較清晰的認識,學習起來會相當的吃力。我也是在大學裡好好學過彙編,畢業後一直沒有摸過,現在,我又把書重新拾起來,...

x86的暫存器

最近一段時間,在看組合語言方面的東西。看的大部分都是基於8086。而8086的晶元中是16位的資料線,16位的暫存器。看了大部分指令後也是16位的。所在在把程式移植到32位的處理器上的時候,就會發現有此不同。雖然處理器是32位的,但是它還是保留的ax,bx,cx,dx,bp暫存器還是16位。其定址方...