匯編語言 第二章 寄存器


CPU結構:

一典型的CPU主要有寄存器、運算器、控制器等器件構成,它們通過內部總線相連,進行數據傳輸。第一章中的總線相應為(CPU的)外部總線。

  • 寄存器進行信息存儲;
  • 運算器進行信息處理;
  • 控制器控制各種器件進行工作。

8086是16位結構的CPU,這說明:

  • 寄存器的最大寬度為16位;
  • 運算器一次最多可以處理16位的數據;
  • 運算器和寄存器之間的通路為16位。

也就是說,16位結構CPU意味着,在8086CPU內部,能夠一次性處理、傳輸、暫時存儲的信息的最大長度為16位。

 通用寄存器:

用於存放一般性的數據的寄存器,稱為通用寄存器。8086CPU所有的寄存器都是16位的,可以存放兩個字節,一個字。包含AX、BX、CX、DX,四個通用寄存器。

一個16位寄存器可以分為兩個8位寄存器,AX可以分為AH(8-15)和AL(0-7)。

需要注意以下兩點:

  • 單純賦值給AL時,如果產生溢出,並不會向AH進位,而是進位直接消失。
  • 8086采用的是小端法,一個完整的存儲地址中,低位在小地址,高位在大地址。(兩位為一個相對整體)

幾條匯編指令:

首先匯編指令和寄存器名稱均不區分大小寫,mov 和 MOV,AX和ax 均等價

  • mov   ax,bx     AX=BX
  • add    ax,bx     AX=AX+BX
  • sub    ax,bx     AX=AX-BX

寫匯編指令時,要注意指令的兩個操作對象位數必須一致

比如,mov   ax,bx     mov   al,bh     mov   ah,bh     mov   al,9H都是正確的

而,   mov   ax,bl      mov    bh,ax   mov   al,100H都是錯誤的

8086CPU給出物理地址的方法:

我們在第一章中知道,地址總線的寬度為20位,但是8086CPU內部一次只能傳送16位的數據,那么CPU內外如何交互地址呢?

8086CPU在內部用兩個16位地址合成,經過地址加法器產生一個20位的地址,再通過地址總線與存儲單元進行交互。

這兩個16位地址分別為段地址(SA)和偏移地址(EA),物理地址 = 段地址 * 16  +  偏移地址    其中,段地址*16 也稱為基礎地址

或許有一個不太恰當的比喻。在書店,書被分成許多類,有文學類、工學類、理學類、農學類等等,每一個大類之中有許多本書,每一本書有自己獨特的編號。

那么這個段地址 *16之后便代表某一類某一類書籍,然后再根據偏移地址,找到具體的哪一本書。

使用段地址 * 16可以確定一個起始地址,很顯然這個起始地址一定是16的倍數,用十六進制表示就是最后一位一定是0。當段地址固定時,16位的偏移地址的尋址能力為64KB,所以一個段的最大長度為64KB。

對於同一個地址,可以使用不同的段地址和偏移地址來描述。例如:

  • 21F60H  =     2000H     1F60H
  • 21F60H  =     2100H     0F60H

21F60H內存單元的一種表示為  2000:1F60 (段地址:偏移地址)  

段寄存器:

存儲段地址的寄存器稱為段寄存器,8086CPU包括4個段寄存器,CS、DS、SS、ES

CS和IP:

CS(Code Segment)代碼段寄存器,IP(Instruct Pointer)指令指針寄存器,CS存儲代碼段地址,IP存儲偏移地址。任意時刻,CPU將CS:IP指向的內容當作指令執行。

指令實現過程:

  1. 從CS:IP指向的內存單元讀取指令,讀取的指令進入指令緩沖器
  2. IP=IP+所讀取指令的長度,從而指向下一條指令
  3. 執行指令,跳轉到1,重復這個過程

8086CPU不允許像通用寄存器一樣直接修改段寄存器的值,有兩種方法可以修改CS:IP的指令

第一種jmp轉移指令:

  1. 同時修改CS和IP,例如jmp 2AE3:3,執行后:CS = 2AE3H,IP=0003H     jmp 段地址:偏移地址  ==  mov  CS  段地址;mov IP 偏移地址;          
  2. 僅修改IP, 執行前ax=1000H,jmp ax,執行后:IP=1000H      jmp ax(合法寄存器)  == mov  IP ax

第二章debug修改指令:

詳見Debug專題

 

 

          

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM