寄存器(CPU工作原理)


1.通用寄存器

8086CPU所有一共有14個寄存器分別是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW,所有的寄存器都是16位的,可以存放兩個字節(一個字)。

AX、BX、CX、DX通常用來存放一般性數據被稱為通用寄存器。

AX通用寄存器存儲二進制方式為:

 

為了保證兼容性,這四個寄存器都可以分為兩個獨立的8位寄存器使用。

1)AX可以分為AH和AL,分別是高8位和低8位

2)BX可以分為BH和BL

3)CX可以分為CH和CL

4)DX可以分為DH和DL

 

那如何向下兼容8位寄存器呢?就是將AH全部填0,只用AL部分。

AX的低8位(0~7位)構成了AL寄存器,高8位(8~15位)構成了AH寄存器。

AH和AL寄存器是可以獨立使用的8位寄存器。如何不能獨立使用那么就不能兼容。

 

2.幾條簡單的匯編指令

匯編指令不分大小寫

下面是幾條簡單的匯編指令:

這里需要注意的是,匯編的指令需要從后往前看,例如mov ax,18正確的順序是將18送入ax中。

 兩道例題:

(1)

mov ax,8226H

mov bx,8226H

add ax,bx

結果ax中存放的數是044CH

因為即使8226H+8226H=1044CH但是ax為16位寄存器,只能存放044CH,多出的1這里不做講解。以后的博客中會說。

(2)

mov al,00C5H

add al,93H

那么結果al中存放的數據不是0158H而是0058H,因為這里用的是al寄存器,ax的低8位寄存器,所以高8位為0,至於多出的那個1這里先不做講解。以后的博客中會說。

 

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

將16位的段地址和16位的偏移地址通過地址加法器給出20位的物理地址。

 

3.地址加法器合成物理地址的方法

物理地址=段地址*16=偏移地址

 

 段地址*16就是向左移一位,如果是二進制數則就是向左移四位

雖然“段地址”這個名詞中包含了“段”這個字,但是並不是說將內存分為一個個的段。

兩點需要注意:

(1)段地址*16必然是16的倍數,所以一個段的起始地址也一定是16的倍數;

(2)偏移地址為16位,16位地址的尋址能力為64KB,所以一個段的長度最大為64KB。

 

從這個圖中可以得出結論:CPU可以通過不同的段地址和偏移地址形成同一個物理地址。

 

4.段寄存器

段寄存器顧名思義就是提供段地址的寄存器,8086CPU有4個段寄存器,分別是CS、DS、SS、ES。

CS和IP是8086CPU中最關鍵的寄存器,它們指示了CPU當前要讀取指令的地址。

CS為代碼段寄存器,IP為指令指針寄存器(偏移地址寄存器)

當8086CPU啟動時或者復位時,CS=FFFFH,IP=0000H

傳送指令mov不能修改CS和IP寄存器里的值,但是8086CPU提供的一個轉移指令jmp指令來修改CS與IP寄存器的值。

 

5.DEBUG中常用指令

R命令查看、改變CPU寄存器的內容;

D命令查看內存中的內容;

E命令改寫內存中的內容;

U命令將內存中的機器指令翻譯成匯編指令;

T命令執行一條機器指令;

A命令以匯編指令的格式在內存中寫入一條機器指令;

 


免責聲明!

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



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