2013-11-03 18 views
1

我很抱歉這個難以理解的標題 - 我無法彌補一個更好的。
我想學習程序集(AT & T)並且有關於寄存器的問題:
是否每個寄存器名稱都訪問完全不同和獨立的內存?或者他們是否允許訪問一個寄存器的特定小部分,並因此尋址相同的內存?例如:al是尋址ax的最低8位,eax & rax,以便修改ah修改ax的位9-16,eax & rax?或者是啊,al,ax,eax & rax所有不同的獨立寄存器?
在此先感謝
莫里茨CPU註冊個人或尋址部分

回答

2

寄存器使用某種類型的稱爲觸發器的電子週期,觸發器是存儲0或1並保持其存儲的週期。一個N大小的寄存器是一組N個觸發器。觸發器看起來像這樣:

flip-flop

  • 時鐘:是一個觸發器,當它被激活的數據被傳遞,所以沒有數據,0或1,由上升的存儲。它由CPU中的控制單元控制。
  • 輸入:是1位微小線路的輸入,在觸發器中存儲0或1。
  • 輸出:輸出可以讀取數據的位置。

在32位寄存器中,這32箇中有32位輸入和32位輸出的一個塊被對準:

Register block

通知,在該寄存器不存在子寄存器,像eax,ax,ah,al。我想英特爾球員不得不用4位時鐘,而不是1爲:

  • 第一個時鐘,激活所有的32位觸發器,eax
  • 第二個時鐘,只激活較低的16位觸發器,ax
  • 第三個時鐘,只激活第二個8位,ah
  • 第四個時鐘,只激活前8位,al

像(8 FF,8個觸發器,並且點表示線路連接有):

Inside the register

現在,當所述處理器解碼指​​令,它可以告訴哪個指令您想和您註冊目標,觸發它的時鐘,使用指令的操作碼:

[b0] ff    mov $0xff, %al 
[b4] ff    mov $0xff, %ah 
[66 b8] ff ff  mov $0xffff, %ax 
[b8] ff ff ff ff mov $0xffffffff, %eax 

的物業可能會有所不同,但原理是一樣的。你可以在任何邏輯設計或計算機體系結構書中閱讀關於這個東西的更多信息,但你不需要它在程序集中啓動程序,但它可以幫助你瞭解東西的工作原理。

+0

謝謝 - 這使得它更容易理解。記憶是否以相同的方式工作? –

+0

@MoritzPetersen不完全一樣,一般來說,存儲器具有用於將數據寫入位單元的地址的輸入端口,用於讀取和寫入的輸出以及用於讀取和寫入的時鐘,存儲器的類型很多,每種存儲器都以不同的方式存儲存儲器單元,您可以查找*內存數組*或查看本教程的[幻燈片](https://docs.google.com/viewer?a=v&pid=sites&srcid=ZGVmYXVsdGRvbWFpbnxkcmFib3VlbG1hYXR5fGd4OjFiMWI5MGYyNDBkZjE3N2M)中的內存數組部分,這對我幫助很大。 – 2013-11-03 17:10:29

4

只是要清楚:寄存器做沒有駐留在內存中,並沒有一個地址。

是的,AXEAX寄存器的低16位。 AHAL是來自AX的較高和較低的8位。這是所有具有不同名稱的單個寄存器,用於訪問它的不同方式。這是用於x86:

x86 registers

圖片從:http://www.c-jump.com/CIS77/CPU/x86/lecture.html#X77_0070_gp_registers

+0

謝謝你的好解釋和圖像。你能告訴它適用於x86_64 RAX(etc ..)寄存器嗎? –

+1

@MoritzPetersen是的,它也適用於64位寄存器以及 – jalf

0

除了通用寄存器部件之間的重疊時,mm寄存器別名x87堆棧,和xmm寄存器重疊ymm寄存器(其中適用)。