1. 程式人生 > >彙編基礎---暫存器的完整解釋

彙編基礎---暫存器的完整解釋

1、16位暫存器組
  
資料暫存器、變址暫存器統稱為通用暫存器。 
   
    在AX中,"x"表示的意思是mix,“混合”的意思。對AX指的是AH和AL兩個混合的總稱。  
   在EAX中,”E”表示的意思是Extended,“擴充套件”的意思。
   4個16位暫存器又可分割成8個獨立的8位暫存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每個暫存器都有自己的名稱,可獨立存取  

    8086的暫存器為16位,有14個,可分為三部分: 
    (1)8個通用暫存器:  
       資料暫存器   
           AX—Accumulator Register,累加暫存器。算術運算的主要暫存器。   
           BX—Base Register,基址暫存器   
            CX—Count Register,計數暫存器,串操作、迴圈控制的計數器   
           DX—Data Register,資料暫存器  

      地址指標暫存器   
           SI—Source Index Register,源變址暫存器   
           DI—Destination Index Register,目的變址暫存器   
           SP—Stack Pointer Register,堆疊暫存器   
           BP—Base Pointer Register,基址指標暫存器 

    (2)4個段暫存器:  
 
           CS—Code Segment Register,程式碼段暫存器   
           DS—Data Segment Register,資料段暫存器   
           ES—Extra Segment Register,附加段暫存器   
           SS—Stack Segment Register,堆疊段暫存器 


    (3)2個控制暫存器:   
           IP—Instruction Pointer,指令指標,即PC(Program counter),程式計數器   
           PSW—Processor State Word,微處理器狀態字  

       其中PSW包括有9個標誌位:   
        CF—Carry Flag,進位標誌   
        PF—Parity Flag,奇偶標誌   
        AF—Auxiliary Carry Flag,輔助進位標誌
        ZF—Zero Flag,零標誌
        SF—Sign Flag,符號標誌
        TF—Trap Flag,陷阱標誌
        IF—Interrupt Enable Flag,中斷允許標誌
        DF—Direction Flag,方向標誌
        OF—Overflow Flag,溢位標誌


2、32位暫存器組

  
 32位CPU的暫存器是32位的,並且32位的暫存器組增加了一些新的暫存器。對32位的通用暫存器EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP的低16位資料進行存取不影響高16位,所以,這些通用暫存器的低16位依舊用16位的AX、BX、CX、DX、SI、DI、SP、BP暫存器來表示。
 
32位的EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP與8086中的16位的AX、BX、CX、DX、SI、DI、SP、BP功能相似。
  
32位CPU所含有的暫存器有:
  (1)8個通用暫存器:
      
資料暫存器
          
          EAX—Extended Accumulator Register,擴充套件的累加暫存器
          EBX—Extended Base Segment Register,擴充套件的基址暫存器
          ECX—Extended Count Segment Register,擴充套件的計數暫存器 
          EDX—Extended Data Segment Register,擴充套件的資料暫存器
   
 地址指標暫存器   
          ESI—Extended Source Index Register,擴充套件的源變址暫存器   
          EDI—Extended Destination Index Register,擴充套件的目的變址暫存器   
          ESP—Extended Stack Pointer Register,擴充套件的堆疊暫存器   
          EBP—Extended Base Pointer Register,擴充套件的基址指標暫存器 
    
    (2)6個段暫存器:
  
          CS—Code Segment Register,程式碼段暫存器   
          DS—Data Segment Register,資料段暫存器   
          ES—Extra Segment Register,附加段暫存器   
          SS—Stack Segment Register,堆疊段暫存器   
          FS—Flag Segment Register,標誌段暫存器 
          FS暫存器指向當前活動執行緒的TEB結構(執行緒結構)。FS:[0]的地址指向的是TEB結構,這個結構的開頭是一個NT_TIB結構,NT_TIB結構的0x18偏移處是一個Self指標,指向這個結構自身,也就是指向TEB結構的開頭。
        GS—Global Segment Register,全域性段暫存器  


    (3)2個控制暫存器:   
          EIP—Extended Instruction Pointer,擴充套件的指令指標,即PC(Program counter),程式計數器。   
          PSW—Processor State Word,微處理器狀態字  

      其中PSW包括有9+4個標誌位:         
          CF—Carry Flag,進位標誌   
          PF—Parity Flag,奇偶標誌   
          AF—Auxiliary Carry Flag,輔助進位標誌   
          ZF—Zero Flag,零標誌   
          SF—Sign Flag,符號標誌   
          TF—Trap Flag,陷阱標誌   
          IF—Interrupt Enable Flag,中斷允許標誌   
          DF—Direction Flag,方向標誌   
          OF—Overflow Flag,溢位標誌   
          IOPL—I/O Privilege Level,I/O特權標誌   
          NT—Nested Task,巢狀任務標誌   
          RF—Restart Flag,重啟動標誌 
          VM—Virtual 8086 Mode,虛擬8086方式標誌  


