微機原理及應用


第一章 微處理器

1.1 微處理器的基本功能和基本組成

1.1.1 微處理器的基本功能

微處理器是微機運算和控制處理部件,也是指揮微機各部件協調工作的控制中心。主要

的基本功能包括:

  1. 指令控制功能,即控制程序 順序執行 的功能

  2. 操作控制功能,程序是由有序指令的集合而成,CPU執行程序就是要逐條執行程序中

    的指令,一條指令的執行往往由若干操作信號的組成來實現,CPU根據指令操作碼和

    時序信號,產生各種操作控制信號,以便正確的選擇數據通路,從而完成取指令和執行

    指令的控制。

操作控制器的組成類型分為兩類:

  1. 硬布線控制器,它是采用時序邏輯技術來實現的。
  2. 微程序控制器,它是采用存儲邏輯來實現的。

1.1.2 微處理器的基本組成

從早期的微處理器看,它主要包括運算器和控制器兩大部分。隨着大規模集成電路技術的快速發展,

目前CPU內部最基本的組成部分為三大部分,即運算器、控制器和高速緩沖存儲器。

1. 運算器:

AX,BX,CX,DX CPU中的寄存器

ALU:算數邏輯部件

C1,C2 :操作信號,相當於開關

標志寄存器:算完以后的狀態,大於0,小於0?越界問題

!!! 數據不能兩個都來自內存中。

2. 高速緩沖存儲器

由於CPU的速度遠大於內存的速度,所以使用cache,將CPU所需要的數據提前從內存讀入cache中,

使得CPU在近期一段時間片段不需要訪問內存,而是只需訪問CPU內部的高速緩沖存儲器,稱其為
訪問CPU內部cache的 命中率 很高

3. 控制器

控制器最基本的部件由指令指針,指令寄存器,指令譯碼器及操作控制器組成。

為什么會CPU會順序執行:

指令指針中存放存儲器地址,為了保證程序順序執行,CPU必須自動記憶下一條指令存放在內存中

的地址,所以指令指針又稱為指令計數器,他有 自動加一 功能

選擇,循環結構時,操作系統會給指令指針賦值 (我們寫代碼過程中不能操作指令指針)

1.1.3 馮·諾依曼思想

  1. 五大模塊:運算器,控制器,存儲器,輸入 /出設備
  2. 計算機采用二進制
  3. 在程序運行過程中,代碼和數據存放在 內存

存儲器包括內存跟硬盤,一般說存儲器單指內存

​ 為什么:cpu不能直接訪問硬盤

1.2 微處理器內部的寄存器

1.2.1 8086 CPU 內部的寄存器組

8086CPU包含

數據線:16

地址線:20

最大存儲空間:64KB

​ 2^16 byte =2^6KB 1個二進制位表示1位,即 1bit,8bit=1byte(字節)

最多可接內存:1M

​ 2^20byte


4個16位 段寄存器

CS,代碼段寄存器

DS,數據段寄存器 馮諾依曼思想第三句,主要是操作數據 important

SS,堆棧段寄存器

ES,附加段寄存器

代碼在3樓:CS

數據在6樓:DS


數據寄存器
  1. AX:累加器,用於算數運算、邏輯運算以及在輸入/輸出指令中做數據寄存器使用等。
  2. BX:基址寄存器,在間接尋址中做基址寄存器,常用作偏移地址訪問數據段。
  3. CX:計數寄存器,作為循環和串行操作等指令中的隱含計數器。
  4. DX:數據寄存器,常用來存放雙字節長數據的高16位或存放 外設端口 的地址。

4個16位寄存器,分別可拆分為8個8位寄存器

AH,AL

BH,BL

CH,CL

DH,DL

在寫代碼過程中,要靈活運用這些寄存器

0~255 用8位


通用寄存器

SP,堆棧指針,SP用於指示棧底或棧頂的偏移地址

BP,基址指針,常用作偏移地址訪問堆棧段 訪問堆棧段-----SS

SI,源變址寄存器

DI,目的變址寄存器

SI和DI通常與 DS數據段寄存器一起使用,用來確定數據段中某一存儲單元的地址。在進行

字符串操作時,SI用來存放源操作數的偏移地址,DI用來存放目的操作數的偏移地址,SI與

DI聯用,DI與ES連用,分別尋址數據段和附加數據段。


標志寄存器

ZF:零標志,當前運算后,運算結果為0時,ZF=1,表示0成立,否則ZF=0.

