《匯編語言》第2章寄存器(CPU工作原理)_第1頁
《匯編語言》第2章寄存器(CPU工作原理)_第2頁
《匯編語言》第2章寄存器(CPU工作原理)_第3頁
《匯編語言》第2章寄存器(CPU工作原理)_第4頁
《匯編語言》第2章寄存器(CPU工作原理)_第5頁
已閱讀5頁,還剩56頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、匯編語言第2章寄存器(CPU工作原理)匯編語言(王爽)第2章-寄存器(CPU工作原理)第2章 寄存器(CPU工作原理)n2.1 通用寄存器n2.2 字在寄存器中的存儲n2.3 幾條匯編指令n2.4 物理地址n2.5 16位結構的CPUn2.6 8086CPU給出物理地址的方法n2.7 “16+偏移地址 =物理地址”的本質含義n2.10 CSn2.12 代碼段CPU概述n一個典型的CPU由運算器、控制器、寄存器等器件組成,這些器件靠內部總線相連。n內部總線實現CPU內部各個器件之間的聯系。n外部總線實現CPU和主板上其它器件的聯系。寄存器概述n8086CPU有14個寄存器 它們的名稱為: AX、

2、BX、CX、DX、SI、DI、SP、BP、 IP、CS、SS、DS、ES、PSW。n這些寄存器以后會陸續介紹2.1 通用寄存器n8086CPU所有的寄存器都是16位的,可以存放兩個字節。nAX、BX、CX、DX 通常用來存放一般性數據被稱為通用寄存器。n下面以AX為例,我們看一下寄存器的邏輯結構。n一個16位寄存器可以存儲一個16位的數據。(數據的存放情況)n一個16位寄存器所能存儲的數據的最大值為多少? 答案:216-1。2.1 通用寄存器16位數據在寄存器中的存放情況n數據:18n二進制表示:10010n在寄存器AX中的存儲:16位數據在寄存器中的存放情況n數據:202X0n二進制表示:n

3、在寄存器AX中的存儲:2.1 通用寄存器n8086上一代CPU中的寄存器都是8位的;n為保證兼容性,這四個寄存器都可以分為兩個獨立的8位寄存器使用。nAX可以分為AH和AL;nBX可以分為BH和BL;nCX可以分為CH和CL;nDX可以分為DH和DL。n8086CPU的8位寄存器存儲邏輯2.1 通用寄存器n以AX為例,8086CPU的16位寄存器分為兩個8位寄存器的情況:2.1 通用寄存器nAX的低8位(0位7位)構成了AL寄存器,高8位(8位15位)構成了AH寄存器。nAH和AL寄存器是可以獨立使用的8位寄存器。n8086CPU的8位寄存器數據存儲情況n一個8位寄存器所能存儲的數據的最大值是

4、多少? 答案:28-1。2.1 通用寄存器2.2 字在寄存器中的存儲n一個字可以存在一個16位寄存器中,這個字的高位字節和低位字節自然就存在這個寄存器的高8位寄存器和低8位寄存器中。關于數制的討論n由于一個內存單元可以存放 8位數據,CPU中的寄存器又可存放 n 個 8位數據。也就是說,計算機中的數據大多 是由1N個8位數據構成的。n用十六進制來表示數據可以直觀的看 出這個數據是由哪些8位數據構成的。n示例2.3 幾條匯編指令匯編指令不區分大小寫2.3 幾條匯編指令nCPU執行下表中的程序段的每條指令后,對寄存器中的數據進行的改變。2.3 幾條匯編指令2.3 幾條匯編指令n這里的丟失,指的是進

5、位制不能在 8 位寄存器中保存,但是 CPU 不是并真的不丟棄 這個進位值,這個問題會在后面的課程中討論。特別提示n檢測點(Page 18)n沒有通過檢測點請不要向下學習!2.4 物理地址nCPU訪問內存單元時要給出內存單元的地址。所有的內存單元構成的存儲空間是一個一維的線性空間。每一個內存單元在這個空間中都有唯一的地址,這個唯一的地址稱為物理地址。2.5 16位結構的CPUn概括的講,16位結構描述了一個CPU具有以下幾個方面特征:n1、運算器一次最多可以處理16位的數據。n2、寄存器的最大寬度為16位。n3、寄存器和運算器之間的通路是16位的。2.6 8086CPU給出物理地址的方法n80

