1. 程式人生 > >第二章 寄存器小結

第二章 寄存器小結

reg 讀寫 部分 舉例 步驟 bios 圖片 內存地址空間 直接

  1. 存儲器從功能和連接上分為:隨機存儲器:用於存放CPU的絕大部分程序和數據;裝有BIOS的ROM:用於存儲設備的基本輸入輸出系統;接口卡上的RAM:接口卡需要對大批量輸入、輸出數據進行暫存時使用,如顯存。CPU在操作它們的時候,把它們都當做內存來對待,把它們總的看做一個由若幹存儲單元組成的邏輯存儲器,這個邏輯存儲器就是我們所說的內存地址空間。
  2. 2.8086機中,任意時刻,CPU將CS:IP指向的內容當做指令執行,在加電或復位後CS和IP被設置為CS=FFFFH,IP=0000H,即FFFF0H單元的指令是8086pc機開機後執行的第一條指令。
  3. 3.8086CPU中有一個DS寄存器,通常用來存放要訪問數據的段地址,8086不支持將數據直接送入段寄存器,只能有一個寄存器來進行中轉。
  4. 4.8086CPU提供入棧和出棧指令,入棧和出棧操作都是以字為單位進行的,棧地址為SS:SP
  5. 5.可執行文件由描述信息和程序組成,程序來自於源程序中的匯編指令和定義的數據;描述信息則主要是編譯、連接程序對源程序中偽指令進行處理做得到的信息。如CPU從何處開始執行程序,只要在源程序中用“end 標號”指明就可以了。
  6. 6.寄存器:reg包含:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,disreg包含:ds,ss,cs,es關於bx,si,di和bp:只有這四個寄存器可以用於[]中進行內存單元的尋址只要使用寄存器bp,且沒有顯性給出段地址,段地址默認在ss中
  7. 7.絕大多數機器指令都是進行數據處理的指令,處理大致分為:讀取、寫入、運算。所要處理的數據可以在三個地方:cpu 內部(寄存器)、內存、端口。匯編語言用三個概念來表達數據的位置:立即數、寄存器、段地址+偏移地址。
  8. 8.匯編指令舉例

匯編指令

控制CPU完成的操作

用高級語言的語法描述

mov ax,18

將18送入寄存器AX

AX=18

mov ah,78

將78送入寄存器AH

AH=78

add ax,8

將寄存器AX中的數值加上8

AX=AX+8

mov ax,bx

將寄存器BX中的數據送入寄存器AX

AX=BX

add ax,bx

將AX和BX的數值相加,結果存在AX中

AX=AX+BX

9.16位結構的cpu

運算器一次最多可以處理16位的數據

寄存器的最大寬度為16位

寄存器和運算器之間的通路為16位

10.8086CPU給出物理地址的方法技術分享圖片

11.段地址×16+偏移地址=物理地址的本質含義

CPU在訪問內存時,用一個基礎地址(段地址*16)和一個相對於基礎地址的偏移地址相加,給出內存單元的物理地址。

12.修改CSIP的指令

CPU中,程序員能夠用指令讀寫的部件只有寄存器,程序員可以通過改變寄存器中的內容實現對CPU的控制。CPU從何處執行指令是由CSIP中的內容決定的,程序員可以通過改變CSIP中的內容來控制CPU執行目標指令。

我們如何改變CSIP的值呢?顯然,8086CPU必須提供相應的指令。我們如何修改AX中的值?可以用mov指令,如mov ax,123ax中的值設為123,顯然,我們也可以用同樣的方法設置其他寄存器的值,如mov bx,123mov cx,123mov dx123等。其實,8086CPU大部分寄存器的值,都可以用mov指令來改變,mov指令被稱為傳送指令。

但是,mov指令不能用於設置CSIP的值,原因很簡單,因為8086CPU沒有提供這樣的功能。8086CPUCSIP提供了另外的指令來 改變它們的值。能夠改變CSIP的內容的指令被統稱為轉移指令(我們以後會深入研究)。我們現在介紹一個最簡單的可以修改CSIP的指令:jmp指 令。

若想同時修改CSIP的內容,可用形如"jmp段地址:偏移地址"的指令完成,如

jmp 2AE3:3,執行後:CS=2AE3HIP=0003HCPU將從2AE33H處讀取指令。

jmp 3:0B16,執行後:CS=0003HIP=0B16HCPU將從00B46H處讀取指令。

"jmp 段地址:偏移地址"指令的功能為:用指令中給出的段地址修改CS,偏移地址修改IP

若想僅修改IP的內容,可用形如"jmp 某一合法寄存器"的指令完成,如

jmp ax,指令執行前:ax=1000HCS=2000HIP=0003H
指令執行後:ax=1000HCS=2000HIP=1000H
jmp bx,指令執行前:bx=0B16HCS=2000HIP=0003H
指令執行後:bx=0B16HCS=2000HIP=0B16H

14.小結:

段地址在8086CPU的段寄存器中存放。當8086CPU要訪問內存時,由段寄存器提供內存單元的段地址。8086CPU4個段寄存器,其中CS用來存放指令的段地址。

CS存放指令的段地址,IP存放指令的偏移地址。

8086機中,任意時刻,CPUCSIP指向的內容當作指令執行。

8086CPU的工作過程:

CSIP指向的內存單元讀取指令,讀取的指令進入指令緩沖器;

IP指向下一條指令;

執行指令。(轉到步驟1,重復這個過程)

8086COU提供轉移指令修改CSIP的內容。

第二章 寄存器小結