DF:方向標志,該標志用於控制串操作指令中地址指針的變化方向

DF=0:每執行一次串操作,存儲器地址自動增加

DF=1:沒執行一次串操作,存儲器地址自動減少

IF:中斷允許標志,該標志用於控制8086CPU是否響應外部可屏蔽中斷請求

TF:陷阱標志,常稱為單步標志。


匯編語言采用減法計數

INC AL INC:increase

DEC BH DEC:decrease

1.3 用匯編語言實現 3 + 4

打開桌面快捷方式 輸入命令
DEBUG    ;(輸完回車)
R	;(輸完回車)

a	;(輸完回車)
MOV AX,3	;(輸完回車)
MOV BX,4	;(輸完回車)
ADD AX,BX	;(輸完回車)

最后直接回車

三次連續輸入T 回車 單步執行

測試完成

1.3 微處理器對存儲器的管理

1.3.1 實模式存儲器地址空間的划分

從00000H~003FFH是中斷向量表去,共計有1024字節,1024/4=256 ,用於存放

256個中斷向量(中斷服務程序的入口地址)----->CS:IP,即每個中斷向量包含4字節:

2字節的代碼段值,2字節的偏移地址

1.3.2 實模式物理地址的產生

數據線小於地址線,所以CPU內部的地址加法器,能將16位的邏輯地址裝換成

20位的物理地址

段基地址:偏移地址

物理地址的計算公式:

​ 物理地址=段基地址x16+偏移地址

1.3.2 段寄存器與偏移地址寄存器的固定搭配

總結:除了SP,BP,CS 其余的都跟數據段搭配


1.4 8086系統中的存儲器組織

在8086系統中,把1MB的存儲器分為兩個存儲體,偶地址存儲體和奇地址存儲體,其存儲容量

各位512KB,在每個存儲體內的字節地址是不連續的,而在兩個存儲體之間的字節地址是連續

的,構成了兩個存儲體之間的地址交叉,如圖:

BHE 和A0的組合操作

BHE A0 操 作 指 令 列
0 0 從偶地址讀/寫一個字 MOV BX,[9900H]
0 1 從奇地址讀/寫一個字節 MOV AL,[8801H]
1 0 從偶地址讀/寫一個字節 MOV CH,[7700H]
1 1 無存儲器操作

第二章 指令系統與匯編語言程序設計

1.1 8086CPU的尋址方式

2.1.1 指令一般格式

1. 8086CPU指令的格式

操作碼 操作數

例如:指令 MOV AL,29H

8086CPU指令的格式可以細分為以下幾種:

  1. 零地址指令

    格式:操作碼

    零地址指令中不提供操作數,也不提供操作數的地址,只有操作碼,例如 空操作指令

    NOP

  2. 單地址指令

    格式:操作碼 操作數

    單地址指令也成為一般地址指令,指令中之提供一個操作數(或一個操作數的地址),例如:

    INC AH

    INC BYTE PTR[1100H]

  3. 兩地址指令

    格式:操作碼 目的操作數,源操作數

    指令中包含兩個操作數,由操作碼確定這兩個操作數所進行的操作后,結果存入目的操作數中。例如:

    MOV AH,BL ;AH<------(BL)

    MOV BH,[1100H] ;BH<------(1100H)

    說明:

    1. 目的操作數和源操作數應具有相同的數據類型,即必須同時是8位或者16位。

    2. 目的操作數不能是立即數。

    3. 操作結束后,其操作結果送入目的操作數中,而源操作數並不會改變。

    4. 源操作數和目的操作數不能同時為存儲器操作數,例如:

      ADD [BX],[2000H]

    5. 立即數不能作為目的操作數。

2. 操作數的類型
  1. 數據操作數
    1. 立即操作數
      imm,代表8 、16位立即數

      immn:n(n為8或16)位立即操作數

    2. 寄存器操作數

      reg:寄存器,代表8和16位

      regn:n(n為8或16)位寄存器

    3. 存儲器操作數

      mem:存儲器操作數,

      memn:n(n為8或16)位存儲器操作數

    4. 輸入/輸出操作數

  2. 轉移地址操作數

    轉移地址操作數來自具體的指令,且指令中轉移地址只有一個,他就是指令的目的操作數

2.2.2 8086 CPU尋址方式

1.立即尋址

操作數位置:內存代碼段

立即尋址所提供的操作數直接放在指令中,它是緊跟在指令操作碼后面的一個可用的8位或16位 補碼 表示的由有符號數,也就是說,操作數的存放地址就是指令操作碼的下一單元地址。

