匯編言語有效指令錯誤概述。本站提示廣大學習愛好者:(匯編言語有效指令錯誤概述)文章只能為提供參考,不一定能成為您想要的結果。以下是匯編言語有效指令錯誤概述正文
問題:cmpxchg8b 指令比擬一個8字節值edx和EAX帶有8字節值內存( 目的地操作數)。 只要無效目的操作數用於此指令是內存 操作數。 假如目的操作數是一個存放器處置器應發生一個 有效OpCode例外,執行的指令cmpxchg8b該當中止和 處置器應該執行有效OpCode異常處置順序。 此錯誤發作是 鎖定前綴為運用cmpxchg8b指令與一個(有效)存放器目的地 操作數。 在這種狀況下,處置器能夠無法啟動執行有效OpCode 異常處置順序,由於總線已鎖定。 這將招致零碎掛起。
提示:假如(有效)存放器目的地 操作運用cmpxchg8b指令和鎖定前綴,零碎能夠掛起。 沒有內存數據已損壞,用戶可以執行零碎重置以前往到正常 操作。 請留意,特定有效代碼序列必要此錯誤 發作通常不能被生成,該課程的編程也不這樣的序列 可可由此商業軟件。
此錯誤僅適用於奔騰 處置器、奔騰處置器與MMX技術、奔騰OverDrive處置器 和奔騰OverDrive處置器帶有MMX技術。 奔騰Pro處置器, 奔騰II處置器和i486及更早版本處置器不受影響。
變通方法:有兩種變通辦法此錯誤以 維護形式操作零碎。 變通方法二者生成一個頁面錯誤當有效 OpCode例外狀況。 在以上兩例中,頁錯誤將維修前有效 OpCode例外,從而避免鎖定形態的發作。 施行 細節將有所不同取決於操作零碎。 運用以下辦法之一:
第一局部的該處理方法集的第一個7條目(0-6)中綴 描繪信息表(IDT)在非寫頁。 當有效OpCode異常 (異常6)呈現的緣由是鎖定cmpxchg8b指令帶有效注冊 目的地,然後才),處置器將生成一個頁面錯誤假如沒有有 寫訪問該頁面包括條目6的IDT。 的第二局部該處理方法 修正頁面錯誤處置順序看法和正確地調度"有效OpCode 例外狀況,如今布線經過頁面錯誤處置順序。
部件I、IDT頁面訪問
標志頁面包括的第一個七個條目(0-6)的IDT為只讀經過 設置位1的頁面表條目為零。 也可以設置cr0.wp(16位)為1。 如今,當" 有效OpCode異常發作鎖定cmpxchg8b指令,處置器將 會觸發頁面錯誤由於它沒有寫訪問該頁面包括條目6的 IDT。 此頁面錯誤阻止了總線鎖定形態並給操作零碎完全控制 進程"有效操作異常。 請留意,例外6是 有效OpCode例外,因而與此圖式的OS有完全控制的任何順序 執行一個有效cmpxchg8b指令。
可選:假如更新條目7-255的IDT發作在課程正常 操作,頁面錯誤應防止在寫入這些IDT條目。 這些頁面錯誤 可防止對齊IDT跨越一個4KB頁面邊界(例如,可在第一個七個 條目(0-6)的IDT在第一個只讀"頁和"剩余的條目在 讀/寫頁。
第II、頁面錯誤 處置順序修正
修正尋呼容處置順序來計算哪種異常招致該頁面錯誤運用 容地址以cr2。 假如錯誤代碼堆棧上表示發生異常 從震鈴0和假如地址對應於有效OpCode例外,然後彈出的 錯誤代碼封閉堆棧和跳轉到"有效OpCode異常處置順序。 否則 持續正常頁面錯誤處置順序。
或
該處理方法有兩局部。 首先,中綴描繪信息表(IDT)對齊 (例如,任何有效OpCode異常會招致頁面錯誤(由於頁不 存在)。 其次,頁面錯誤處置順序日期看法和正確地調度 "有效OpCode異常和其他一些例外狀況,如今布線經過 頁面錯誤處置順序。
部件I、IDT校准:
對齊中綴描繪信息表(IDT)這樣的,其跨越4KB頁面邊界, 把第一項啟動56字節來自最終的第一個4KB"頁。 這將 該第一個七個條目(0-6)在第一個4KB"頁和剩余的條目在 第二個頁面。
該頁面包括的頭7條目IDT不能有映射在OS 頁面表。 這將招致任何例外0-6生成一份頁不存在毛病。 一個 頁面錯誤阻止了總線鎖定形態並給操作零碎完全控制進程 這些異常。 請留意,例外6是有效OpCode例外,因而 與此圖式的OS有完全控制的任何順序執行一個有效cmpxchg8b 指令。
第II、頁面錯誤處置順序修正:
辨認訪問指向的第一頁IDT經過測試的容地址cr2中。 頁面不存在毛病在其他地址可處置正常。
頁不存在毛病第一頁上的IDT,操作零碎必需辨認和 發送異常形成該頁面不存在毛病。 持續之前,測試 毛病地址以cr2以確定其能否被在地址范圍相應 例外狀況0-6。
計算哪種異常招致該頁不存在毛病沉著地址 cr2中。
取決於操作零碎,某些權限級別反省能夠會要求,以及 調整中綴堆棧。
跳轉到正常處置順序為適當異常。
兩個變通方法僅應上完成英特爾處置器前往family=5 經過CPUID指令。