CPU的組成 CPU是由運算器(信息處理)、控制器(控制器件工作)、寄存器(信息存儲)等器件組成,他們之間通過匯流排相連。 通用寄存器 通用寄存器時用於存放一般性數據的,以8086 CPU為例,8086 CPU所有的寄存器都是16位的,8086 CPU中的通用寄存器有AX、BX、CX、DX。為了相容上 ...
CPU的組成
CPU是由運算器(信息處理)、控制器(控制器件工作)、寄存器(信息存儲)等器件組成,他們之間通過匯流排相連。
通用寄存器
通用寄存器時用於存放一般性數據的,以8086 CPU為例,8086 CPU所有的寄存器都是16位的,8086 CPU中的通用寄存器有AX、BX、CX、DX。為了相容上一代CPU中的8位寄存器,這4個寄存器都可以拆成兩個8位的寄存器使用,也就是將16位分成兩個8位,AX可分為AH和AL,BX可分為BH和BL,CX可分為CH和CL,DX可分為DH和DL。這裡的H可以記為High,高位,L可以記為Low,低位。
再來說一下數據寬度,因為寄存器有16位和8位兩種,所以數據寬度可以分為位元組和字,一個位元組由8個bit組成,可以直接使用低位存儲,一個字由兩個位元組,也就是16位,比如一個十六進位3E10,將這個十六進位存放到AX寄存器總,3E就存放在高位AH中,10存放在低位AL中。
記憶體單元的物理地址
之前說過數據是通過地址線存放在記憶體單元中的,那麼就必須要確定這個記憶體單元的地址。
基礎地址=段地址x16
基礎地址+偏移地址=物理地址
所以物理地址=段地址x16+偏移地址,這裡的16是十進位的16,也就是十六進位的A。
這裡的段地址可以理解為一段一段的記憶體存儲單元,但是段地址並不是固定的,可以認為10000H-100FFH是一個段,也可以將這段地址看成是10000H-1007F和10080H-100FFH組成的段,以10000H-100FFH為例,它的段地址是1000H,偏移地址為FF,這樣基礎地址就是1000Hx10H=10000H,這樣就可以確定基礎地址。再加上偏移地址,就可以確定這段記憶體。
段寄存器
既然可以通過段地址和偏移地址確定物理地址,那麼就需要寄存器來存放段地址,8086 CPU中有4個段地址:CS、DS、SS、ES,偏移地址存放在IP寄存器中,這裡以CS寄存器為例,可以簡單的理解為通過CS(代碼段寄存器)、IP(指令指針寄存器)兩個寄存器可以確定CPU需要讀取的指令的地址,也就是CPU會將CS:IP指向的內容當作指令執行。
操作指令
mov指令
mov指令稱為傳送指令,可以使用這個指令為寄存器賦值,例:mov ax,123
這個語句就類似於C語言中的賦值操作ax=123;
jmp指令
jmp指令叫做轉移指令,可以用於設置CS、IP中的值(mov指令不能修改CS、IP中的值),例:jmp 2AE3:3
,執行這個指令後,CS的值被修改為2AE3H,IP的值被修改為0003H,CPU將從2AE33H處讀取指令。
8086CPU工作過程
(1)從CS:IP指向的記憶體單元讀取指令,讀取的指令進入指令緩衝器
(2)IP指向下一條指令
(3)執行讀取進指令緩衝器的指令
(4)重覆上述三個步驟