只有在 [選項] 對話方塊的 [偵錯] 節點中啟用位址層級偵錯時,才能使用 [暫存器] 視窗。
暫存器是處理器 (CPU) 內的特殊位置,用於儲存處理器正在主動處理的小段資料。 編譯或解釋原始碼會產生指令,根據需要將資料從記憶體移動到暫存器中,然後再次移回。 與訪問內存中的數據相比,訪問暫存器中的數據非常快,因此允許處理器將數據保存在暫存器中並重複訪問它的代碼往往比需要處理器不斷加載和卸載暫存器的代碼執行得更快。 為了讓編譯器更容易將資料保留在暫存器中,並執行其他最佳化,您應該避免使用廣域變數,並儘可能依賴局部變數。 以這種方式編寫的代碼據說具有良好的參考位置。 在某些語言中,例如 C/C++,程式設計師可以聲明一個暫存器變量,該變數告訴編譯器盡最大努力始終將變數保留在暫存器中。 如需詳細資訊,請參閱 註冊關鍵字。
寄存器可分為兩種類型:通用和特殊用途。 一般用途暫存器會保存一般運算的資料,例如將兩個數字相加或參考陣列中的元素。 特殊用途寄存器具有特定的用途和特殊意義。 一個很好的例子是堆疊指標暫存器,處理器使用它來追蹤程式的呼叫堆疊。 作為程式設計師,您可能不會直接操作堆疊指標。 但是,它對於程式的正常運作至關重要,因為如果沒有堆疊指標,處理器將不知道在函數呼叫結束時返回到何處。
大多數通用暫存器僅保留單個數據元素。 例如,單一整數、浮點數或陣列的元素。 一些較新的處理器具有較大的暫存器,稱為向量暫存器,可以保存少量資料陣列。 由於向量暫存器保存了如此多的數據,因此允許非常快速地執行涉及陣列的操作。 向量暫存器最初用於昂貴的高性能超級計算機,但現在正在微處理器上使用,它們在密集的圖形操作中發揮了巨大優勢。
處理器通常有兩組通用暫存器,一組針對浮點運算進行最佳化,另一組針對整數運算進行最佳化。 毫不奇怪,這些稱為浮點和整數暫存器。
受管理的程式碼會在執行階段編譯為存取微處理器實體暫存器的原生程式碼。 暫存器視窗會顯示這些通用語言執行時或原生程式碼的實體暫存器。 「 暫存器」 視窗不會顯示 Script 或 SQL 應用程式的暫存器資訊,因為 Script 和 SQL 是不支援暫存器概念的語言。
如需顯示 [暫存器] 視窗的詳細資訊,請參閱 使用暫存器視窗。
當您查看 暫存器 視窗時,您會看到諸如 EAX = 003110D8。
標誌左側 = 的符號是寄存器名稱, EAX在本例中為 。 標誌右側 = 的數字代表登記冊內容。
暫存器 視窗不僅可以讓您檢視暫存器的內容,還可以執行更多操作。 當您在原生代碼中處於中斷模式時,您可以點擊寄存器的內容並編輯其值。 這不是你應該隨意做的事情。 除非您瞭解正在編輯的暫存器及其包含的資料,否則不小心編輯的結果很可能是程式當機或其他一些不想要的後果。 不幸的是,對各種英特爾和英特爾兼容處理器的暫存器集的詳細解釋遠遠超出了本簡要介紹的範圍。
註冊群組
為了減少混亂, [暫存器] 視窗會將暫存器組織成群組。 如果您使用右鍵單擊寄存器窗口,您將看到一個快捷菜單,其中包含組列表,您可以根據需要顯示或隱藏這些組。
註冊旗標
針對 Intel x86 處理器,您可能會在 [暫存器] 視窗中看到下列旗標。 在偵錯工作階段期間,您也可以編輯這些旗標。
| Flag | 設定值 |
|---|---|
| Overflow | OV = 1 |
| 方向 | 向上 = 1 |
| 插嘴 | EI = 1 |
| 符號 | 市盈率 = 1 |
| 零 | ZR = 1 |
| 輔助攜帶 | 交流電 = 1 |
| Parity | 市盈率 = 1 |
| 承載 | CY = 1 |