2011-08-31 100 views
3

我有幾個關於我正在學習的組件的問題,我很困惑。x86寄存器名稱,尋址模式,位移和存儲器

  1. 是什麼bxbpsssp之間的區別?該書說bx是基址寄存器,bp是基址指針。這是否意味着它們是同一件事?
  2. mov ax, bx,mov ax, [bx],mov ax, bpmov ax, [bp]有什麼區別?
  3. disp在索引尋址模式下的含義是什麼?例如mov al, disp[bx]?或mov al, disp[si]?這本書沒有解釋disp的含義。
  4. 寄存器在CPU中不是RAM嗎?

    請原諒我的英語,這不是我的第一個語言。

+4

請問每個問題只有一個問題;一旦人們開始回答您的一些問題,很難判斷您的問題是否已經得到解答。如果你有多件事要問,可隨時同時打開多個問題;請讓他們分開。 – bdonlan

回答

8

哦,我的這些16位寄存器在1984年變得幾乎沒有了。對不起,你有一本舊書。儘管如此,現代處理器仍然使用這些東西,所以你的問題是有道理的我實際上在當天寫了一些16位程序集,奇怪的是我記得它。讓人驚訝。

  1. BX,BP,SS和SP只是四個獨立的寄存器。 BX,BP和SP是通用寄存器(其他16位GPR是AX,CX,DX,SI和DI),SS是一個段寄存器,您不會經常使用它(這是隱式使用時你參考BP和SP)。完全回答這些寄存器到底是什麼會佔用比通常的答案應該多得多的空間。但要回答您的具體問題BX和BP是兩個不同的寄存器,不是同一個寄存器。 BP通常用於索引堆棧幀,而BX通常用於索引結構或數組。

  2. MOV AX, BX將BX的內容移動到AX中,而MOV AX, [BX]將其值爲DS:BX的存儲位置的內容移動到AX。也就是說,如果BX包含值500,則第一條指令將500移入AX,而第二條指令將地址500的內容(技術上講,超過DS的起始處500字節)移動到AX。 (請注意,在這種MOV指令的解釋方式中,MASM和NASM等不同彙編語言中有一些細微的差別。)

  3. DISP只是「位移」的縮寫,一個數字加到註冊以計算類似於堆棧幀中的變量的地址或結構中的元素的東西。在像MOV AX, [BX+25]這樣的說明中,25是位移。

  4. 是的,寄存器是CPU的一部分。

+0

非常感謝你!是否有文章可以閱讀以澄清'bx'和'bp'之間的區別?再次謝謝你 ! ^^ 4更多代表直到upvote:P –

+0

可能有你需要的文章:http://en.wikipedia.org/wiki/X86#16-bit,http://en.wikibooks.org/wiki/X86_Assembly/ 16_32_and_64_Bits#The_8086_Registers,http://en.wikibooks.org/wiki/X86_Assembly/X86_Architecture#General-Purpose_Registers_.28GPR.29 –

2

4:在x86架構中,寄存器是確實在CPU中,不在RAM中。好吧,我不知道任何寄存器不在CPU中出現的1970年以後的體系結構,但我知道寄存器與RAM相同的地址空間的體系結構(例如8051) - 或者至少是寄存器是一個子地址空間:訪問RAM的指令可以很容易地訪問寄存器,使用完全相同的指令代碼,以及訪問是片外RAM還是片內寄存器,僅取決於地址用過的。但在x86中,寄存器的實時值完全不能通過內存參考指令訪問。 (除非你首先明確或暗示地將它們保存到內存中,但我們並不是在這裏談論這個。)