6、86有20位地址總線,可傳送20位地址,尋址能力為1M。n8086內部為16位結構,它只能傳送16位的地址,表現出的尋址能力卻只有64K。2.6 8086CPU給出物理地址的方法n8086CPU采用一種在內部用兩個16位地址合成的方法來形成一個20位的物理地址。n8086CPU相關部件的邏輯結構在8086CPU內部用兩個16位地址合成的方法來形成一個20位的物理地址地址加法器n地址加法器合成物理地址的方法: 物理地址=段地址16+偏移地址n例如: 8086CPU訪問地址為123C8H的內存單元 由段地址16引發的討論n觀察移位次數和各種形式數據的關系:n(1)一個數據的二進制形式左移1位,相當

7、于該數據乘以2;n(2)一個數據的二進制形式左移N位,相當于該數據乘以2的N次方;n(3)地址加法器如何完成段地址16的運算? 以二進制形式存放的段地址左移4位。由段地址16引發的討論2.7 “段地址16+偏移地址=物理地址”的本質含義n兩個比喻說明:n說明“基礎地址+偏移地址 = 物理地址” 的思想:第一個比喻n說明“段地址16+偏移地址=物理地址”的思想:第二個比喻 8086CPU就是這樣一個只能提供兩張3位數據紙條的CPU。“基礎地址+偏移地址 = 物理地址”n比如說,學校、體育館同在一條筆直的單行路上(學校位于路的起點0米處)。n讀者在學校,要去圖書館,問我那里的地址,我可以用幾種方式

8、描述這個地址?“基礎地址+偏移地址 = 物理地址”n(1)從學校走2826m到圖書館。這2826可以認為是圖書館的物理地址。n(2)從學校走202Xm到體育館,從體育館再走826m到圖書館。n第一個距離202Xm是相對于起點的基礎地址;n第二個距離826m是將對于基礎地址的偏移地址。“段地址16+偏移地址=物理地址”n比如我們只能通過紙條來通信,讀者問我圖書館的地址,我只能將它寫在紙上告訴讀者。n顯然我必須有一張可以容納 4 位數據的紙條才能寫下2826這個數據:“段地址16+偏移地址=物理地址”n不巧的是,沒有能容納4位數據的紙條,僅有兩張可以容納3位數據的紙條。n這樣我只能以這種方式告訴讀

9、者2826這個數據:2.8 段的概念n錯誤認識:n內存被劃分成了一個一個的段,每一個段有一個段地址。n其實:n內存并沒有分段,段的劃分來自于CPU,由于8086CPU用“(段地址16)+偏移地址=物理地址”的方式給出內存單元的物理地址,使得我們可以用分段的方式來管理內存。2.8 段的概念n我們可以認為:地址10000H100FFH的內存單元組成一個段,該段的起始地址( 基礎地址)為10000H,段地址為1000H,大小為100H。2.8 段的概念n我們也可以認為地址10000H1007FH、10080H100FFH 的內存單元組成兩個段,它們的起始地址( 基礎地址 )為10000H和10080

10、H,段地址為:1000H 和1008H,大小都為80H。2.8 段的概念n以后,在編程時可以根據需要,將若干地址連續的內存單元看作一個段,用段地址16定位段的起始地址(基礎地址),用偏移地址定位段中的內存單元。n兩點需要注意n內存單元地址小結n特別提示兩點需要注意n(1)段地址16 必然是 16的倍數,所以一個段的起始地址也一定是16的倍數;n(2)偏移地址為16位,16 位地址的尋址能力為 64K,所以一個段的長度最大為64K。內存單元地址小結nCPU訪問內存單元時,必須向內存提供內存單元的物理地址。n8086CPU在內部用段地址和偏移地址移位相加的方法形成最終的物理地址。n思考兩個問題n(

11、1)觀察下面的地址,讀者有什么發現?n結論:CPU可以用不同的段地址和偏移地址形成同一個物理地址。內存單元地址小結內存單元地址小結n(2)如果給定一個段地址,僅通過變化偏移地址來進行尋址,最多可以定位多少內存單元?n結論:偏移地址16位,變化范圍為0FFFFH,僅用偏移地址來尋址最多可尋64K個內存單元。n比如:給定段地址1000H,用偏移地址尋址,CPU的尋址范圍為:10000H1FFFFH。內存單元地址小結n在8086PC機中,存儲單元的地址用兩個元素來描述。即段地址和偏移地址。n“數據在21F60H內存單元中。”對于8086PC機的兩種描述:n(a)數據存在內存202X:1F60單元中;

