2009-05-02 94 views

回答

7

寄存器是CPU內的存儲區域。以下是一些定義:

  • 寄存器文件是一組寄存器 - 有關完整說明,請參閱http://en.wikipedia.org/wiki/Register_file
  • eax寄存器是Intel x86系列CPU的累加器寄存器 - 它是整數數學完成的地方。
  • 程序寄存器(我想你的意思是程序計數器)是包含了下機器代碼指令的地址的專用寄存器執行
+0

在8086和更高版本中,絕對在32位(386)和現代x86-64中,所有寄存器都是基本上是通用的。許多人也有特殊的用途(像`ecx`中的移位計數,並且全乘(32bx32b => 64b)仍然需要`eax`中的一個輸入),但是`add eax,edx`和`add esp,ebp`只是「add」指令有兩種不同的src/dest選項。 32位x86主要有7個通用寄存器。使用`esp`作爲堆棧指針以外的任何東西通常是不可能的/在實際代碼中是值得的。 – 2016-04-03 21:23:06

+0

「程序寄存器」可能意味着進程的[架構狀態](https://en.wikipedia.org/wiki/Architectural_state)的註冊部分。當你談論線程之間的上下文切換時,或者如果你在內核代碼中,那麼「程序寄存器」可能是你在進入內核時保存的用戶空間狀態。這不僅僅是「程序計數器」或「指令指針」的奇怪名稱。 – 2016-04-03 21:28:23

4

寄存器是位於CPU內部的一小塊內存。並被彙編語言用來執行各種任務。

是否可以通過程序註冊您是指程序計數器?

3

好了,你有個通用寄存器,那麼你有寄存器(例如程序計數器寄存器),還有其他各種(存儲器/段寄存器,SSE)。

EAX,EBX等是標準的通用寄存器。你可以將它們用於任何你想要的。通常,返回值應該被放入EAX中,但基本上就是這樣。然後你有堆棧指針EBP,它指向你的堆棧的開始。最後,你必須編程計數器,它指向當前的指令EIP。在x86上,有一些特殊情況,其中兩個寄存器在執行64位整數計算時會進行融合。字符串指令存在更多特殊情況。如果你正在學習彙編,最簡單的方法是從一個擁有更多寄存器的PowerPC開始,並且你可以毫無限制地自由使用它們。

所有這些寄存器當然都是硬件寄存器,也就是說,它們是物理內置到CPU中的)它們所在的地方稱爲寄存器文件。

您可以看到的另一種類型的寄存器是,如果您有一個使用寄存器的虛擬機(Parrot),您將獲得「虛擬寄存器」,稍後將其分配給實際寄存器。這與您自己編寫編譯器時可以執行的操作類似,您基本上假設無限量的寄存器(也就是說,您在每次使用時生成一個新的寄存器),然後以不同的階段轉換爲實際寄存器(寄存器分配)。

3

「硬件寄存器」也可能指某個硬件設備內的某個位置。例如,一個UART(COM端口)看起來像一個D型連接器,其外部帶有9或25個引腳,但對於設備驅動程序來說,它看起來像幾個配置寄存器,一個狀態寄存器和數據寄存器,它們將下一個字符發送並收到最後一個字符。 (我忽略了lot的詳細信息。)

在x86架構中,這些寄存器通常位於通過I/O指令訪問的特殊物理地址空間中。在其他平臺中,硬件寄存器通常映射到正常內存空間的某個角落。在任何一種情況下,操作系統及其設備驅動程序的重要角色之一是防止應用程序代碼需要知道硬件寄存器所在位置的細節以及它們的含義。

在某些類型的硬件設備中,內存和硬件寄存器之間的區別不太清楚。例如,您的視頻適配器包含一個稱爲幀緩衝區的內存塊,該緩衝區保存每個像素的顏色和亮度值。該內存是一個大型硬件寄存器還是僅僅是一個具有有趣副作用的緩衝區?

5

寄存器是最基本的數據存儲設備。現在這些是主要的區別。

寄存器文件通常是以這種方式組織的寄存器的大集合,以便它們用於計算。在現代處理器中,所有計算都是在存儲在寄存器文件的多個寄存器中的值之間執行的。

硬件寄存器通常指的是存儲配置和狀態信息的寄存器。這可能是針對處理器或某些外部硬件I/O設備的。

程序寄存器可以指程序計數器,它是一個專用寄存器,用於存儲處理器正在執行的當前指令的存儲位置。

0

關於這個問題,有您應該考慮兩種類型的寄存器:

  • 程序註冊
  • 硬件寄存器

寄存器的時鐘頻率的硬件(更新時鐘滴答)並用於處理器電路設計的物理

程序寄存器是隨機存取存儲器,並保存在位於CPU中的寄存器文件中。彙編/機器代碼指令通過%eax,%esp,%rdi,%edi等名稱訪問這些寄存器。