例: 立即數傳送到寄存器中

MOV BH,10H ;將立即數10H傳送到BH中

MOV BX,2345H ;將立即數2345H傳送給BX

說明:立即數在所有指令中都不可能用作目的操作數。

2. 寄存器尋址

操作數位置:在CPU的某個寄存器中。

寄存器中寄存的內容就是要尋找的操作數。

例:增1指令

INC CX ;CX<------(CX)+1

例:寄存器之間的傳送指令

MOV CX,AX ;CX<--------AX

3. 存儲器尋址

在8086、80286微處理器中,默認的段寄存器與16位寄存器的固定搭配如表4-2所示

  1. 直接尋址

    MOV BL,[3330H]

    PA=DS x 16 + 3330H

  2. 基址尋址

    MOV AL,[BX]

    PA=DS x 16 + BX

  3. 相對基址尋址

    MOV AL,[BX+30H]

    PA=DS x 16 + BX + 30H

  4. 變址尋址

    MOV BL,[SI]

    PA=DS x 16 + SI

  5. 相對變址尋址

    MOV AL,[SI-56H]

    PA=DS x 16 + SI - 56H

  6. 基址加變址尋址

    MOV AL,[BX+SI]

    PA=DS x 16 + BX + SI

  7. 相對基址加變址尋址

    MOV AL,[BX+DI+90H]

    PA=DS x 16 + BX + DI + 90H

1.2 16位微處理器指令系統

為了方便介紹,對幾個符號的規定如下:

OPS:源操作數,代表8位和16位二進制數據

OPSn:n(n為8或16)位源操作數

OPD:目的操作數,代表8和16位二進制數據

OPDn:n(n為8或16)位目的操作數

seg:段寄存器 (segment)

(reg):表示寄存器中寄存的數值

1.2.1 數據傳送指令

1.一般數據傳送指令

數據傳送指令是將數據、地址或立即數傳送到寄存器或存儲器中,可以分為一般數據傳送指令、堆棧操作指令、地址傳送指令和輸入 /輸出指令

  1. 傳送指令

    指令格式: MOV OPD,OPS

    MOV有如下五中具體形式:

    1. MOV reg,reg ; 兩個寄存器之間的數據傳送,如 MOV AL,BH

    2. MOV reg,mem ; 內存單元數據傳送給寄存器,讀內存,如 MOV BX,[SI]

    3. MOV mem,reg ; 寄存器的數據傳送給內存單元,寫內存,如 MOV [DI],BX

    4. MOV reg,imm ; 立即數傳送給寄存器,如 MOV AX,3

    5. MOV mem,imm ; 立即數傳送給內存單元,如 MOV WORD PTR[SI],1122H

      特別說明:WORD是指明兩個字節,BYTE 指明一個字節

    用於段寄存器的傳送指令有三種形式:

    1. MOV seg,reg ; 寄存器數據傳送給數據段寄存器,如 MOV DS,AX
    2. MOV reg,seg ; 段寄存器數據傳送給寄存器,如 MOV AX,DS
    3. MOV mem,seg ; 段寄存器數據傳送給內存單元,如 MOV [DI],DS

    說明:當段寄存器作為目的操作數時,不允許是CS和SS段寄存器,但所有段寄存器都可以作為源操作數

  2. 數據交換指令

    指令格式:XCHG OPD,OPS

    XCHG一般有如下三種格式:

    XCHG reg,reg XCHG AL,AH

    XCHG reg,mem XCHG AL,[BX]

    XCHG mem,reg XCHG [1000H],BX

2.堆棧操作指令

堆棧是在內存RAM這種開辟的一段特殊的存儲空間。它的主要功能包括:

  1. 用來暫時存放程序的(斷電)地址(CS和IP的值)。
  2. 用以臨時存放CPU寄存器和存儲器中暫時不用的數據 (寄存器不夠用)