3、註釋 
     (1)、資料暫存器  

         資料暫存器可分為8位的暫存器,作為通用暫存器,可儲存算術邏輯運算的運算元和運算結果。  

                AX,Accumulator,通累加器,用累加器進行的操作可能需要更少時間。可用於乘、 除、輸入/輸出等操作,使用頻率很高;            
                BX,Base,基址暫存器,雖然屬於資料暫存器,但它經常用作地址暫存器。       
                CX,Count,計數暫存器,經常用作一個迴圈的計數,在迴圈語句中,預設CX的內容為迴圈次數。在位操作中,當移多位時,要用CX的低8位CL來指明移位的位數。 
                DX,Data,資料暫存器,在進行乘、除運算時,它可作為預設的運算元參與運算,但在I/O指令中,DX用於表示I/O的埠地址。  
       在16位CPU中,AX、BX、CX和DX不能作為基址和變址暫存器來存放儲存單元的地址,    
       在32位CPU中,其32位暫存器EAX、EBX、ECX和EDX不僅可傳送資料、暫存資料儲存算術邏輯運算結果,而且也可作為指標暫存器,所以,這些32位暫存器更具有通用性。  
    (2)、地址指標暫存器  
         地址指標暫存器不可分割成8位暫存器。作為通用暫存器,也可儲存算術邏輯運算的運算元和運算結果。  
             SI,Source,源地址暫存器,在字串操作指令中,提供源運算元的段內偏移地址,在其他指令中,可用作地址暫存器。 
             DI,Destination,目標地址暫存器,在字串操作指令中,提供目的運算元的段內偏移地址,在其他指令中,可用作地址暫存器。 
             BP,Base,基址指標暫存器,可以指定段內偏移地址,將BP用作地址暫存器時,其預設的段地址為SS。 
             SP,Stack,堆疊指標暫存器,用於儲存堆疊段的段內偏移地址,段地址由SS提供。  

    (3)、段暫存器  
         段暫存器是根據記憶體分段的管理模式而設定的。記憶體單元的實體地址由段暫存器的值和一個偏移量組合而成的,這樣可用兩個較少位數的值組合成一個可訪問較大物理空間的記憶體地址。  
         
CPU內部的段暫存器:         
             CS,Code,程式碼段暫存器,用於存放當前執行程式的段地址,IP為指令指標。 
             DS,Data,資料段暫存器,用於存放當前資料段的段地址。  
             ES,Extra,附加段暫存器,用於存放當前附加資料段的段地址  
             SS,Stack,堆疊段暫存器,用於存放當前堆疊段的段地址。       
       FS,Flag,標誌段暫存器,FS暫存器指向當前活動執行緒的TEB結構(執行緒結構)。FS:[0]的地址指向的是TEB結構,這個結構的開頭是一個NT_TIB結構,NT_TIB結構的0x18偏移處是一個Self指標,指向這個結構自身,也就是指向TEB結構的開頭。  
             GS,Global,全域性段暫存器。  
          
 32位CPU有兩個不同的工作方式:實方式和保護方式。在每種方式下,段暫存器的作用是不同的。有關規定簡單描述如下:  
            實方式: 前4個段暫存器CS、DS、ES和SS與先前CPU中的所對應的段暫存器的含義完全一致,記憶體單元的邏輯  
             地址仍為“段值:偏移量”的形式。為訪問某記憶體段內的資料,必須使用該段暫存器和儲存單元的偏移量。  
              保護方式: 在此方式下,情況要複雜得多,裝入段暫存器的不再是段值,而是稱為“選擇子”(Selector)的某個值。
  
(4)、控制暫存器  

32位CPU把指令指標擴充套件到32位,並記作EIP,EIP的低16位與先前CPU中的IP作用相同。   
             IP,Instruction,指令指標暫存器,用於儲存下一條即將要執行的指令的段內偏移地址。一般要通過轉移指令、子程式呼叫、返回指令等才能改變IP的值。   
             PSW,Processor State Word,微處理器狀態字,其中DF、IF、TF標誌用於控制CPU操作,其他ZF、SF、AF、PF、CF、OF反映ALU前一次操作的結果狀態。  
             
反映ALU前一次操作的結果狀態的標誌位:   
             CF,Carry,進位標誌,加減運算時,最高位有進(借)位時,CF=1  
             PF,Parity,奇偶標誌,操作結果的低8位中含有“1”的個數為偶數個時,PF=1  
             AF,Auxiliary Carry,輔助進位標誌,加減運算時,D3位有進(借)位時,AF=1  
             ZF,Zero,零標誌,運算結果為0時,ZF=1  
             SF,Sign,符號標誌,操作結果的符號,結果為負,SF=1  
             OF,Overflow,溢位標誌,有符號數運算時是否溢位的標誌,溢位,則OF=1
    
控制CPU的標誌位:   
             DF,Direction,方向標誌,字串操作中,DF=0時,地址暫存器(SI,DI)的內容遞增;DF=1時,(SI,DI)的內容遞減。 
             IF,Interrupt Enable,中斷允許標誌,IF=1時,CPU能夠響應可遮蔽中斷請求;IF=0時,則CPU不能響應中斷請求。  
             TF,Trap,陷阱標誌,TF=1時,則CPU處於單步執行方式,即每執行一條指令就自動執行一次型別1的內部中斷,這主要用於Debug中。
     
32位標誌暫存器增加的標誌位:            
             IOPL,I/O Privilege Level,I/O特權標誌,I/O特權標誌用兩位二進位制位來表示,也稱為I/O特權級欄位。該欄位指定了要求執行I/O指令的特權級。 
如果當前的特權級別在數值上小於等於IOPL的值,那麼,該I/O指令可執行,否則將發生一個保護異常。              
             NT,Nested Task,巢狀任務標誌,巢狀任務標誌NT用來控制中斷返回指令IRET的執行。NT=0,用堆疊中儲存的值恢復EFLAGS、CS和EIP,執行常規的中斷返回操作;NT=1,通過任務轉換實現中斷返回。           
             RF,Restart Flag,重啟動標誌,重啟動標誌RF用來控制是否接受除錯故障。RF=0時,表示“接受”除錯故障,否則拒絕之。 
在成功執行完一條指令後,處理機把RF置為0,當接受到一個非除錯故障時,處理機就把它置為1。           
VM,Virtual 8086 Mode,虛擬8086方式標誌,VM=1,表示處理機處於虛擬的8086方式下的工作狀態,否則,處理機處於一般保護方式下的工作狀態。