12、n(b)數據存在內存的202X段中的1F60H單元中。n可根據需要,將地址連續、起始地址為16的倍數的一組內存單元定義為一個段。特別提示n檢測點(Page 23)n沒有通過檢測點請不要向下學習!2.9 段寄存器n段寄存器就是提供段地址的。 8086CPU有4個段寄存器:CS、DS、SS、ESn當8086CPU要訪問內存時,由這4個段寄存器提供內存單元的段地址。2.10 CS和IPnCS和IP是8086CPU中最關鍵的寄存器,它們指示了CPU當前要讀取指令的地址。 CS為代碼段寄存器; IP為指令指針寄存器。8086PC讀取和執行指令相關部件n8086PC讀取和執行指令演示n8086PC工作過程

13、的簡要描述8086PC工作過程的簡要描述n(1)從CS:IP指向內存單元讀取指令,讀取的指令進入指令緩沖器;n(2)IP = IP + 所讀取指令的長度,從而指向下一條指令;n(3)執行指令。 轉到步驟 (1),重復這個過程。8086PC工作過程的簡要描述n在 8086CPU 加電啟動或復位后( 即 CPU剛開始工作時)CS和IP被設置為CS=FFFFH,IP=0000H,即在8086PC機剛啟動時,CPU從內存FFFF0H單元中讀取指令執行,FFFF0H單元中的指令是8086PC機開機后執行的第一條指令。2.10 CS和IPn內存中指令和數據沒有任何區別,都是二進制信息,CPU在工作的時候把

14、有的信息看作指令,有的信息看作數據。nCPU根據什么將內存中的信息看作指令? CPU將CS:IP指向的內存單元中的內容看作指令。2.10 CS和IPn在任何時候,CPU將CS、IP中的內容當作指令的段地址和偏移地址,用它們合成指令的物理地址,到內存中讀取指令碼,執行。n如果說,內存中的一段信息曾被CPU執行過的話,那么,它所在的內存單元必然被CS:IP指向過。2.11 修改CS、IP的指令n在CPU中,程序員能夠用指令讀寫的部件只有寄存器,程序員可以通過改變寄存器中的內容實現對CPU的控制。nCPU從何處執行指令是由CS、IP中的內容決定的,程序員可以通過改變CS、IP中的內容來控制CPU執行

15、目標指令。n我們如何改變CS、IP的值呢?2.11 修改CS、IP的指令n8086CPU必須提供相應的指令n先回想我們如何修改AX中的值?nmov指令不能用于設置CS、IP的值, 8086CPU沒有提供這樣的功能。n8086CPU為CS、IP提供了另外的指令來改變它們的值:轉移指令如何修改AX中的值?nmov 指令n如:mov ax,123nmov指令可以改變8086CPU大部分寄存器的值,被稱為傳送指令。n能夠通過mov 指令改變CS、IP的值嗎?2.11 修改CS、IP的指令n同時修改CS、IP的內容:jmp 段地址:偏移地址jmp 2AE3:3jmp 3:0B16功能:用指令中給出的段地

16、址修改CS,偏移地址修改IP。2.11 修改CS、IP的指令n僅修改IP的內容:jmp 某一合法寄存器jmp ax (類似于 mov IP,ax)jmp bx功能:用寄存器中的值修改IP。n內存中存放的機器碼和對應匯編指令情況: (初始:CS=202XH,IP=0000H)n請寫出指令執行序列:問題分析問題分析結果:n(1)mov ax,6622n(2)jmp 1000:3n(3)mov ax,0000n(4)mov bx,axn(5)jmp bxn(6)mov ax,0123Hn(7)轉到第(3)步執行2.12 代碼段n對于8086PC機,在編程時,可以根據需要,將一組內存單元定義為一個段。

17、n可以將長度為 N( N64KB )的一組代碼,存在一組地址連續、起始地址為 16的倍數的內存單元中,這段內存是用來存放代碼的,從而定義了一個代碼段。n例如2.12 代碼段n這段長度為 10 字節的字節的指令,存在從123B0H123B9H的一組內存單元中,我們就可以認為,123B0H123B9H這段內存單元是用來存放代碼的 ,是一個代碼段 ,它的段地址為123BH,長度為10字節。2.12 代碼段n如何使得代碼段中的指令被執行呢?n將一段內存當作代碼段,僅僅是我們在編程時的一種安排,CPU 并不會由于這種安排,就自動地將我們定義得代碼段中的指令當作指令來執行。nCPU 只認被 CS:IP 指向的內存單元中的內容為指令。n所以要將CS:IP指向所定義的代碼段中的第一條指令的首地址。nCS = 123BH,IP = 0000H。節

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論