堆棧操作指令:

  1. 數據入棧指令

    指令格式:PUSH OPS16

    將OPS中的16位數據壓入堆棧中,且堆棧指針SP中的值減2,PUSH一般有兩種形式:

    1. PUSH reg16
    2. PUSH mem16
  2. 數據出棧指令

    指令格式: POP OPD16

    將SS:IP所指定的一個字彈出給某一16位通用寄存器、數據段寄存器或某一字存儲單元中。OPS一定是16位,彈出棧的數據也是16位,POP OPD16指令執行后,SP加2。

    POP一般有三種形式:

    1. POP reg16
    2. POP seg
    3. POP mem16

    注:高字節存放高地址、低字節存放低地址

  3. 地址傳送指令

    1. 傳送偏移地址

      指令格式: LEA reg16,OPS

    說明:(1)目的操作數一定是一個16通用寄存器。

    (2)OPS 所提供的一定要是內存的一個偏移地址,可以是存儲器的各種尋址方式。例如:

    ​ LEA BX,[SI+2]

    (3)OPS通常是變量名,取其偏移地址到reg16中。例如:

    LEA SI,VAR

  4. 輸入/輸出指令

    輸入 /輸出設備接口電路中有三種類型的寄存器 此處寄存器跟前面所指寄存器並不同 每一個設備寄存器都在I/O空間中被指定一個固定地址

    1. 基本輸入指令

      IN AL,DX

      通常用作查詢狀態,數據采集

    2. 基本輸出指令

      OUT DX,AL

      給300H發數據80H

      MOV AL,80H

      MOV DX,300H

      OUT DX,AL

1.2.2 算數運算指令

1.加法指令
  1. 不帶進位的加法指令

    指令格式: ADD OPD,OPS

    ADD有以下5種形式:

    ADD reg,reg

    ADD reg,mem

    ADD mem,reg

    ADD reg,imm

    ADD imm,reg 例:ADD WORD PTR[1000H],2233H

  2. 帶進位的加法指令

    指令格式:ADC OPD,OPS

2.減法指令
  1. 不帶借位減法指令

    指令格式:SUB OPD,OPS

  2. 帶借位減法指令

    指令格式: SBB OPD,OPS

  3. 減1指令

    指令格式:DEC OPD

    DEC有兩種形式:

    DEC reg

    DEC mem DEC WORD PTR[DI]

    例:求1-100的累加和

    MOV AX,0

    MOV CX=64

    ABC:ADD AX,CX

    DEC CX

    JNZ ABC

  4. 比較指令

    指令格式:CMP OPD,OPS; (OPD)-(OPS)

3.乘法指令
  1. 無符號的乘法指令

    指令格式:MUL OPS

    字節乘法: AX<----(AL)*(OPS8)

    字乘法: DX:AX<----(AX)*(OPS16)

  2. 帶符號數乘法指令

    指令格式:IMUL OPS

    字節乘法: AX<----(AL)*(OPS8)

    字乘法: DX:AX<----(AX)*(OPS16)

4.除法指令
  1. 無符號的除法法指令

    指令格式:DIV OPS

    字節除法: (AX)/(OPS8) 商---->AL,余數---->AH

    字除法: DX:AX/(OPS16)

  2. 帶符號數除法指令

    指令格式:IDIV OPS

    字節除法: (AX)/(OPS8) 商---->AL,余數---->AH

    字除法: DX:AX/(OPS16)

1.2.3邏輯運算

1.求補指令

指令格式:NEG OPD

將OPD中的內容逐位取反,且末尾加一后送入OPD中

2.求反指令

指令格式:NOT OPD

將OPD中的內容逐位取反后,送入OPD中

3.邏輯與指令

指令格式:AND OPD,OPS OPD<----OPD^OPS

4.邏輯測試指令

指令格式: TEST OPD,OPS OPS^OPD

注:用來查詢狀態

5.邏輯或指令

指令格式:OR OPD,OPS OPD<----OPDvOPS

6.邏輯異或指令

指令格式: XOR OPD,OPS

1⊕1=0,0⊕0=0,0⊕1=1

1.2.4 移位指令

1. 算術移位指令
  1. 算數左移

    SAL OPD,1

    SAL OPD,CL

    這兩條指令的差別是當移位次數為1時,可以直接使用SAL OPD,1指令,當移位次數大於1時,必須先將移位次數送入CL中,然后使用SAL OPD,CL指令。

  2. 算數右移

    SAR OPD,1

    SAR OPD,CL

2.邏輯移位指令
  1. 邏輯左移指令

    SHL OPD,1

    SHL OPD,CL

  2. 邏輯右移指令

SHR OPD,1

SHR OPD,CL

3.循環移位
  1. 不帶進位的循環左移指令

    ROL OPD,1

    ROL OPD,CL

    ROL WORD PTR[BX],1 ;內存中臨近的兩個字節組成一個字循環左移一位

  2. 不帶進位的循環右移指令

    ROR OPD,1

    ROR OPD,CL


免責聲明!

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



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