彙編筆記---寄存器(CPU工作原理)

前言:

從CPU如何執行指令的角度來講解8086CPU的邏輯結構,形成物理地址的方法,相關的寄存器以及一些指令

寄存器運用

8086CPU有14個寄存器 它們的名稱爲: AX、BX、CX、DX、SI、DI、SP、BP、 IP、CS、SS、DS、ES、PSW
(1)加法與減法:AX、BX、CX、DX、BP、SI、DI、SP——通用寄存器
(2)乘法與除法:DX、AX(字操作),AX、AL(字節操作)
(3)循環計數:CX
(4)保持段地址:CS,DS,SS,ES
(5)將要取出的指令的偏移地址:IP
(6)壓入或彈出堆棧的數據的偏移地址:SP
(7)輸入或輸出堆棧的數據的偏移地址:BP
(8)可以指示存儲器的地址偏移量:BX、BP、SI、DI
(9)作爲間接I/O口的地址:DX
(10)數據串指令的操作:CX,SI,DI、ES
(11)存放查錶轉換指令的首偏移地址:BX
(12)表示運算特徵與控制標誌:FLAGS
(13)循環指令的操作:CL

字在寄存器器中如何存儲

8086CPU可以一次性處理兩種尺寸的數據:

  • 字節:byte:一個字節由8個bit組成,可以存在8位寄存器中
  • 字:word:一個字由兩個字節組成,這兩個字節分爲高字節和低字節
    在這裏插入圖片描述
    一個字可以存在一個16位寄存器中,這個字的高位字節和低位字節自然就存在這個寄存器的高8位寄存器和低8位寄存器中

16位結構的CPU

1、運算器一次最多可以處理16位的數據
2、寄存器的最大寬度爲16位
3、寄存器和運算器之間的通路是16位的

8086CPU給出物理地址的方法

物理地址是:CPU訪問內存單元時要給出內存單元的地址。所有的內存單元構成的存儲空間是一個一維的線性空間。每一個內存單元在這個空間中都有唯一的地址,這個唯一的地址稱爲物理地址。
8086有20位地址總線,可傳送20位地址,尋址能力爲1M。
8086內部爲16位結構,它只能傳送16位的地址,表現出的尋址能力卻只有64K。
8086CPU採用一種在內部用兩個16位地址合成的方法來形成一個20位的物理地址。
8086CPU相關部件邏輯結構

  1. CPU提供兩個16位的地址,一個爲段基址,另一個爲偏移地址
  2. 段基址和偏移地址通過內部總線送入一個稱爲地址加法器的部件中
  3. 地址加法器將兩個16位地址合成爲一個20位的物理地址
  4. 地址加法器通過內部總線將20位物理地址送入輸入輸出控制總線
  5. 輸入輸出控制電路將20位物理地址送上地址東線
  6. 20位物理地址被地址總線傳輸到存儲器

物理地址=段基址×16+偏移地址=基礎地址+偏移地址

段寄存器

段的理解:

(1)段地址×16 必然是 16的倍數,所以一個段的起始地址也一定是16的倍數;
(2)偏移地址爲16位,16 位地址的尋址能力爲 64K,所以一個段的長度最大爲64K。

CPU訪問內存單元時,必須向內存提供內存單元的物理地址。
8086CPU在內部用段地址和偏移地址移位相加的方法形成最終的物理地址

段寄存器是因爲對內存的分段管理而設置的。計算機需要對內存分段,以分配給不同的程序使用(類似於硬盤分頁)。在描述內存分段時,需要有如下段的信息:1.段的大小;2.段的起始地址;3.段的管理屬性(禁止寫入/禁止執行/系統專用等)。需要用8個字節(64位)存儲這些信息,但段寄存器只有16位,因此段寄存器中只能存儲段號(segment selector,也譯作“段選擇符”),再由段號映射到存在內存中的GDT(global (segment) descriptor table,全局段號記錄表),讀取段的信息

在8086中設置4個16位的段寄存器,用於管理4種段:CS是代碼段,DS是數據段,SS是堆棧段,ES是附加段

代碼段寄存器CS(Code Segment)
存放當前正在運行的程序代碼所在段的段基址,表示當前使用的指令代碼可以從該段寄存器指定的存儲器段中取得,相應的偏移量則由IP提供。
數據段寄存器DS(Data Segment)
指出當前程序使用的數據所存放段的最低地址,即存放數據段的段基址。
堆棧段寄存器SS(Stack Segment)
指出當前堆棧的底部地址,即存放堆棧段的段基址。
附加段寄存器ES(Extra Segment)
指出當前程序使用附加數據段的段基址,該段是串操作指令中目的串所在的段。

段寄存器CS指向存放程序的內存段,IP是用來存放下條待執行的指令在該段的偏移量,把它們合在一起可在該內存段內取到下次要執行的指令。
段寄存器SS指向用於堆棧的內存段,SP是用來指向該堆棧的棧頂,把它們合在一起可訪問棧頂單元。另外,當偏移量用到了指針寄存器BP,則其缺省的段寄存器也是SS,並且用BP可訪問整個堆棧,不僅僅是隻訪問棧頂。
段寄存器DS指向數據段,ES指向附加段,在存取操作數時,二者之一和一個偏移量合併就可得到存儲單元的物理地址。該偏移量可以是具體數值、符號地址和指針寄存器的值等之一,具體情況將由指令的尋址方式來決定。
通常,缺省的數據段寄存器是DS,只有一個例外,即:在進行串操作時,其目的地址的段寄存器規定爲ES。當然,在一般指令中,我們還可以通過改變前綴中的“段取代”字段來改變操作數的段寄存器。

CS和IP

CS和IP是8086CPU中最關鍵的寄存器, CS爲代碼段寄存器;IP爲指令指針寄存器
CPU將CS:IP指向的內容當作指令執行
在這裏插入圖片描述

在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
(1)從CS:IP指向內存單元讀取指令,讀取的指令進入指令緩衝器;
(2)IP = IP + 所讀取指令的長度,從而指向下一條指令;
(3)執行指令。 轉到步驟 (1),重複這個過程。

修改CS、IP的指令

jmp 段地址:偏移地址 功能:用指令中給出的段地址修改CS,偏移地址修改IP
jmp 某一合法寄存器 功能:用寄存器中的值修改IP
Debug的R指令,可以查看和改變寄存器的內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章