河北專升本(微機原理)

目錄

第一章:計算機基礎與數制轉化

1. 進制運算基礎

2. 常用編碼形式

3. 計算機系統的組成及其工作原理

4. 微機系統主要技術指標

第二章:8086微處理器及其系統

1.?8086微處理器(CPU)

2.?8086的存儲器及I/O組織?

3.?8086系統配置

第三章:指令系統

1.?8086/8088指令系統概述

2.?8086的指令系統

(一).?數據傳送指令

(二). 算術運算指令

(三).?邏輯運算指令

(四).?移位指令

(五).?字符串操作指令

(六).?轉移指令

(七).?循環控制指令

(八).?宏匯編語言的基本語法

(九).?偽指令

(十).?宏指令

(十一).?匯編語言程序的結構

(十二).?DOS系統功能調用

第四章: 存儲器

1. 存儲器基礎

2. 兩塊重要的存儲芯片

3. 編址和譯碼

第五章: 輸入輸出及中斷技術

1. io接口、編址、傳送方式

2. 中斷

3.?8086/8088的中斷系統 ?

4.??8259A可編程中斷控制器

?第六章:常用接口技術

1. 8255

2. 可編程定時/計數器8253


第一章:計算機基礎與數制轉化

1. 進制運算基礎

進位計數制:
按照進位的方法進行計數,稱為進位計數制。常見的進位計數制有:二進制、八進制、十進制、十二進制、十六進制等等。

R進制數的特點:
? ? 1、具有R個不同的數符。0,1,2,...,R-1

? ? 2、逢R進一。


進位計數制的一般表達式(按權展開式):
? ? R進制數的表示方法,任一R進制數S可表示為:?

? ? 位置表示法:? ??

? ? ?其中:ai :R進制中的數字符號? ? ?

? ? ? ? ? ? ?R:基數

? ? ? ? ? ? ?Ri:位權,簡稱權


十進制:
? ? ? 特點:(1)有十個數碼:0~9
? ? ? ? ? ? ? ? ?(2)逢十進一

? ? ? 后綴為D

? ? ? 加權展開式以10為基數,各位系數為0~9。

二進制:
? ? ? 特點:(1)兩個數碼:0、1
? ? ? ? ? ? ? ? ?(2)逢二進一

? ? ? 后綴為B

? ? ? 加權展開式以2為基數,各位系數為0、1。

十六進制:

? ? ? ?特點:(1)十六個數碼0~9、A~F
? ? ? ? ? ? ? ? ? (2)逢十六進一。

? ? ? ?后綴為H,一般情況如果字母開頭那前面要加0
? ? ? ?展開式以十六為基數,各位系數為0~9,A~F。

? ? ? ?注意:不同進位制數以后綴區別,十進制數可不帶后綴。或加括弧,再在括弧之后

? ? ? ? ? ? ? ? ? 注明。


不同進位計數制之間的轉換:

? ? ? 2和16進制數轉換成10進制數方法:

? ? ? ? ? ?先將二、十六進制數按權展開,然后按照十進制運算法則求和。

? ? 十進制數轉換成二、十六進制:

? ? ? ? ? ?方法:整數部分,除基取余;小數部分,乘基取整

? ? 二進制與十六進制數之間的轉換:

? ? ? ? ? ?二進制轉換為16進制時,整數部分從最低位進行劃分,每4位二進制數為一組,

? ? ? ? ? ?不足4位的,最高位補零;小數部分從最高位進行劃分,每4位二進制數為一組,

? ? ? ? ? ?不足4位的最低為補零


邏輯運算:

?(1)與^:兩項均為 1 時,結果為 1;有一個為 0時,結果為 0。
?(2)或(倒著的與):兩項均為0 時,結果為 0;有一個為 1 時,結果為 1。
?(3)非(0或1上面加一橫線):0變1,1變0。
?(4)異或(圓圈里加個正號):兩項相同則為 0,不同則為一。

?2. 常用編碼形式

1. 二進制編碼的十進制數

??? BCD碼(Binary Coded Decimal) 8421BCD

? ? 特點:(1)BCD碼有十個不同字符,逢十進一,是十進制數。

? ? ? ? ? ? ? ?(2)每一位十進制數用4 位二進制編碼表示,是以二進制編碼表示的十進制數。

? ? ? ? ? ? ? ?(3)直觀。

? ? 例:求十進制數876的BCD碼? ? ? ? ? ?

? ? ?注意:BCD碼——>十進制碼——>二進制?

? ? ? ? ? ? ? ? 一字節=8位二進制數?

? ? ?BCD(8421)有兩種形式:

? ? ? ? ? ? ? ? 1. 組合(壓縮)BCD:8位2進制表示2位十進制

? ? ? ? ? ? ? ? ? ? 例如:78以 組合(壓縮)BCD表示:0111 1000

? ? ? ? ? ? ? ? 2. 非組合(非壓縮):8位2進制表示1位十進制

? ? ? ? ? ? ? ? ? ? 例如:78以 非組合(非壓縮)BCD表示:0000 0111? ? 0000 1000

? ? ? 除BCD編碼外,還有其他二進制編碼的十進制數。如余3碼、余3循環碼等。


2.??字符編碼

? ? ?(ASCII碼 American Standard Code For Information Interchange,美國標準信息交換碼)

? ? ?可表示128種字符的7位基本ASCII碼和可表示256種字符的8位擴充ASCII碼

? ? ?(可重新定義)

? ? ? 字符可分為:顯示字符控制字符

? ? ?? ? ? ? ? ? ? ? ? ? ? 0—9:ASCII碼30H—39H

? ? ? ? ? ? ? ? ? ? ? ?? ? A—Z:??41H—5AH

? ? ? ? ? ? ? ? ? ? ? ? ? ?a—z:???61H—7AH

? ? ? ? ? ? ? ? ? ? ? ? ? ?回車:0DH? ? 換行:0AH


3.? 帶符號數的表示方法

? (1)機器數與真值

? ?機器數:計算機中數的表示形式,以二進制的形式表示,位數通常為8的倍數 。

? ? ? ? ? ? ? ? ?一般數的最高位作符號位,“0”表示“+”, “1”表示“-”

? ? ? ? ? ?真值: 機器數所代表的實際數值。可用二進制表示,也可用其他進制表示。

? ? ? ? ? ? ? ? ? ? ? ?一般真值都代表有符號數

? ? ? ? ? ?舉例:一個8位機器數與它的真值對應關系如下:

? ? ?(2)計算機對有符號數的三種表示方法

? ? ? ? ? ? ?原碼(True Form):

? ? ? ? ? ? ?定義:正數符號位為0,負數為1,數值位保持不變

? ? ? ? ? ? ? ? ? ? ? ? 8位2進制數的最高位用作符號位后跟絕對值

? ? ? ? ? ? ?例:X=124??????[X]原 =01111100 (8位)

? ? ? ? ? ? ? ? ? ? Y=-124???? [Y]原 =11111100 (8位)

? ? ??反碼(One’s Complement):

? ? ? ? ? ? 定義:正數的反碼與原碼表示相同。?

??????????? 負數反碼符號位為 1,數值位為原碼數值各位取反。

? ? ? ? ? ? 也就是在原碼的基礎上,正數不變,負數除符號位按位取反(0變1,1變0)

? ? ? ? ? ? ? ? ? ? 例:? 8位反碼機器數:?

? ? ? ? ? ? ? ? ? ? ? ? ? x= 4:? ? ? ?[x]原= 00000100? ?[x]反= 00000100

? ? ? ? ? ? ? ? ? ? ? ??? x= -4 :? ? ?[x]原= 10000100???[x]反= 11111011

? ? ? ? ? ? ? ? ? ? ? ? ? x= 100:? ?[x]原= 01100100? ? [x]反= 01100100

? ? ? ? ? ? ? ? ? ? ? ? ? x= -100 : [x]原= 11100100??? [x]反= 10011011

? ? ? ? ? ? ? ? ? ? ? ? ? [0+]反= 00000000? ? ?[0-]反= 11111111

? ? ? ? ? ? ? ? ? ? ? ? ? [-127]反= 10000000

? ? ? ? ? ? ? ? ? ? 特點:

? ? ? ? ? ? ? ? ? ? ? ? (1)0有兩種表示方法

? ? ? ? ? ? ? ? ? ? ? ? (2)8位:-127~ +127? 16位:-32767~ +32767

? ? ? ? ? ? ? ? ? ? ? ? (3)符號位為0,正數,后面7/15位是其數值;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?符號位為1,負數,后面7/15位按位取反。

? ? ? ? ? ? ? ? ? ? ? ? ? 如: [x]反= 00000101????????x=5

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [y]反= 11111110????????? y=-1

? ? ? ? ? ? ? ? 補碼(Two’s Complement):

? ? ? ? ? ? ? ? ? ?1. 模 —— 計數系統的量程?

? ? ? ? ? ? ? ? ? ? ? ?8位2進制數的模是256100H,16位2進制數的模是6553610000H

? ? ? ? ? ? ? ? ?? ? 2. 補碼

? ? ? ? ? ? ? ? ? ? ? ? ?定義:正數——>同原碼(原反補相同)

? ? ? ? ? ? ? ? ? ? ? ? ?負數——>其對應的原碼基礎上除符號位按位取反后加1。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?或:負數的補碼 = 模 -?|真值的絕對值(有符號數)|

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |真值(有符號數)| = 模 - 補碼

? ? ? ? ? ? ? ? ? ? ? ? ?計算機內部負數=補碼

? ? ? ? ? ? ? ? ? ? ? ? ?計算機內部不會區分有無符號數,只會正常加減

? ? ? ? ? ? ? ? ? ? ? ? ?大于等于80H的數看作有符號數就是負的? 80H=-128

? ? ? ? ? ? ? ? ? ? ? ? ?例:求 8位補碼機器數:?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=+4:? [x]原=[x]反=[x]補=? 00000100?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? x=-4:? ?[x]原 = 10000100? ???[x]反 = 11111011? ? ? ? ?[x]補 = 11111100

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [-100]原 = 11100100????? [-100]補 =10011100

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??[-0]補 =11111111+1=00000000= [-0]補 = [0]補

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [-127]補 =10000001???????? [-128]補 =10000000

? ? ? ? ? ? ? ? ? ? ? ? ?特點:? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?采用補碼,可把減法轉換為加法:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?X=64-9=64+(-9)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?[x]補= [64]補 + [-9]補 =01000000+11110111

? ? ? ? ? 三種表示方式的比較:

? ? ? ? ? ? ? ? ?表示范圍:?

? ? ? ? ? ? ? ? ? ? ? 八位二進制

? ? ? ? ? ? ? ? ? ? ? 原碼:-127~+127? ? 反碼:-127~+127? ??補碼:-128~+127

? ? ? ? ? ? ? ? ? ? ?十六位二進制?

? ? ? ? ? ? ? ? ? ? ? 原碼: -32767~+32767? 反碼:-32767~+32767? 補碼:-32768~+32767

? ? ? ? ? ? ? ? ?信息的冗余性:原碼、反碼存在冗余編碼,補碼不存在冗余編碼

? ? ? ? ? ? ? ? ?運算的繁簡程度:原碼、反碼對加減法需要進行不同的計算

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??補碼對加減法只需進行加法運算即可。

? ? ? ? ? ? ? ? ?注意:2的16次方=65536? ?2的15次方=32768


4、機器數與真值之間的轉換

? ?(1)真值→機器數

? ? ? ? ? ? 以下為8位二進制數:

? ? ? ? ? ? X1=+127,X2=-127,求[X]原 、[X]補:

? ??[X1]原=[X1]補=01111111B= 7FH

? ? [X2]原=11111111= FFH?

? ??[X2]補=10000001= 81H

? ?(2)機器數→真值
 ? ? ? ?*注意機器數表示(原碼、反碼、補碼)
? ? ? ? ? ?*注意機器數符號位

? ? 1.??[X1]原= 59H,[X2]原= D9H,求真值?

? ? ? ? ?[X1]原=01011001 =+89 ? ????

? ? ? ? ?[X2]原= 11011001 =-89

? ??2.? [X1]補= 59H,[X2]補= D9H,求真值?

????????? X1= +1011001B =+89????

????????? X2=10100111B =-39


5、運算方法

?????計算機內部對于加減法運算采用相同的運算器(加法器)進行計算,即:將參與運算的

? ? ?各數值轉換為補碼進行加、減運算,最高位作為數值直接參與運算,變減法為加法運算。

? ? ?1.?補碼加法運算:[X+Y]補=[X]補+[Y]補

? ? ? ? ?注意:A+B=C? ? [A]補+[B]補=[C]補? ?A真+B真=C? ? 這里[C]補==C求補

? ? ? ? ?例:X1=+13,Y1=+6,X2=-13,Y2= -6

? ? ? ? ? ? ? ? 求[X1+Y1]補、?? [ X2+Y2]補

? ? ? ? ? ? ? ? 解:先求[X1]補、 [Y1]補、[X2]補、[Y2]補? ? ? ?

? ? ? 2.?補碼減法運算?? [X-Y]補=[X]補-[Y]補=[X]補+[-Y]補

? ? ? ?3、無符號數加減運算

? ? ? ? ? ? ?法則:加法運算,直接相加;減法運算,變補相加。

? ? ? ? 溢出:

? ? ? ? ? ? ??超出了有符號數的表示范圍?

? ? ? ? ? ? ? 可能溢出的情況:正+正(因為可能會>+127)? ? ? ?負+負(因為可能會<-128)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?負-正(因為可能會-<128)? ? ? ? ?正-負(因為可能會>+127)

? ? ? ? ? ? ? 不可能發生溢出情況:? ? 正+負(因為無論如何都不可能>+127和<-128)

? ? ? ? 判斷有符號數加減法是否溢出:

? ? ? ? ? ? ? (1)?把數都化成二進制進行加減

? ? ? ? ? ? ? (2) 最高位與次高位的進/借位情況是否相同,相同不溢出,不相同溢出

? ? ? ? 總結:

? ? ? ? ? ? ? 通過上例可以看出,計算機只是按照補碼的運算規則進行加減法運算,

? ? ? ? ? ? ? 其無法判斷出參與運算的數據究竟是有符號數還是無符號數。

3. 計算機系統的組成及其工作原理

計算機系統由軟件系統硬件系統組成


1、計算機硬件的基本結構???????

? ? ? 硬件是指組成計算機的各種電子的,機械的,光磁學的物理器件和設備。

? ? ? 至今為止,不論是低檔微機或是高檔微機,均是馮·諾依曼型的機器。它主要由5個基本

? ? ? 部分組成,即:運算器(算術與邏輯運算單元ALU)控制器存儲器,?輸入設備

? ? ? 輸出設備(或I/O設備)

? ? ? ? 在微機中,一塊集成芯片可包括控制器運算器兩大部分,稱為微處理器或處理器

? ? ? (center processing unit,CPU)。一臺微型計算機由處理器存儲器I/O接以及

? ? ? ? 若干I/O設備所組成。各部分之間通過總線連接在一起,實現信息的交換。

? ? ? ? ?注意內存單元的地址和內容:

? ? ? ? ?每個單元都對應一個地址,以實現對單元內容的尋址?


2、計算機的基本工作原理

? ? ??例如,求5+4=?

? ? ? (1) 編制程序,并分配計算程序及數據在存儲器中的存放地址。

? ? ? (2) 用輸入設備將計算程序和原始數據輸入到存儲器指定地址的存儲單元中

? ? ??(3) 從計算程序的首地址啟動計算機工作,在CPU的控制下完成下列操作:

? ?① 取指階段:從首地址所在的存儲單元中,取出第一條指令的操作碼送入CPU中的

? ? ? ? 控制器。控制器經分析,確認它為何種操作(比如取數)

? ?② CPU自動將存儲單元地址加1,然后從此地址中將第一條指令操作數的地址碼送

? ? ? ? 到存儲器的地址譯碼器,并發出讀命令從該單元中取出數據 “5”送入CPU的運算

? ? ? ? 器中。

? ?③ 至此第一條指令執行完畢。CPU再次將存儲地址加1,形成下一條指令的存放地?

? ? ? ? 址,并按此地址取出指令,在控制器中分析該指令要執行的是什么操作,并發出

? ? ? ? 執行該操作所需要的控制信號,直至完成該條指令所規定的操作。依此類推,直

? ? ? ? 到計算程序中的全部指令執行完畢

由此可知,計算機的基本工作原理如下:

? ? ? ? ? ?(1)? 計算機的自動計算(或自動處理)過程就是執行一段預先編制好的計算程序的

? ? ? ? ? ? ? ? ?過程。

? ? ? ? ? ?(2)? 計算程序是指令的有序集合,因此,執行計算程序的過程實際上是逐條執行指

? ? ? ? ? ? ? ? ?令的過程。

? ? ? ? ? ?(3)? 指令的逐條執行是由微機或計算機硬件實現的,可歸結為取指令分析指令?、

? ? ? ? ? ? ? ? ?執行指令。如此重復操作,直至執行完計算程序中的全部指令,便可獲得最終

? ? ? ? ? ? ? ? ?結果。

? ? ? ??微處理器、微型計算機和微型計算機系統三者的關系:

(1) 微處理器只是一個中央處理器(CPU),由算術邏輯部件(ALU),累加器和通用
寄存器組,程序計數器,時序和控制邏輯部件,內部總線等組成。微處理器不能
構成獨立工作的系統,也不能獨立執行程序。
(2) 微型計算機由CPU,存儲器,輸入/輸出接口電路和系統總線組成,具有計算功
能,能獨立執行程序,但不能顯示或輸出,仍不能正常工作。
(3) 以微型計算機為主體,配上外部輸入/輸出設備及系統軟件就構成了微型計算機
系統,這樣就可以正常工作了。

4. 微機系統主要技術指標

一、常用名詞術語:

? ? ? ?1、( bit 或 b )

? ? ? ? ? ? ?——最小的信息單位,二進制的一位數。

? ? ? ? ? ? 例如:1101,含有4 bit;一個“bit”只能表示1種狀態 (“0” 或 “1”);n 個“bit” 就能表

? ? ? ? ? ? ? ? ? ? ? ? 示2的n次方種狀態。

? ? ? ?2、字節( Byte 或 B )

? ? ? ? ? ? ? ——是計算機的最小存儲單元

? ? ? ? ? ? ?1Byte = 8bit , 從00000000~11111111;

? ? ? ? ? ? ?可以表示256 個狀態(數值);

? ? ? ? ? ? ?一般數字、字母、普通符號用一個字節就可表示,但漢字、特殊符號等則需兩個或

? ? ? ? ? ? ?多個字節來表示。

? ? ? ?3、(word 或 w)

? ? ? ? ? ? ? ——是計算機進行數據交換、加工、存儲的基本運算單位。一個字由一個或若干

? ? ? ? ? ? ? ? ? ? ?個字節構成,通常將組成一個字的位數叫作該字的字長。

???????????? 字長越長,在相同時間內能傳送更多的信息,從而運算速度更快;計算機有更大的

? ? ? ? ? ? ?尋址空間,從而內存儲容量更大;計算機系統支持的指令數量越多,功能就越強。

? ? ? ? ? ? ?1word=2B

? ? ? ?4、字長

? ? ? ? ? ? ?——每個字所包含的二進制位數,字長就是字的長度,這里的長度用位來表示

? ? ? ? ? ? ? ? ? ? ? TB>GB>MB>KB>B? ? 1TB=1024GB? ?1GB=1024MB??1MB=1024KB

? ? ? ? ? ? ? ? ? ? ? 1KB=1024B? ? ? ? ? ? ?? ?1B= 8b? ? ? ? ? ? ?1024=2的10次方

? ? ? ? ? ? ? ? ? ? ? 1K=2的10次方? ? ? ? ? ? 1M=2的20次方? ? ? ? ? 1G=2的30次方


二、主要技術指標:

1、 機器字長

? ? ? ? ——是指計算機內部ALU能夠一次同時處理的二進制數的位數。

???????字長越長,運算精度越高。通常字長都是字節(8位二進制數)的整數倍,如8位

? ? ? ?、16位、32位、64位。

?2、主頻

? ? ? ? ——計算機的時鐘頻率,在一定程度上反映機器的運算速度,主頻越高,運算速

? ? ? ? ? ? ? ?度越快。

? ? ? ?主頻的單位是MHz(兆赫)和GHz。如386的主頻為20M~33MHz,486的主頻為25

? ? ? ?M~100MHz,Pentium的主頻為66M~200MHz,Pentium Ⅲ的主頻為336M~

? ? ? ?1400MHz。

? ? ? ?頻率的倒數或頻率分之一 = 周期

? ? ? ?主頻的倒數 = 時鐘周期

? ? ? ? ?3、內存容量

? ? ? ? ? ? ? ?——計算機可存儲信息的多少,通常以字節為計量單位。一般用KB,MB,GB,TB,PB

? ? ? ? ? ? ? ? ? ? ? 為單位。

? ? ? ? ? ? ? 1KB=1024B?

? ? ? ? ? ? ? 1MB=1024KB

? ? ? ? ? ? ? 1GB=1024MB

? ? ? ? ? ? ? 容量越大儲存的程序和數據越多,處理能力也就越強。

4、運算速度

? ? ?運算速度的一種表示方式是MIPS(millions of instructions per second ),即每秒百

? ? ?萬條指令,它主要是對整數運算而言。對于浮點運算,一般使用MFLOPS(million

? ? ?floating point operations per second)表示,即每秒百萬次浮點運算。

第二章:8086微處理器及其系統

1.?8086微處理器(CPU)

流水線技術:

計算機中的流水線是把一個重復的過程分解為若干個子過程,每個子過程與其他子過程

并行進行。由于這種工作方式與工廠中的生產流水線十分相似, 因此稱為流水線技術從

本質上講,流水線技術是一種時間并行技術。


8086/8088微處理器概述:

? ? ? 8086 CPU是Intel系列的16位微處理器,它有16位數據總線和20位地址總線,所以可尋

? ? ? 址的地址空間是:2的20次方B=1MB

??????8088 CPU準16位微處理器,它的內部寄存器、內部運算部件以及內部操作都是按16

? ? ? 位設計的,但對外的數據總線只有8位,在處理一個16位數據時,8088需要兩步操作,

? ? ? 因而稱8088是準16位微處理器。


一、8086CPU的編程結構

? ? ? ?從程序員的角度看,8086CPU分為兩部分:

? ? ? ?執行部件(execution unit,EU)? ? ? ??總線接口部件(bus interface unit,BIU)

? ? ? ?執行部件:完成功能(運算器)? ? ? ? ? ? 總線接口部件:與存儲器交互(地址)

?

? ? ? ?1.? 執行部件(EU)

? ? 功能:執行指令

? ? 組成:① 4個通用寄存器(存放數據的),即AX、BX、CX、DX;(都是16位)

? ? ? ? ? ? ? ? ? ?4個專用寄存器(某些情況下放地址),即

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 基址指針寄存器 BP(base pointer)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 堆棧指針寄存器 SP(stack pointer)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 源變址寄存器 SI(source index)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 目的變址寄存器DI(destination index)

? ? ? ? ? ? ?? ②標志寄存器FR(或FLAGS,表示運算結果狀態);

? ? ? ? ? ? ? ?③算術邏輯單元ALU(arithmetic logic unit)。

? ? ? ? ? ? ? ?④內部控制邏輯

? ? ? ?? ? (1)內部寄存器組

? ? ? ? ? ? ? ? ?? ?①數據寄存器: 可用來存放16位的數據或地址。又可分為8個8位寄存器,即:

? ? ? ? ? ? ? ? ? ? ? ??數據寄存器特有的習慣用法:

? ? ? ? ? ? ? ? ? ? ? ? AX:累加器(數據專用寄存器)。所有I/O指令都通過AX或AL與接口傳送信息

? ? ? ? ? ? ? ? ? ? ? ? ,中間運算結果也多放于AX中。

? ? ? ? ? ? ? ? ? ? ? ? BX:基址寄存器(可以放地址)。在間接尋址中用于存放基地址。

? ? ? ? ? ? ? ? ? ? ? ? CX:計數寄存器可以用作數據寄存器,在字符串操作、循環操作和移位

? ? ? ? ? ? ? ? ? ? ? ? 操作時用作計數器,存放計數值。

? ? ? ? ? ? ? ? ? ? ? ? DX:數據寄存器(IO間接寄存器/AX備胎)。在間接尋址的I/O指令中存放I/O

? ? ? ? ? ? ? ? ? ? ? ? 端口地址;在32位乘除法運算時,存放高16位數。

②指針和變址寄存器:4個16位寄存器,主要用來存放操作數的偏移地址

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (即操作數的段內地址)。

? ? SP:堆棧指針寄存器(純指針,純指示位置),在堆棧操作中存放棧頂的偏移

? ? ? ? ? ? 地址。

? ? BP:基址指針寄存器(也可以取數),常用于在訪問內存時存放內存單元的偏

? ? ? ? ? ? ?移地址,還用作堆棧區的基地址寄存器。

? ? ? ? ? ? ? ? ? ? ?? ?SI:源變址寄存器(也可以取數),主要用于存放地址,在字符串操作中存放源

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?操作數的偏移地址。

? ? ? ? ? ? ? ? ? ? ? ? DI:目的變址寄存器(也可以取數),主要用于存放地址,在字符串操作中存放

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?目的操作數的偏移地址。

? ? ? ? ? ? ? ? ? ? ? ? 注意BX與BP在應用上的區別:

1. 作為通用寄存器,二者均可用于存放數據
2. 作為基址寄存器,用BX表示所尋找的數據在 數據段; 用BP則表示數據
堆棧段
? ? ? ? ? ? ? ? ? ? ? ? 變址寄存器常用于指令的間接尋址或變址尋址。
? ? ? ? ? ? ? ? ? ? ? ? 在串操作中變址寄存器內存放的地址在數據傳送完成后,具有自動修改的功
能。例如,傳送1字節數據后地址自動加1,為下次傳送做好準備,變址寄存? ?
器因此得名。
通過地址取數據只能用BX,BP,SI,DI
? ? ? ? ? ?(2)算術邏輯單元(ALU)及標志寄存器(FR)

? ? ? ? ? ? ? ? ? ?① 算術邏輯運算單元ALU:

? ? ? ? ? ? ? ? ? ? ? ?可完成16位或8位的算術邏輯運算,運算結果通過內部總線送到通用寄存器,

? ? ? ? ? ? ? ? ? ? ? ?或者送往BIU的內部寄存器中,等待寫入存儲器。ALU運算后的結果特征(有?

? ? ? ? ? ? ? ? ? ? ? ?無進位,溢出等)置入標志寄存器FLAGS中保存。

? ? ? ? ? ? ? ?? ? ②?標志寄存器FR(FLAGS):

? ? ? ? ? ? ? ? ? ? ? ?16位寄存器,用來存放運算結果的特征和控制標志。

? ? ? ? ? ? ? ? ? ? ? ?根據功能,8086的標志可以分為兩類:

? ? ? ? ? ? ? ? ? ? ? ? ? ?狀態標志——6個,用來表示運算結果的特征。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?包括CF、PF、AF、ZF、SF和OF

? ? ? ? ? ? ? ? ? ? ? ? ?? 控制標志——3個,用來控制CPU的操作。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 包括IF、DF和TF。

? ? ? ? ? ? ? ? ? ? ? ?? ? 各標志位的作用說明如圖:

? ? ? ? ? ? ? ? ? ? (1)CF(Carry Flag) 進位標志位

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CF=1,表示本次運算中最高位(第7位或第15位)有進位(加法運算時)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?或有借位(減法運算時);否則CF=0。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?進行二個無符號數加法或減法運算后,如果CF=1,表示運算的結果超出

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?了該字長能夠表示的數據范圍。例如,執行8位數據運算后,CF=1表示加

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?法結果超過了255,或者是減法得到的差小于零。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?只針對無符號運算,進行有符號數運算時CF對運算結果沒有直接意義。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?注意:FR(FLAGS)只有一組,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如果第一次運算后CF=1,第二次運算后CF=0,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 那么后面的運算會把前面的運算覆蓋

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 例如:80H+80H=00H? ?這時候CF=1

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?00H+00H=00H? ?這時候CF=0

? ? ?(2)PF(Parity Flag) 奇偶標志位

? ? ? ? ? ? ??PF=1,表示本次運算結果的低八位中有偶數個“1”

? ? ? ? ? ? ? PF=0,表示本次運算結果的低八位中有奇數個“1”

? ? ? ? ? ? ? PF可以用來進行奇偶校驗,或用來生成奇偶校驗位。

? ? ?(3)AF(Auxiliary Carry Flag) 輔助進位標志位??????

? ?? ? ? ??? ?AF=1,表示運算結果中低4位向高4位有進位(加法運算時)或有借位

? ? ? ? ? ?(減法運算時),否則AF=0。

? ? ?(4)ZF(Zero Flag) 零標志位

? ? ? ? ? ? ??ZF=1,表示運算結果為0(各位全為0),否則ZF=0。

? ? ? ? ? ? ? ? ? ? ?(5)SF(Sign Flag) 符號標志位

? ? ? ? ? ? ? ? ? ? ? ? ????? SF=1,表示運算結果的最高位(第7位或第15位)為1,否則SF=0。

? ? ? ? ? ? ? ? ? ?? (6)OF(Overflow Flag) 溢出標志位

??? ? ? ? ? ? ? ? ? ? ? ? ? ? OF=1 表示二個用補碼表示的有符號數的運算結果超出了該字長所能表

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 示的范圍,即產生溢出;否則OF=0。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 例如,進行8位運算時,OF=1表示運算結果大于+127 或小于-128,此

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 時不能得到正確的運算結果。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OF對無符號數的運算結果沒有意義。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如何判斷溢出:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 根據最高位的進位與次高位的進位是否相同來確定。若兩者不相同則

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OF=1(表示有溢出),否則 OF=0(表示無溢出)

? ? ? ? ? ? ?(7)IF(Interrupt Flag) 中斷允許標志位

???? ? ? ? ? ? ? ? ? ?IF=1,表示允許CPU響應可屏蔽中斷。IF可通過STI指令置位(置1),

? ? ? ? ? ? ? ? ? ? ? 也可通過CLI指令復位(清零)。

? ? ? ? ? ? ?(8)DF(Direction Flag) 方向標志位

? ? ? ? ? ? ? ? ? ??在串操作指令中,若DF=0,表示串操作指令執行后地址指針自動增量,

? ? ? ? ? ? ? ? ? ? 串操作由低地址向高地址進行;DF=1,表示地址指針自動減量,串操作

? ? ? ? ? ? ? ? ? ? 由高地址向低地址進行。DF可通過STD指令置位,也可通過CLD指令復

? ? ? ? ? ? ? ? ? ? 位。

? ? ? ? ??? ?(9)TF(Trap Flag) 單步標志位(陷阱標志位)

? ? ? ? ? ? ? ? ? ?? TF=1,控制CPU進入單步工作方式。在這種工作方式下,CPU每執行完

? ? ? ? ? ? ? ? ? ? ?一條指令就會自動產生一次內部中斷,這在程序調試過程中很有用。

? ? ? ? ? ? ? ?注意:如果是有符號數就只看OF不看CF,如果是無符號數只看CF不看OF

? ?(3)內部控制邏輯電路

? ? ? ? ? ? 主要功能:從指令隊列緩沖器中取出指令,對指令進行譯碼,并產生各種控制

? ? ? ? ? ? 信號,控制各部件的協同工作以完成指令的執行過程。

2.? 總線接口部件 BIU(與外部I/O和內存打交道的)

? ? ? ? ? ? ?功能:形成訪問存儲器的物理地址;

? ? ? ? ? ? ? ? ? ? ? ?訪問存儲器取得指令并暫存到指令隊列中等待執行;????

? ? ? ? ? ? ? ?訪問存儲器或I/O端口以讀取操作數參與EU運算,或存放運算結果等。?

? ? ? ? ? ? ?組成:① 4個段地址寄存器(CS、DS、ES、SS)

? ? ? ? ? ? ? ? ? ? ? ? ②16位的指令指針寄存器IP(Instruction Pointer)

? ? ? ? ? ? ? ? ? ? ? ? ③ 20位的地址加法器

? ? ? ? ? ? ? ? ? ? ? ? ④?6字節的指令隊列緩沖器

? ? ? ? ? ? ? ? ? ? ? ? ⑤ 總線控制邏輯

? ? ? ? ? ?(1)段地址寄存器(CS, DS, SS, ES)

? ? ? ? ? ? ? ? ? ? 存儲器的分段

? ? ? ? ? ? ? ? ? ? 8086可尋址的存儲空間為1MB,有20位的地址線,而內部的寄存器是16位,

? ? ? ? ? ? ? ? ? ? 只能尋址64KB。所以8086/8088系統采用了地址分段的方法,將1M存儲空

? ? ? ? ? ? ? ? ? ? 間分成若干塊,稱為“邏輯段”,每個段開始地址為16整數倍,每個邏輯段容

? ? ? ? ? ? ? ? ? ? 量≤64KB,存放一種類型的數據或者程序。因此1M的存儲空間可分成16個邏

? ? ? ? ? ? ? ? ? ? 輯段(0~15)。在段內尋址仍采用傳統的16位地址尋址方法。

? ? ? ? ? ? ? ? ? ? 在8086存儲空間中,把16字節的存儲空間稱作一節(paragraph)。要求各個邏

? ? ? ? ? ? ? ? ? ? 輯段從節的整數邊界開始,即段首地址低4位應該是“0”,把段首地址的高16位

? ? ? ? ? ? ? ? ? ? 稱為“段基址”,存放在段寄存器DS或CS或SS或ES中。

? ? ? ? ? ? ? ? ? ? 允許段在整個存儲空間浮動,即段與段之間可以部分重疊、完全重疊、連續

? ? ? ? ? ? ? ? ? ? 排列。在整個存儲空間中可設置若干個邏輯段。

? ? ? ? ? ? ? ? ? ? 對于任何一個物理地址,可以惟一地被包含在一個邏輯段中,也可包含在多

? ? ? ? ? ? ? ? ? ? 個相互重疊的邏輯段中,只要有段地址和段內偏移地址就可以訪問到這個物

? ? ? ? ? ? ? ? ? ? 理地址所對應的存儲空間。

? ? ? ? ? ? ? ? ? ? 段空間范圍:? ?因為兩個重疊的段空間(極度重疊時)最少相差10H

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?例如:00010H和00020H? ? 00020H-00010H=10H=16

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?所以?16B<=段空間<=64KB

??? ? ? ? ? ? ? ? ? 段可分為代碼段,數據段,附加段,堆棧段。用于存放段基址有 4個16位段寄

? ? ? ? ? ? ? ? ? ? 存器,代碼段寄存器CS數據段寄存器DS附加段寄存器ES堆棧段寄存器

? ? ? ? ? ? ? ? ? ? SS

? ? ? ? ? ? ? ? ? ? 代碼段:存放程序代碼,程序代碼超過64K時,需要分成幾個段存放。CS中存

? ? ? ? ? ? ? ? ? ? 放的是現在正在執行的程序段的段基址。

? ? ? ? ? ? ? ? ? ? 數據段:用于存放當前使用的數據。需要第二個數據段時可以使用附加段。

? ? ? ? ? ? ? ? ? ? 堆棧段:是內存中的一塊存儲區,用來存放專用數據。如調用子程序時的入口

? ? ? ? ? ? ? ? ? ? 參數,返回地址等,這些數據都按照“后進先出”的規則進行存取。SS存放堆棧

? ? ? ? ? ? ? ? ? ? 段的段基址,SP存放當前堆棧棧頂的偏移地址。數據進出堆棧要使用專門的堆

? ? ? ? ? ? ? ? ? ? 棧操作指令,SP的值在執行堆棧操作指令時根據規則自動地進行修改。

? ? ? ? ? ? ? ? ? ? 編程時,程序和各種不同類型的數據分別存放在不同的邏輯段中,它們的“段基

? ? ? ? ? ? ? ? ? ? 址”存放在“段寄存器”中,段內的偏移地址存放在指針寄存器或變址寄存器中。

? ? ? ? ? ? ? ? ? ? ?段基址表示一個段的起始地址的高16位。偏移地址表示段內的一個單元距離

? ? ? ? ? ? ? ? ? ? ?段開始位置的距離,因此,偏移地址也稱為段內地址。 例如:2345H:1100H

? ? ? ? ? ? ? ? ? ? ?表示段基址為2345H(段的起始地址是23450H),段內偏移地址為1100H的存

? ? ? ? ? ? ? ? ? ? ?儲單元地址。

? ? ? ? ? ? ? ? ? ? ?注意:匯編程序在匯編時給出一個隱含的地址計數器,是地址計數器的

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 值,也就是當前所使用的存儲單元的偏移地址

例:
已知CS=1055H,DS=250AH,ES=2EF0H,SS=8FF0H,

? ? ? ? ? ? ? ? ? ? ? ? ?畫出各段在內存中的分布、段首地址

? ? ? ? ?(2)地址加法器

? ? ? ? ? ? ? ? ? ?功能:完成邏輯地址(段地址:偏移地址)向物理地址的變換。

? ? ? ? ? ? ? ? ? ?物理地址:訪問存儲器的實際地址,用20位二進制表示。

? ? ? ? ? ? ? ? ? ?方法:物理地址=段基址×16 (即左移4位)+ 偏移地址

? ? ? ? ? 例:

? ? ? ? ? ?? ? 邏輯地址2345H:1100H對應的物理地址是24550H。

? ? ? ? ? ? ? ?23450H+1100H =24550H。

? ? ? ? ? ? ? ?反之,物理地址24550H,它對應的邏輯地址可以是2455H:0000H,也可以

? ? ? ? ? ? ? ?是2400H:0550H等。

? ? ? ? ? ? ? ?所以一個存儲單元的物理地址是惟一的,而它對應的邏輯地址是不惟一的。

? ? ? ? ? ? (3)? 指令指針寄存器IP——? 16位(純指針)

? ? ? ? ? ? ? ? ? 功能:用來存放將要執行的下一條指令在代碼段中的偏移地址。在程序運行過

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?程中,BIU自動修改IP中的內容,使它始終指向將要執行的下一條指令。

? ? ? ? ? ? ? ? ? 注意:程序不能直接訪問IP,但是可通過某些指令修改IP的內容。例如, 執行轉

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?移指令時,會將轉移的目標地址送入IP中,以實現程序的轉移。

? ? ? ? ? ? (4) 指令隊列緩沖器——6字節

????? ? ? ? ? ? ?BIU從存儲器中讀出指令送入6字節的指令隊列。一旦指令隊列中空出2個字節,

? ? ? ? ? ? ? ? ?BIU將自動進行讀指令的操作以填滿指令隊列。只要收到EU送來的操作數地址,

? ? ? ? ? ? ? ? ?BIU將立即形成這個操作數的物理地址,完成讀/寫操作。遇到轉移類指令,BIU

? ? ? ? ? ? ? ? ?將指令隊列中剩余的指令作廢,重新從存儲器新的地址單元中取指令并送入指令

? ? ? ? ? ? ? ? ?隊列。一般情況下應保證指令隊列中填滿指令,使得EU可以不斷地得到等待執

? ? ? ? ? ? ? ? ?行的指令。

? ? ? ? ? ? (5) 總線控制邏輯

? ? ? ? ? ? ? ? ?是將CPU的內部總線與CPU引腳所連接的外部總線相連,是CPU與外部交換信息

? ? ? ? ? ? ? ?(數據、地址、狀態、控制信息)的必經之路,包括16條數據線、20條地址線和

? ? ? ? ? ? ? ? ?若干條控制信號線。

? ? ? ? 3.? 總線接口部件和執行部件的管理

? ? ? ? ? ? ?當8086指令隊列中有2字節空閑(8088有一字節空閑)時,總線接口部件就自動將

? ? ? ? ? ? ?指令從內存中預取到指令隊列緩沖器中。

? ? ? ? ? ? ?每當EU部件要執行一條指令時,它就從指令隊列頭部取出指令,后續指令自動向

? ? ? ? ? ? ?前推進。EU要花幾個時鐘周期執行指令,指令執行中若需要訪問內存或I/O設備,

? ? ? ? ? ? ?EU就向BIU申請總線周期,若BIU總線空閑,則立即響應,若BIU正在取一條指令,

? ? ? ? ? ? ?則待取指令操作完成后再響應EU的總線請求。

?? ? ? ? ? ? 當指令隊列已滿,EU又沒有申請總線時,則總線空閑。遇到轉移、調用及返回指

? ? ? ? ? ? ?令時,原先預取到指令隊列中的指令已不再有用,BIU就自動清除指令隊列中已有

? ? ? ? ? ? ?內容,從轉移、調用或返回的新地址開始,重新從內存中預讀取指令并填充指令

? ? ? ? ? ? ?隊列。


二、8086CPU引腳的功能:

? ? ? ?8086 CPU是十六位的微處理器,它向外的信號應包含16條數據線,20條地址線,再

? ? ? ?加上其他一些必要的控制信號。為了減少芯片引腳數量,對部分引腳采用了分時復用

? ? ? ?的方式,構成40條引腳的雙列直插式封裝。

? ? ? ?分時復用——就是在同一根傳輸線上,在不同時間傳送不同的信息。

? ? ? ?分時復用目的:減少引腳

? ? ? ?8086/8088依靠分時復用技術,用40個引腳實現了眾多數據、地址、控制信息的傳送。

? ? ? ?1. 8086總線周期

? ? ? ? ? ?時鐘周期: CPU的一切操作都是在系統主時鐘CLK的控制下按節拍有序地進行的。

? ? ? ? ? ?系統主時鐘一個周期信號所持續的時間稱為時鐘周期(T),大小等于頻率的倒數,

? ? ? ? ? ?是CPU的基本時間計量單位。?

? ? ? ? ? ?總線周期:CPU通過外部總線對存儲器或I/O端口進行一次讀/寫操作的過程稱為總

? ? ? ? ? ?線周期。為完成對存儲器或I/O端口的一次訪問,CPU需要先后發出存儲器或I/O端

? ? ? ? ? ?口地址,發出讀或者寫操作命令,進行數據的傳輸。以上的每一個操作都需要延續

? ? ? ? ? ?一個或幾個時鐘周期。所以,一個總線周期由若干個(>=4個)時鐘周期(T)組成。?

? ? ? ?? ? ?T1狀態:CPU向多路復用總線上發送地址信息(A19~A0)指出要尋址的內存單元

? ? ? ? ? ? 地址或I/O端口地址。這期間CPU還要送出地址鎖存信號ALE(正向脈沖),在ALE

? ? ? ? ? ? 的下降沿將內存單元地址或I/O端口地址存入地址鎖存器。

? ? ? ? ? ? T2狀態:CPU從總線上撤銷地址,使總線低16位呈現高阻狀態,為數據傳輸作準

? ? ? ? ? ? 備。總線高4位(A19~A16)輸出總線周期的狀態信息,用以表示中斷允許狀態及

? ? ? ? ? ? 正在使用的段寄存器名等。

? ? ? ? ? ? ?T3狀態:A19~A16上狀態信息不變,總線低16位上出現CPU要寫出的數據或準備

? ? ? ? ? ? ?讀入的數據。若外設或內存來不及與總線交換數據,以使在T4狀態下結束該總線周

? ? ? ? ? ? ?期,則應通過CPU的READY信號,在T3前沿(下降沿)之前向CPU申請插入等待

? ? ? ? ? ? ?狀態TW。在T3及TW的前沿查詢READY線,查到為高電平則結束等待狀態,進入

? ? ? ? ? ? ?下一狀態。否則繼續插入等待狀態。

? ? ? ? ? ? ?注意:? 查詢READY信號的次數永遠比插入Tw的次數多一次。

? ? ? ? ? ? ?T4狀態:總線周期結束,若為總線讀周期則在T4前沿將數據讀入CPU。

? ? ? ? ? ? ?TI狀態:總線空閑周期。

? ? ? ? ? ? ?基本總線周期是4個時鐘周期

? ? ? ??2.? 8086 CPU的引腳及功能??

? ? ? ? ? ???各種線的實際形式,和外界交換信息? ? ?????

? ? ? ? ? ? ?ALE:高電平有效(工作時輸出1,閑時輸出0)

? ? ? ? ? ? ?RD(上面加一橫線):低電平有效(工作時輸出0,閑時輸出1)??

? ? ? ? ? ? ? 8086/8088 CPU有兩種不同的工作模式(最小模式和最大模式),8條引腳(24~

? ? ? ? ? ? ? 31)在兩種工作模式中具有不同的功能。引腳圖括號中是最大模式下被重新定義的

? ? ? ? ? ? ? 控制信號。

? ? ? ? ? ? ? 引腳信號的傳輸有以下幾種類型:

? ? ? ? ? ? ? ? ? * 輸出:信號從CPU向外部傳送;

? ? ? ? ? ? ? ? ? * 輸入:信號從外部送入CPU;

? ? ? ? ? ? ? ? ? * 雙向:信號有時從外部送入CPU,有時從CPU向外部傳送(數據線是雙向的)

? ? ? ? ? ? ? ? ? * 三態:除了高電平、低電平兩種狀態之外,CPU內部還可以通過一個大的電阻

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?阻斷內外信號的傳送,CPU內部的狀態與外部相互隔離,稱為“懸浮態”。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?高電平(1)? ? 低電平(0)

2.?8086的存儲器及I/O組織?

一、8086系統的存儲器組織
? ? ? ?1.? 8086系統的存儲器的結構?

? ? ? ? ? ? 一般情況下存儲器都是8位數據線

? ? ? ? ? ? 8086 因為有16條數據線所以支持一次性讀寫一個字或字節

? ? ? ? ? ? 數據總線的低8位 總是出現偶地址單元的數據
? ? ? ? ? ? 數據總線的高8位 總是出現奇地址單元的數據

? ? ? ? ? ?引腳:

? ? ? ? ? ? ? ?BHE(上面有一橫線): 數據總線高八位是否有效引腳? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??對應數據總線高8位D8-D15,對應奇地址數據(有效為0,無效為

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1)

? ? ? ? ? ? ? ?A0:地址線最低位

? ? ? ? ? ? ? ? ? ? ? ?對應數據總線低8位D0-D7,對應偶地址數據(有效為0,無效為1)

? ? ? ? ? ? ? ?誰為0誰有效

? ? ? ? ? ? ? ? ? ?偶地址讀一個字節(1 0)? ? ? ?括號里(奇,偶)

? ? ? ? ? ? ? ? ? ?奇地址讀一個字節(0?1)

? ? ? ? ? ? ? ?? ? 偶地址讀一個字(0?0)

? ? ? ? ? ? ? ? ? ?奇地址讀一個字:? (1)先讀奇字節(0 1)? ? (2)后讀偶字節(1 0)

? ? ? ? ? ?注意:?

? ? ? ? ? ? ? ?從偶地址讀寫一個字要用一個總線周期,所以從偶地址開始的字叫(規格/規范字)

? ? ? ? ? ? ? ?從奇地址讀寫一個字要用兩個總線周期,所以從奇地址開始的字叫(非規格/規范字)

? ? ? ? ? ? 關于幾種讀寫情況的說明:

? ? ? ? 2.? 8086系統存儲器的地址

? ? ? ? ? ? (1)物理地址的計算公式:

? ? ? ? ? ? ? ?物理地址=段地址×16+偏移地址。段地址由段寄存器提供,偏移地址由IP、SP、

? ? ? ? ? ? ? ?BP、SI、DI等寄存器或存儲器提供,也可通過計算而得。不同的指令有不同的組

? ? ? ? ? ? ? ?合方式。

? ? ? ? ??? (2)? 段地址的引入,為程序在內存中浮動創造了條件,一般用戶程序只涉及偏移地

? ? ? ? ? ? ? ? ? 址。段地址在程序裝入內存時由操作系統分配。所以一個程序可在內存中任何一

? ? ? ? ? ? ? ? ? 個邏輯段(64KB空間)中運行。

? ? ? ? ? ? (3) 同一物理地址可以有不同的段地址和偏移地址表示。

? ? ? ? ? ? 例如: CS=2000H? IP=1000H? 物理地址=21000H

? ? ? ? ? ? ? ? ? ? ? ? CS=2100H? IP=0000H? 物理地址=21000H

? ? ? ?3.? 8086系統內存地址的一些專用區域

? ? ? ? ? ? 00000H~003FFH? 1KB空間用于存放中斷向量表,可存放256個中斷服務程序的入口

? ? ? ? ? ? 地址,每個地址占4字節。

? ? ? ? ? ? B0000~B0FFFH 4KB為單色顯示器顯示緩沖區,存放屏幕當前顯示字符的ASCII

? ? ? ? ? ? 碼。

? ? ? ? ? ? B8000~BBFFFH 16KB彩色顯示器顯示緩沖區,存放當前屏幕像素代碼。

? ? ? ? ? ? FFFF0H 起動地址,一般用來存放一條無條件轉移指令,轉到系統初始化程序。

? ? ? ? ? ? FFFF0H? 是8086重新上電(復位)后第一條指令地址,因為重新上電或復位后CS

? ? ? ? ? ? ? ? ? ? ? ? ? ? =0FFFFH? IP=0000H? ?代碼從CS*16+IP=0FFFF0H開始執行


二、8086 I/O組織

???????8086系統有專用的輸入(IN)、輸出(OUT)指令,用于外設端口(即外設接口中的內

? ? ? ?部寄存器)的尋址。

? ? ? ?I/O端口與內存分別獨立編址。I/O端口使用16位地址A15~A0,I/O端口地址范圍為

? ? ? ?0000H~FFFFH,可尋址空間為64KB

? ? ? ?在以8086為CPU的PC/XT微機中,只使用了10位有效端口地址A9~A0,共1KB空間。

? ??? ?其中A9用于指明外設端口是否在系統板上。A9=0為系統板上512個端口,A9=1是I/O

? ? ? ?通道上的512個端口。

?3.?8086系統配置

一、最小模式和最大模式的概念

???????8086/8088 CPU為適應不同的應用環境,8086可工作于兩種工作模式:最大模式和最

? ? ? ?小模式。????

???????最小模式:是指系統中只有一個8086/8088處理器,所有的總線控制信號都由8086/80

? ? ? ?88 CPU直接產生,構成系統所需的總線控制邏輯部件最少,最小模式因此得名。最小

? ? ? ?模式也稱單處理器模式。???

? ? ? ?最大模式:系統內可以有一個以上的處理器,除了8086/8088作為“中央處理器”之外,

? ? ? ?還可以配置用于數值計算的8087(數值協處理器)和用于I/O管理的8089(I/O協處理器)

? ? ? ?等。各個處理器發往總線的命令統一送往“總線控制器”,由它“仲裁”后發出。

? ? ? ?兩種工作模式由MN/MX(MX上面有一橫線)引腳決定:

? ? ? ?接高電平(+5v),CPU工作在最小模式;

? ? ? ?接低電平(接地),CPU工作在最大模式。

二、最小模式系統

? ? ? ?1.? 典型配置: 8086CPU

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1片時鐘發生器8284

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3片地址鎖存器8282

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2片總線驅動器8286(總線數據收發器)

? ? ? ? ? ? CPU及其外圍芯片合稱為CPU子系統。

? ? ? ? ? ? 外圍芯片的作用是:

? ? ? ? ? (1)為CPU工作提供條件:提供適當的時鐘信號,對外界輸入的控制/聯絡信號進

? ? ? ? ? ? ? ? ? ?行同步處理;

? ? ? ? ? (2)分離CPU輸出的地址/數據分時復用信號,得到獨立的地址總線和數據總線信

? ? ? ? ? ? ? ? ? ?號,同時還增強它們的驅動能力;

? ? ? ? ? (3)對CPU輸出的控制信號進行組合,產生穩定可靠、便于使用的系統總線信號。

? ? ? ?2.時鐘發生器8284與8086的連接

? ? ? ? ? ? 8284通過外接晶振芯片產生時鐘信號,并對這個信號3分頻,產生占空比為1/3的時

? ? ? ? ? ? 鐘信號CLK送往8086 CPU。8284還對外部輸入的RESET和READY信號進行同步,

? ? ? ?? ? ?產生與CLK同步的復位信號RESET和準備就緒信號READY送往8086。

? ? ?3.地址鎖存器8282與8086的連接

? ? ? ? ? 地址鎖存器用來鎖存8086輸出的地址信號。

? ? ? ? ? 8282是一個8位鎖存器,STB是它的數據鎖存/選通信號。STB為高電平時,DI7~DI0

? ? ? ? ? 上輸入的信號進入鎖存器;STB由高變低出現下降沿時,輸入數據被鎖定,鎖存器的

? ? ? ? ? 狀態不再改變。8282具有三態輸出功能, OE是數據輸出允許端,它為低電平時,鎖

? ? ? ? ? 存器的內容通過內部的三態緩沖器從引腳DO7~DO0輸出。

? ? ? ? ??

? ? ? ? ? ?圖中,8086的ALE與8282的STB相連。這樣,8086在它的分時引腳AD15~AD0,

? ? ? ? ? ?A19/S6~A16/S3上輸出地址信號時,20位地址被三片8282鎖存。8282的輸出成為

? ? ? ? ? ?系統地址總線。在8086訪問存儲器/IO設備的整個周期里,8282都會穩定地輸出20

? ? ? ? ? ?位地址信號

? ? ? ? ? ?在最小模式下,8282還同時鎖存了8086輸出的控制信號并送往系統總線。

8282也可以用其他具有三態輸出功能的鎖存器代替。
? ? ?4.? 總線驅動器8286與8086的連接

? ? ? ? ? 作用:總線數據收發器用來對CPU 與系統數據總線的連接進行控制,同時它還有增

? ? ? ? ? ? ? ? ? ? ?加系統數據總線驅動能力的作用。

? ? ? ? ? 8286是一種三態輸出的8位雙向總線收發器/驅動器,具有很強的總線驅動能力。它

? ? ? ? ? 有二組8位雙向的輸入/輸出數據線A7~A0和B7~B0。

? ? ? ? ? 8286有二個控制信號:數據傳送方向控制信號T,輸出允許信號OE(低電平有效)

? ? ? ? ? 當OE=1時,緩沖器呈高阻狀態,兩個方向都不能傳送數據。

? ? ? ? ? 當OE=0,T=1時,A7~A0為輸入端,B7~B0為輸出端,實現A 到B的傳送;

? ? ? ? ? 當OE=0,T=0時,A7~A0為輸出端,B7~B0為輸入端,實現B到A的傳送。

? ? ? ? ?? 8286用作數據總線驅動器時,T與8086數據收發信號相連,用于控制數據傳送方向;

? ? ? ? ? ?OE與8086數據允許信號相連,保證只有在CPU需要訪問存儲器或I/O端口時才允許

? ? ? ? ? ?數據通過8286。二片8286的A7~A0與8086的AD15~AD0相連,而二組B7~B0則成

? ? ? ? ? ?為系統數據總線。

?? ? ? ? ? 如果系統規模不大,并且不使用DMA傳輸(這意味著總線永遠由8086獨自控制),
可以不使用總線收發器,將8086的引腳AD15~AD0直接用作系統數據總線。

三、最小模式下的系統控制信號

? ? ? ?1.讀寫控制信號引腳

? ? ? ?2. 中斷控制信號引腳

? ? ? ?3.DMA控制信號引腳

? ? ? 常用的最小模式控制總線信號歸納如下:

四、最大模式系統

? ? ? ?1. 最大模式下的有關引腳信號

? ? ? ?2. 8288總線控制器

第三章:指令系統

1.?8086/8088指令系統概述

一、8086/8088指令系統的特點

? ? ? 1.?指令系統的兼容性

? ? ? 2. 指令格式的靈活性

? ? ? 3. 尋址方式的多樣性

? ? ? 4. 可對多種類型的數據進行處理

? ? ? 5. 可構成多處理機系統

二、指令格式

? ? ? ?指令:指令是指示計算機完成特定操作的命令

? ? ? ?指令系統:指令系統是計算機能夠執行全部命令的集合,它取決于計算機的硬件設計。? ? ? ? ? ? ? ? ? ? ? ? ? ?指令系統因機而異,沒有通用性。

? ? ? ?指令中應包含的信息:執行的運算? ??運算結果的去向? ? 運算數據的來源

? ? ? ?指令格式:? ?操作碼? ?[目的操作數],[源操作數]

? ? ? ? ? ? ? ? ? ? ? ? ? ? 操作碼表示:執行何種操作

? ? ? ? ? ? ? ? ? ? ? ? ? ? 源操作數: 指令加工之前的數據

? ? ? ? ? ? ? ? ? ? ? ? ? ??目的操作數:指令加工之后形成的數據

? ? ? ?指令中的操作數表征方法:

? ? ? ? ? ? ? ? ? ? ? ? ? ?表征參加操作的數據本身——>立即數(在存儲器的代碼段)

? ? ? ? ? ? ? ? ? ? ? ? ? ?表征數據存放的地址——>寄存器(cpu內部,例如AX,BX...),存儲器(存放

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?在存儲器中,都帶[ ],[ ]里的是偏移地址)

? ? ? ?操作數類型:

? ? ? ? ? ?1、立即數操作數:

表示參加操作的數據本身,可以是8位或16位

? ? ? ? ? ? ? ? ?例: MOV? AX,1234H? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ?MOV? BL,22H??

立即數 無法作為目標操作數
立即數可以是無符號或帶符號數,其數值應在 可取值范圍

? ?2、寄存器操作數:

? ? ? ? ?表示參加運算的數存放在指令給出的寄存器中,可以是16位或8位。

? ? ? ? ?例:MOV? AX,BX

? ? ? ? ? ? ? ? MOV? DL,CH

? ?3、存儲器操作數:

表示當前參加運算的數存放在存儲器的某一個或某兩個單元中
例:MOV? AX,[1200H]??

? ? ? ? ? ? ? ? MOV? AL, [1200H] ;? ?[ ]里的是偏移地址

? ? ? ? 高高低低原則:

? ? ? ? ? ? ? 高地址存高位
? ? ? ? ? ??? 低地址存低位

? ? ? ? 指令的字長與指令的執行速度:

指令字長由操作碼的長度、操作數地址長度、操作數個數決定
8088/8086CPU采用變字長指令格式
指令的字長影響指令的執行速度???
對不同的操作數,指令執行的時間不同
?寄存器>立即數>存儲器

三、尋址方式

?????? 計算機可以對存儲器、寄存器中的數據進行各種操作,如取數、存數、加運算、減運算

? ? ? ?等,這就需要找到數據的存放地址,再對其中的數據執行相應的操作,最后將運算結果

? ? ? ?送往指定的地址單元或寄存器。指令的尋址方式就是尋找指令操作數所在地址的方式

? ? ? ?以確定數據的來源和去處。熟練地掌握尋址方式對學習指令系統和匯編語言程序設計具

? ? ? ?有重要作用。

? ? ? ?1. 立即尋址

指令操作數部分直接給出指令的操作數,它與指令操作碼相接,順序存放在代碼段
中。立即數有 8位和16位之分。

? ? ? ? ? ?例1 : MOV?? AH,36H? ;? AH<——立即數36H

? ? ? ? ? ? ? ? ? ? ? ?MOV?? CX,2A50H? ;?? CX<——立即數2A50H

? ?? ? ? ?注意:

? ? ? ? ? (1) 立即尋址方式只能用于源操作數,主要用于給寄存器賦值。

? ? ? ? ? (2) 立即尋址方式不執行總線周期,執行速度快。

? ? ? 2. 寄存器尋址

? ? ? ? ? 操作數放在寄存器內,由指令直接給出某個寄存器的名字,以寄存器的內容作為操作

? ? ? ?? ?數。

? ? ? ? ? 寄存器可以是16位的AX、BX、CX、DX、SI、DI、SP、BP寄存器,也可以是8位的

? ? ? ? ? AH、AL、BH、BL、CH、CL、DH、DL寄存器。?

? 例:??? MOV? AX,CX ;? ?AX<-------CX

? ? ? ? ? ? ? ? ? ?? DEC? AL ;? ? AL<-------AL-1

? 注意:

? ?(1)寄存器尋址方式的指令操作在CPU內部執行,不需要執行總線周期,執行速度

? ? ? ? ? ? 快。

? ?(2)寄存器尋址方式既適用于指令的源操作數,也適用于目的操作數,并且可同時

? ? ? ?? ? ?用于源操作數和目的操作數。

? ?? ?3. 直接尋址

操作數在存儲器中,指令中直接給出操作數所在存儲單元的有效地址EA,即段內偏移
地址,表示操作數所在存儲單元距離段首址的字節數。有效地址是一個無符號的16位
二進制數。

? 例:MOV? AH,[2100H]?? ;將DS段中2100H單元的內容送給AH

?????????MOV? AX,[2100H]?? ;將DS段中2100H單元的內容送給AL ;2101H單元的????

???????????????????????????????????????????????內容送給AH。

? ? ? ? ?MOV?? [1000H],AH?? ; DS:1000H←(AH)

? ? ? ? ? DS=3000H? ? ? ? ?MOV? AX,[2000H]

? 注意:

? ?(1) 直接尋址方式的操作數所在存儲單元的段地址一般在數據段寄存器DS中。

? ?(2) 如果操作數在其他段,則需要在指令中用段超越前綴指出相應的段寄存器名。

? ? ? ? ? 例:MOV? AH, ES∶ [2000H]?

???????????????? 將附加段寄存器ES的內容乘16,再加上2000H作為操作數所在存儲單元的地

? ? ? ? ? ? ? ? ?址,取出該存儲單元的內容送到寄存器AH中。

? ? ? 4.? 寄存器間接尋址

操作數在存儲器中,指令中寄存器的內容作為操作數所在存儲單元的有效地址EA
(偏移地址)。寄存器僅限于BX、BP,SI、DI。

? ? ? ? ? ?EA:[SI] [DI] [BX] [BP]

當使用BX、SI、DI時,操作數所在存儲單元的段地址存在數據段寄存器DS中
當使用BP時,操作數所在存儲單元的段地址存在堆棧段寄存器SS中。
MOV?? BX,[SI]? ? ? ? ?

? ? ? ? ? ?例:已知: DS=2100H,DI=2000H

? ? ? ? ? ? ? ? ??指令:? MOV AX,[DI]

? ? ? ? ? ? ? ? ? 解: 物理地址=16×DS+DI=16×2100H+2000H=23000H

? ? ? ? ? ? ? ?? ?指令執行結果是將23000H和23001H單元的內容送入寄存器AX中。

? ? ? ? ? ?注意:

? ? ? ? ? ? ? ? ?1.? 只有SI,DI,BX,BP 可作為間址寄存器。
? ? ? ? ? ? ? ? ?2.? 若操作數所在存儲單元不在數據段DS中,需要在指令中用段超越前綴表明其

? ? ? ? ? ? ? ? ? ? ? 所在段的段名。

? ? ? 5.? 基址尋址

操作數在存儲器內,指令中寄存器 (BX或BP)的內容與指令指定的位移量之和作為操? ? ?作數所在存儲單元的有效地址EA(偏移地址)。? ? ? ?

? ? ? ? ? ?使用BX時,段地址為DS的內容;

? ?使用BP時,段地址為SS的內容。

? ? ? ? ? ?例:

? ? ? ? ? ? ? ?SS=2000H,BP=1000H,COUNT=2000H (16位偏移量)

? ? ? ? ? ? ? ?指令: MOV AX,COUNT[BP]

? ? ? ? ? ? ? ?解:物理地址=16×SS+BP+16位偏移量=20000H+1000H+2000H=23000H

? ? ? ? ? ? ? ?指令執行結果是將23000H和23001H單元的內容送入寄存器AX中。

? ? ? ? ? ? ? MOV?? BL,2[BX]? 或? MOV? BL,[BX+2]? ;(DS:[BX+2])-->BL

? ?? ?6.? 變址尋址

操作數在存儲器內,指令將變址寄存器SI、DI內容與指令指定的位移量之和作為操
作數所在存儲單元的有效地址EA(偏移地址)。段地址規定為DS的內容。

? ? ? ? ? ?例 :DS=3000H,SI=1000H,COUNT=2000H

? ? ? ? ? ? ? ? ? ?指令: MOV AX,COUNT[SI]

? ? ? ? ? ? ? ? ? ?解:物理地址=16×DS+SI+16位偏移量=30000H+1000H+2000H=33000H

? ? ? ? ? ? ? ? ? ?指令執行結果是將33000H和33001H單元的內容送入寄存器AX中。

? ? ? ? ? ?MOV? AX,2[DI];AX← (DS:(DI)+2)

? ? ? ? ? ?MOV? AX,[DI+2];AX← (DS:(DI)+2)

? ? ? ? ? ?MOV? BX,COUNT [SI]

? ? ? 7.? 基址加變址尋址

操作數在存儲器內。指令將基址寄存器BX、BP與變址寄存器SI、DI的內容之和再
加上偏移量(8位或16位),得到操作數所在存儲單元的有效地址EA。? ?

當使用BX時,段寄存器為DS。

???當使用BP時,段寄存器為SS。

? ?注意: BX和BP或SI和DI只能出現一個,

? ? ? ? ? ? 不能同時出現BX和BP或SI和DI,

? ? ? ? ? ? 計算物理地址時段地址寄存器根據基址寄存器來

? ? ? ? ? ?例:已知: DS=2000H,BX=1000H,SI=0500H,MK=1120H

? ? ? ? ? ? ? ?? ?指令: MOV? AX, [MK+BX+SI]

? ? ? ? ? ? ? ? ? 解: 物理地址=20000H+1000H+0500H +1120H=22620H

? ? ? ? ? ? ? ? ? 指令執行結果是將22620H、22621H單元的內容送入寄存器AX中。

? ? ?? ? ? ? MOV? AX,[BX][SI]

? ? ? ? ?8. 字符串尋址

? ? ? ? ? ? ?用于字符串操作指令。規定變址寄存器SI中的內容是源數據串的段內偏移地址,

? ? ? ? ? ? ?而變址寄存器DI中的內容是目標數據串的段內偏移地址。

? ? ? ? ? ? ?源數據串的段地址規定是數據段DS,目標數據串的段地址規定是附加段ES。指令

? ? ? ? ? ? ?執行后SI和DI的內容自動增量(或減量),增(或減)值為1或2。

? ? ? ? ? ? ?例 : MOVSB

? ? ? ? ? ? ?執行后:? [DI]←[SI]???? SI←SI±1???? DI←DI±1

? ? ? ? 9.? I/O端口尋址

? ? ? ? ? ? ?尋找輸入輸出設備的端口地址,可分為直接端口尋址和間接端口尋址。

? ? ? ? ? ? ?直接端口尋址:由指令直接給出I/O設備的端口地址。它規定端口地址為8位,能尋

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 址256 個端口

? ? ? ? ? ? ?間接端口尋址:由DX給出I/O設備的端口地址。由于DX是16位,因此間接端口尋址? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?能尋址多達64K個端口。

? ? ? ? ? ? ?例:IN? AL,20H ;將地址為20H的外設內容讀入AL中

? ? ? ? ? ? ? ? ? ? OUT?? DX,AL;AL中內容輸出給以DX的內容為地址的外設

? ? ? ? 10.? 隱含尋址

? ? ? ? ? ? ? ?指令隱含了的一個或兩個操作數的地址,即操作數在默認的地址中。

? ? ? ? ? ? ? ?例: AAA; 對AL中的內容進行十進制加法調整,并把調整后的結果放入AH和AL

? ? ? ? ? ? ? ? ? ? ? ?中。這條指令的隱含操作數是AH和AL。

2.?8086的指令系統

指令系統包括九大類、133種基本指令,通過尋址方式的變化與數據形式(字節、字型)的組合,可構成上千條指令。指令系統按功能分為數據傳送類、算術運算類、邏輯運算與移位類、串操作類、控制轉移類、處理機控制、輸入輸出、中斷等。


(一).?數據傳送指令

? ? ? 數據傳送類指令實現CPU內部寄存器之間、CPU與存儲器之間、CPU與I/O端口之間的數

? ? ? 據傳送。

? ? ? 1. 通用數據傳送指令

? ? ? ? ? 包括 MOV、進棧、出棧指令、交換指令和換碼指令。? ? ?

? ? ? ? (1)一般數據傳送指令 MOV(8位/16位)

? ? ? ? ? ? ? ? ?格式:MOV??? OP目地操作數,OP源操作數

? ? ? ? ? ? ? ? ?功能:OP源 ——> OP目

? ? ? ? ? ? ? ? ?要求:OP目可以是寄存器(除CS外)、存儲器

? ? ? ? ? ? ? ? ? ? ? ? ? ? OP源可以是寄存器、存儲器和立即數

? ? ? ? ?例:? ? MOV?? AL,BL ;???? BL寄存器的內容送AL

? ? ? ? ? ? ? ? ? ? MOV?? SP,2AC0H ;? 立即數2AC0H送SP

? ? ? ? ? ? ? ? ? ? MOV? [DI],AX ;??? AX中的16位數送DI和DI+1單元

? ? ? ? ? ? ? ? ? ? MOV?? SI,ES:[BP]? ; 附加段中BP所指向的兩個單元的內容送SI寄存器

? ? ? ? ? ? ? ? ? ? MOV?? WORD PTR [SI],6070H? ? ;立即數6070H送到SI字單元。

? ? ? ? ?注意: MOV指令的兩個操作數(源、目的)均可采用不同的尋址方式。

源操作數和目的操作數的類型必須一致(位數必須一樣)
不允許把立即數作目的操作數,也不允許向段寄存器送立即數。
例如: MOV [XX],[XX]? ? ? ? MOV SS,ES
不允許在段寄存器之間、存儲器單元之間傳送數據。
CS、IP寄存器不能用作目的操作數
一般傳送指令不影響標志位。

? ? ? ? ? 例:判斷下列指令正確與否:

? ? ? ? ? ? ? ? ?MOV?? AL,? BL??????????? √

? ? ? ? ? ? ? ? ?MOV??? CX,? BX?????????? √

? ? ? ? ? ? ? ? ?MOV??? BX,? DL?????????? ×?? 類型不一致

? ? ? ? ? ? ? ? ?MOV??? DX,?? 0034H????????? √

? ? ? ? ? ? ? ? ?MOV??? DS,?? 1234H??? ×?? 立即數不能送段寄存器

? ? ? ? ? ? ? ? ?MOV???? ES,?? AX??????????? √

? ? ? ? ? ? ? ? ?MOV???? CS,?? BX???????? ×??? CS不能作目的操作數

? ? ? ? ? ? ? ? ?MOV??? [SI],?? CX????????? √

? ? ? ? ? ? ? ? ?MOV??? [DI],?? [SI]???????? ×?? 不能同時為存儲器操作數

? ? ? ? ? ? ? ? ?MOV??? 2000H,? AX????? ×?? 目的不能為立即數

? ? ? ? ? ? ? ? ?MOV??? DS:[2000H],? AX????? √

(2)堆棧操作指令

? ? ? ? ?堆棧:是按“后進先出”原則工作的一段存儲器區域。

? ? ? ? ?堆棧寄存器SS——段地址

? ? ? ? ?堆棧指針SP——始終當前棧頂所在的存儲單元地址,即最新入棧數據所在的存

? ? ? ? ?儲單元的地址。

?壓棧操作PUSH??? OP

? ? ? ? ?功能:把OP字數據壓入棧中,結果SP-2 ——> SP

? ? ? ? ?原則:高字節壓在高地址,低字節壓在低地址??

? ? ? ? ?執行過程:?? SP←SP-1;??? [SP] ←OPH

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SP←SP-1 ;?? [SP] ←OPL

? ? ? ? ?例:PUSH?? AX

(1)? SP-1 ——> SP,壓AH

? ? ? ? ? ? ? ?(2)??SP-1 ——> SP,壓AL

? ? ? ? ?出棧操作:?POP?? OP

? ? ? ? ?功能:從棧中彈出數據 —> OP,結果SP+2 —> SP

? ? ? ? ?執行過程:? OPL ←[SP];????? SP←SP+1

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?OPH←[SP] ;????? SP←SP+1

? ? ? ? ?例:POP?? DX

(1) 彈出AL —>?DL, SP+1 —> SP
(2) 彈出AH —>?DH, SP+1 —> SP

? ? ? ? 例:將CX的內容壓入堆棧,然后,彈出棧頂至CX中, 已知 (SS)=0200H,(SP)

? ? ? ? ? ? ? ?=0008H,(CX)=12FAH。

注意: 堆棧操作總是按進行的。

壓入指令,SP-2,數據在棧頂。彈出指令正好相反。
操作數可以是存儲器、寄存器或段寄存器操作數( CS不能用于POP ),
不能是立即數。

? ? ? ? ? ? PUSH CS? √????? POP CS ×

? ? ? ? ?? ?PUSH 1200H ×?? POP 2300H ×

這兩條指令主要用來進行現場保護和恢復,以保證子程序調用或中斷程
序的正常返回。

? ? ? ?(3) 數據交換指令(8/16位)

? ? ? ? ? ? ? ?? 格式: XCHG??? OP1,OP2

? ? ? ? ? ? ? ? ?功能:實現OP1和OP2內容的相互交換。

? ? ? ? ? ? ? ? ?操作數:通用寄存器或存儲器,但不能均為內存單元。

? ? ? ? ? ? ? ? ?注意: 段寄存器和IP不能作為交換指令的操作數。

? ? ? ? ? ? ? ? ?例:XCHG??? AX,? BX????????? √

? ? ? ? ? ? ? ? ? ? ? ? XCHG???? BH,? BL???????? √

? ? ? ? ? ? ? ? ? ? ? ? XCHG??? AX,?? 1122H????? ×

? ? ? ? ? ? ? ? ? ? ? ? XCHG???? DS,??? AX????????? ×

? ? ? ? ? ? ? ? ? ?? ? ?XCHG??? [SI],??? BP?????????? √

? ? ? ? ? ? ? ? ? ? ? ? XCHG??? [SI],??? [DI]??????? ×

? ? ? ?(4) 換碼指令(查表指令、翻譯指令)

? ? ? ? ? ? ? ? ?換碼指令是一條完成字節翻譯功能的指令。它可以使累加器中的一個值變換為

? ? ? ? ? ? ? ? ?內存表格中的某一個值,一般用來實現編碼制的轉換。??

? ? ? ? ? ? ? ? 注意:? 1.? 使用前,先建立被轉換代碼(字節型)的數據表。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.? 換碼指令只能使用寄存器BX、AL,不影響標志位。

? ? ? ? ? ? ? ? 例:數據段中存放有一張ASCII碼轉換表,設首地址為2000H,現欲查出表中第9

? ? ? ? ? ? ? ? ? ? ? ?個代碼的ASCII碼(設DS=4000H)。

? ? ? ? ? ? ? ? ? ? ? ?可用如下指令實現:

? ? ? ? ? ? ? ? ? ? ? ?MOV BX,2000H ;BX←表首地址

? ? ? ? ? ? ? ? ? ? ? ?MOV? AL,09H? ;AL←序號

? ? ? ? ? ? ? ? ? ? ? ?XALT????????? ; 查表轉換

? ? ? ? ? ? ? ? ? ? ? ?執行后得到:AL=39H

? ?2. 目標地址傳送指令

? ? ? ?此類指令的功能是將操作數所在存儲器的地址送入目標寄存器。

? ? ? ?注意:OP源必須是存儲器操作數,OP目必須是16位的通用寄存器 。

? ? ? ? ? ? ? ? ? 地址傳送指令不影響狀態標志位。? ??

? ? ?(1)取有效地址(偏移地址)EA指令(去中括號指令)

? ? ? 格式:LEA? OP目, OP源
? ? ? 功能:將源操作數的有效地址EA送到目的操作數。
? ? ??例:? LEA?? AX,[5678H];?AX ← 5678H
? ? ? ? ? ?? ? LEA? BX,[BP+SI];? BX ←BP+SI

? ? ?(2)指針送寄存器和DS指令(不重要)

? ? ? ? ? ? ? 格式:??LDS??? OP目,OP源

? ? ? ? ? ? ? 功能:把OP源指定的4個字節內容取出,低地址的兩字節—>OP目,高地址的兩字

? ? ? ? ? ? ? ? ? ? ? ? ?節——>DS。

? ? ? ? ? ? ? 例:?LDS DI,[2130H];2130H和2131H單元中的內容——>DI? ? ? ? ? ? ? ??

?????????????????2132H和2133H單元中的內容——>DS

? ?

???????? ? ?(3)指針送寄存器和ES指令(不重要)

? ? ? ? ? ? ? 格式:LES? ? OP目,OP源

? ? ? ? ? ? ? 功能:本指令與LDS指令的操作基本相同,所不同的是將OP源4個字節中高地址

? ? ? ? ? ? ? ? ? ? ? ? ?的兩字節——>ES。

? ? ? ? ? ? ? 例:LES DI,[2130H];

? ? ? ? ? ? ? ? ? ? ?2130H和2131H單元中的內容?DI;??????????????

? ? ? ? ? ? ? ? ? ? ?2132H和2133H單元中的內容?ES


(二). 算術運算指令

? ? ? ?8086的算術運算類指令能夠對二進制或十進制(BCD碼)數進行加、減、乘、除運算,

? ? ? ?操作數的數據形式可以是8位或16位的無符號數或帶符號數。

? ? ? ?1.? 加法指令

? ? ? ? ? ? (1) 不帶進位的加法指令:

? ? ?格式:ADD?? OP目, OP源? ;

? ? ?功能:OP目← OP源 + OP目,根據結果設置標志位

? ? ?例:ADD? AL,50H?? ;?? AL+50H——>AL

? ? ? ? ? ? ADD? DI,SI? ;? DI+SI ——>DI

? ? ? ? ? ? ADD? AX,[DI] ; (DI)、(DI+1)內容+AX ——> AX

? ? ? ? ? ? ? ? ? ? ? ??ADD [BX+DI],AX ;(BX+DI)和(BX+DI+1)2個單元的內容+AX,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?結果放在BX+DI和BX+DI+1所指單元?????

? ? ? ? ? ? ? ? ? ? ? ? ADD AX,[BX+2000H] ;BX+2000H 和BX+2001H所指單元內容和AX的內

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?容相加,結果在AX中

? ? ? ? ? ? ? ? ? 注意:兩操作數的類型相同,類型明確,不能同為存儲器操作數?

? ? ? ? ? ? ? ? ? 例:判斷下列指令正確與否

? ? ? ? ? ? ? ? ? ? ? ? ?ADD???? AL,??? BX???????????????? ×

? ? ? ? ? ? ? ? ? ? ? ? ?ADD????? CL,???? CH?????????????? √

? ? ? ? ? ? ? ? ? ? ? ? ?ADD????? AX,??? [BX]????????????? √

? ? ? ? ? ? ? ? ? ? ? ? ?ADD????? [BX],??? [SI]????????????? ×

? ? ? ? ? ? ? ? ? ? ? ? ?ADD????? 1000H,?? AX???????????? ×

? ? ? ? ? ? ? ? ? ? ? ? ?ADD????? [SI],??? BX???????????????? √

? ? ? ? ? ? (2) 進位的加法指令:

? ? ? ? ?格式:ADC?? OP目, OP源 ;

? ? ? ? ?功能:OP目← OP源 + OP目+CF,置標志位? ??CF為前面指令產生的CF

? ? ? ? ? ? ? ? ?說明:主要用于多字節運算(例如16位加16位),多字節運算時低位字節產生的進

? ? ? ? ? ? ? ? ? ? ? ? ? ? 位應加到高位。

? ? ? ? ? ? ? ? ?例:ADC? AX,SI ; AX+SI+CF —> AX

? ? ? ? ? ? ? ? ?例: 兩個雙字(32位)相加。123FAB5H+0ABC212AH

? ? ? ? ?(3)?加1指令

? ? ? ? ? ? ? ? ?格式:INC?? OP????

? ? ? ? ? ? ? ? ?功能:OP←OP+1

? ? ? ? ? ? ? ? ?說明:常用于修改偏移地址和計數次數。操作數可以是8/16位通用寄存器或存

? ? ? ? ? ? ? ? ? ? ? ? ? ? 儲器操作數,不能為立即數。

? ? ? ? ? ? ? ? ? 例:? ?INC? AL ;AL←AL+1

?INC BYTE PTR [BX+DI];[BX+DI]←[BX+DI]+1

? ? ? ? ? ? ? ? ? 例:判斷對錯

? ? ? ? ? ? ? ? ? ? ? ? ?INC??? CL???????? √

? ? ? ? ? ? ? ? ? ? ? ? ?INC?? [DI]? ? ? ? ?×? ? ——>? INC? BYTE? PTR[DI]? √?

? ? ? ? ? ? ? ? ? ? ? ? ?在存儲器單元聲明時需要說明是BYTE還是WORD

? ? ? ? ? ? ? ? ? ? ? ? ?INC?? 2000H?? ×

? ? ? ? ? ? ? ? ? 注意:?① INC指令不影響CF位,影響標志位AF、OF、PF、SF和ZF。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ② 操作數視為無符號數。

? ? ? ? ? ? ?總結:以上三條指令運算結果將影響狀態標志位,但 INC不影響標志CF。

? ? ? ?2.? 減法指令

?(1)不帶借位的減法指令

? ? ? ? ? 格式:SUB??? OP目,OP源

? ? ? ? ? 功能: OP目← OP目-OP源 ,并根據結果設置標志

? ? ? ? ? 例:?SUB?? BX,CX ;?? BX-CX —> BX

? ? ? ? ? ? ? ? ? SUB?? AL,[SI+2];??? AL-(SI+2)單元中的數 —>?AL

? ? ? ? ? ? ? ? ? SUB?? AL,20??? ;? AL-20 —> AL

?(2)帶借位的減法指令

? ? ? ? ? 格式:SBB?? OP目,OP源

? ? ? ??? 功能:OP目← OP目-OP源 -CF,根據結果設置標志

? ? ? ? ? 說明:主要用于多字節或多精度數據相減的運算

? ? ? ? ? 例: SBB?? AX,2030H ;???? AX- 2030H-CF —> AX??????????????????????

? ? ? ? ? ? ? ? ? SBB?? WORD PTR [DI+2],1000H ;將DI+2和DI+3所指兩單元的內

? ? ? ? ? ? ? ??? 容-1000H-CF, 結果存在DI+2和DI+3所指的單元

?(3)減1指令

? ? ? ? ??格式:DEC?? OP??????

? ? ? ? ? 功能:OP←OP-1;根據結果置標志位,不影響CF

? ? ? ? ? 例:DEC?? AX?? ;????? AX-1 —> AX

? ? ? ? ? ? ? ? ?DEC?? BL?? ;??? BL-1 —>?BL

? ? ? ? ? ? ? ? ?DEC? BYTE? PTR [DI+2];? 將DI+2所指單元的內容減1,結果送回此單元? ? ?

? ? ? ? ?(4)取補指令

????? ? ? ? ? ? ? 格式: NEG?? OP??????

? ? ? ? ? ? ? ? ? 功能: 0- OP→ OP,? 將操作數取補后送回原操作數??????????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OP可以是8/16位通用寄存器和存儲器操作數,? 不能為立即數。

? ? ? ? ? ? ? ? ? 例:NEG? AL?????? ;? 0- AL ——>??AL

? ? ? ? ? ? ? ? ? ? ? ? ?MOV? AX,1? ;? AX=0001H????

? ? ? ? ? ? ? ? ? ? ? ? ?NEG? AX???????? ;? AX=0FFFFH

? ? ? ? ? ? ? ? ? 注意:? (1) 對80H或8000H取補時,操作數沒有變化,但OF=1。

? ? ? ? ? ? ? ? ? ? ? ?(2) 對CF影響較特殊,只要操作數不是0,總是使CF=1? ? ? ?

?(5)比較指令

? ? ? ? ??格式:CMP ??OP目,OP源

? ? ? ? ? 功能:OP目-OP源,不回送結果,只根據結果置標志位。??

? ? ? ? ? 例:? CMP ?AX,BX ;AX-BX,根據結果置標志位

? ?CMP?? AL,20H ; AL-20H,根據結果置標志位

? ? ? ? ? 說明:本指令主要通過比較(相減)結果置標志位,表示兩個操作數的關系,

? ? ? ? ? ? ? ? ? ?? 指令執行的結果不影響目標操作數。

? ? ? ? ? 用途:用于比較兩個數的大小,可作為條件轉移指令轉移的條件? ?

? ? ?

? ? 3.?? 乘法指令

? ? ? ? ? (1) 無符號數乘法

? ? ? ? ? ? ? ?格式:MUL?? OP??

? ? ? ? ? ? ? ?功能:AX←AL×OP?????????? 8位數乘法

? ? ? ? ? ? ? ? ? ? ? ? ?(DX高16、AX低16)←AX×OP??? 16位數乘法

? ? ? ? ? (2) 帶符號數乘法

? ? ? ? ? ? ? ?格式: IMUL???? OP?

? ? ? ? ? ? ? ?功能: 操作同上,但是操作數為帶符號數

? ? ? ? ? ?注意:(1)進行字節運算時, OP目必須是AL,乘積在AX中;進行字運算時, OP

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?目必須是AX,乘積在DX、AX中。 源操作數不允許使用立即數尋址方

? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? 式。

? ? ? ? ? ? ? ? ? ? ? (2)運算結果只影響CF、OF,其他的無定義。

? ? ? ? ? ? ? ? ? ? ? (3)對于MUL,若字節型數據相乘之積AH=0或字數據相乘之積DX=0,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?則CF=OF=0,否則CF=OF=1;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?對于IMUL指令,若字節數據相乘之積AH或字數據相乘之積DX的內容

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?是低一半的符號擴展(低八/四位的最高位擴展到了高八/四位的每一位),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?則CF=OF=0,否則CF=OF=1。

? ? ? ? ? ? 例:已知 AL=0FEH,

? ? ? ? ? ? ? ? ? ?視為無符號數為254,視為帶符號數,數值為-2。??

? ? ? ? ? ? ? ? ? ?BH=0AH,視為無符號數為10,視為帶符號數,數值為+10。

? ? ? ? ? ? ? ? ? ?執行指令MUL??? BH? 后 AX=09ECH,CF=OF=1??

? ? ? ? ? ? ? ? ? ?執行指令IMUL? BH? 后 AX=FFECH,CF=OF=0

? ? ? ? ? ? 例:MUL BL? ;AL×BL —> AX中

? ? ? ? ? ? ? ? ? ?MUL CX? ;AX×CX —>?DX AX

? ? ? ? ? ? ? ? ? ?MUL BYTE PTR? [DI];AL × [DI]?—> AX

? ? ? ? ? ? ? ? ? ?IMUL BX? ;AX和BX中的兩個有符號數相乘,結果在DX和AX中

? ? ? ? ? ? 例: 設在M1和M2單元中各有一個16位無符號數,求其乘積,將結果存于從R開始的

? ? ? ? ? ? ? ? ? 字單元中。

? ? ? ? ? ? ? ? ? MOV? AX,M1

? ? ? ? ? ? ? ?? ?MUL? M2

? ? ? ? ? ? ? ? ? MOV? R,AX

? ? ? ? ? ? ? ?? ?MOV? R+2,DX

? ? ? ?4.? 除法指令

? ? ? ? ? ??指令要求被除數是除數的雙倍字長,即當除數是8/16位時,要求被除數是16/32位

? ? ? ? ? ? 的二進制數。

? ? ? ? ? (1)無符號數除法

? ? ? ? ? ? ? ? ? 格式:DIV?? OP

? ? ? ? ? ? ? ??? 功能:?字節除法:AX/OP ——>?AL =商,AH =余數? ? ? 16位/8位

? ? ? ? ? ? ? ? ? ? ? ? ? ? ??字除法: (DX、AX)/OP? ——>?AX =商,DX =余數? ? ? ? ??32位/16位? ? ? ? ??

? ? ? ? ? (2)帶符號數除法

? ? ? ? ? ? ? ? ? ?格式:IDIV???? OP

? ? ? ? ? ? ? ? ? ?功能:操作同DIV,但是操作數為帶符號數

? ? ? ? ? ? ? ? ? 注意: (1) 當除數是字節時,被除數必須放在AX中,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?當除數是字時,被除數必須放在DX,AX中。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2) 商超出規定的范圍時,將產生0號中斷。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (3) IDIV運算結果余數的符號與被除數相同。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (4) 帶符號數除法運算中,當被除數位數不夠時,則需將被除數擴展到

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 所需的位數。( 8086/8088設有帶符號數擴展指令)

? ? ? ? ? ? ? ? ? ?例:? DIV? CL? ;AX/CL,商 —> AL,余數 —> AH

? ? ? ? ? ? ? ? ? ? ? ? ? ? DIV WORD PTR [DI];

? ? ? ? ? ? ? ? ? ? ? ? ? ? DX和AX中32位數除以DI、DI+1所指的16位數,商—>AX,余數——>DX

? ? ? ? ? ? ? ? ? ? ? ? ? ? IDIV? BX?? ;DX、AX/ BX,商—>AX,余數—>DX????????????? ??????????????

? ? ? ? ? ? ? ? ? ? ? ? ? ??IDIV BYTE PTR[DI] ;AX中16位數除以DI所指單元中的8位數,

? ? ? ? ? ? ? ? ? ? ? ? ? ? 商—>AL,余數—>AH

? ??(3)? 符號擴展指令格式:

? ? ? ? ?? 字節擴展指令(8位—>16位)

? ?? ??? ?格式:CBW

? ? ? ? ? 功能:將AL中的數的符號位擴展到AH

? ? ? ? ? 規則:若最高位=1,則執行后AH=FFH

? ? ? ? ? ? ? ? ? ? ?若最高位=0,則 執行后AH=00H

字擴展指令(16位—>32位)

? ? ? ? ? 格式: CWD? ? ?

? ? ? ? ? 功能:將AX中的數的符號位擴展到DX,

? ? ? ? ? 規則:若最高位=1,則執行后DX=FFFFH

? ? ? ? ? ? ? ? ? ? ?若最高位=0,則執行后DX=0000H

? ? ? ? ? 這兩條指令不影響標志位

? ? ? ? ? ? ? ? ? 例:分析指令執行后的結果????

? ? ? ? ? ? ? ? ? ? ? ? MOV? AL,44H

? ? ? ? ? ? ? ? ? ? ??? CBW? ? ? ? ? ? ? ? ?結果:AX=0044H

? ? ? ? ? ? ? ? ? ? ? ? MOV? AX,0AFDEH

? ? ? ? ? ? ? ? ? ? ? ? CWD? ? ? ? ? ? ? ??結果DX=FFFFH,??? AX=0AFDEH

? ? ? ? ? ? ? ? ? ? ? ? MOV? AL,86H

? ? ? ? ? ? ? ? ? ? ? ? CBW? ? ? ? ? ? ? ? 結果:AX=FF86H

? ? ?5.? 十進制運算調整指令

? ? ? ? ? BCD碼:二進制編碼的十進制數,又稱為二—十進制數。

? ? ? ? ? 非組合(非壓縮)BCD碼:用一個字節表示一位十進制數。

? ? ? ? ? 組合(壓縮)BCD碼:用一個字節表示二位十進制數。

? ? ? ? ? 由于BCD碼是四位二進制編碼,四位二進制數共有16個編碼,BCD碼只用其中的

? ? ? ? ? 10個,其余沒用的編碼1010~1111稱為無效碼。BCD碼運算結果進入或跳過無效

? ? ? ? ? 碼區時,都會出現錯誤。為了得到正確結果,必須進行調整。

? ? ? ? ?(1)? 非組合BCD碼的加法調整指令

? ? ? ? ? ? ? ? 格式:AAA

? ? ? ? ? ? ? ? 功能:對AL中的由兩個非組合BCD碼相加的和進行調整,結果(非組合BCD碼)

? ? ? ? ? ? ? ? ? ? ? ? ? 存于AX中。

? ? ? ? ? ? ? ? 調整過程:若AL的低4位大于9或AF=1,則AL←AL+6, AF←1,CF←1,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? AH←AH+1,清除AL的高四位;否則清除AL的高4位以及AF和CF

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 標志;

? ? ? ? ?(2)? 組合BCD碼的加法調整指令

? ? ? ? ? ? ? ? 格式: DAA

? ? ? ? ? ? ? ? 功能:對AL中的由兩個組合BCD碼相加的和進行調整,將結果(組合BCD碼)

? ? ? ? ? ? ? ? ? ? ? ? ? ?存于 AL中。

? ? ? ? ? ? ? ? 調整過程: 調整方法與AAA類似,只是此指令要分別考慮AL的高4位和低4位。

? ? 若AL低4位大于9或AF=1,則AL+6→AL,置AF=1;

??? 若AL高4位大于9或CF=1,則AL+60H→AL,置CF=1

?? ? ? ? ? ? ?? 注意:以上兩條指令使用時必須緊跟在ADD或ADC之后 。? ?

? ? ? ? ? (3) 非組合BCD碼的減法調整指令

? ? ? ? ? ? ? ? 格式: AAS?

? ? ? ? ? ? ? ? 功能:對AL中由兩個非組合BCD碼相減的差進行調整,將結果(非組合BCD碼)

? ? ? ? ? ? ? ? ? ? ? ? ???存于AL中。

? ? ? ? ? ? ? ? 調整過程:調整方法與AAA類似,不同的是當AL的低4位表示的數大于9或AF=1

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 時,將AL-6→AL,AH-1→AH,并將AF和CF置1,清除AL的高四位。

? ? ? ? ? (4) 組合BCD碼的減法調整指令

? ? ? ? ? ? ? ?格式: DAS

? ? ? ? ? ? ? ?功能:對AL中由兩個組合BCD碼相減所得的結果進行調整,并將結果(組合BCD

? ? ? ? ? ? ? ? ? ? ? ?? 碼)存于AL中。

? ? ? ? ? ? ? ?調整過程:調整方法與DAA類似,不同的是當AL的低4位>9或者 AF=1,則AL-? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?6→AL,并置AF=1;而當 AL的高4位大于9或者 CF=1時,則AL-60H

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?→ AL,并置CF=1。

? ? ? ? ? ? ? ?注意:使用AAS、DAS指令必須緊跟在減法指令之后。

?? ? ? ? ?(5)?非組合BCD碼的乘法調整指令

? ? ? ? ? ? ? ? 格式: AAM?

? ? ? ? ? ? ? ? 功能:對AX中的由兩個非組合BCD碼相乘所得的結果進行調整,并將調整后的

? ? ? ? ? ? ? ? ? ? ? ? ? ?結果存于AX中。

? ? ? ? ? ? ? ? ?調整過程:AH←AL/0AH(商),AL←AL%0AH(余數)

? ? ? ? ? ? ? ? ?注意:本指令必須緊跟在MUL指令之后使用

? ? ? ? ? (6) 非組合BCD碼的除法調整指令

? ? ? ? ? ? ? ?格式: AAD?

? ? ? ? ? ? ? ?功能:把AX中的兩個非組合BCD碼進行調整,然后可用DIV指令實現兩個非組合

? ? ? ? ? ? ? ? ? ? ? ? ?BCD碼的除法運算

? ? ? ? ? ? ? ?調整過程: AL←10×AH+AL,AH←0

? ? ? ? ? ? ? ?注意:本指令必須在DIV運算前使用

? ? ? ? ? 總結: DAA或DAS必須用在ADD(ADC)或SUB(SBB)之后,結果對OF無影響,

? ? ? ? ? ? ? ? ??? ? 對其他狀態標志位均有影響。

AAA或AAS必須用在ADD(ADC)或SUB(SBB)之后,結果影響AF和CF,
對其他標志位均無意義。
AAM必須用在MUL之后,結果影響SF、ZF和PF,對AF、CF和OF無影響。
AAD必須用在DIV之前,結果影響SF、ZF和PF,對AF、CF和OF無影響。

? ?例:設在AX和BX中分別存有用組合BCD碼表示的十進制數,編寫程序段將兩個數相

? ? ?? ? ?加,結果存于AX中。

????????? ADD? AL,BL? ;低字節相加

? ? ? ?? DAA? ;低字節調整

? ? ? ?? MOV? CL,AL? ;暫存低字節

? ? ? ? ?MOV? AL,AH?

? ? ? ? ?ADC? AL,BH? ;高字節相加

? ? ? ? ?DAA? ;高字節調整

? ? ? ?? MOV? AH,AL?

? ? ? ? ?MOV? AL,CL? ;存放結果于AX中

? ? ? ? ? ?例:在1000H中開始的單元中,連續存放著4個壓縮BCD碼表示的兩個十進制數,

? ? ? ? ? ? ? ? ? 將兩個數相加(相減),結果送回1000H中。

? ? ? ? ? ? ? ? ? MOV SI,1000H

? ? ? ? ? ? ? ? ? MOV AL,[SI]?????????????

? ? ? ? ? ? ? ? ? ADD? AL, [SI+2] ? ;低字節相加

? ? ? ? ? ? ? ? ? DAA? ;低字節調整

? ? ? ? ? ? ? ? ? MOV? [SI],AL? ;暫存低字節

? ? ? ? ? ? ? ? ? MOV? AL, [SI+1] ?

? ? ? ? ? ? ? ? ? ADC? AL, [SI+3]? ;高字節相加

? ? ? ? ? ? ? ? ? DAA? ;高字節調整

? ? ? ? ? MOV? [SI+1] ,AL? ;存放結果于AX中


(三).?邏輯運算指令

? ? ? ? ?OP源:? 8/16位通用寄存器、存儲器操作數或立即數???

? ? ? ? ?OP目:? 通用寄存器和存儲器操作數。

? ? ? ? ?除“非”運算外,其余指令都會使OF=CF=0

? ? ? ? ?1. 邏輯與運算指令

? ? ? ? ? ? ?全1出1,有0出0

? ? ? ? ? ? ?格式:AND? OP目,OP源

? ? ? ? ? ? ?功能:對兩個操作數按位進行與操作,結果回送OP目。

? ? ? ? ? ? ?說明:該指令常用于截取(或屏蔽)若干位二進制數

? ? ? ? ? ? ?例:已知AL=46H,將AL的低4位保留,高4位屏蔽。????????

? ? ? ? ? ? ? ? ? ? ?AND? AL,0FH;

? ? ? ? ? ? ? ? ? ? ?AL=06H ,?屏蔽高位(高位清0) ,取出低位;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?即對應位為0則清0,對應位為1則不變?????????????????????????????????????????

? ? ? ? ?2. 邏輯或運算指令

? ? ? ? ? ? ?有1出1,全0出0

? ? ? ? ? ? ?格式:OR OP目,OP源

? ? ? ? ? ? ?功能:對兩個操作數進行或運算,結果回送到OP目。

? ? ? ? ? ? ?說明:可用于組合某個字,或將某位置1。

? ? ? ? ? ? ?例:MOV? AX,8888H;

? ? ? ? ? ? ? ? ? ? OR? AX,00FFH? ;

? ? ? ? ? ? ? ? ? ? AX=88FFH,將AX的低8位置1,其他位不變。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?即對應1位置1,對應0位則不變。

? ? ? ? ?? ? 例:將AL中的非組合BCD碼轉換成ASCⅡ碼

? ? ? ? ? ? ? ? ? ? OR?? AL,30H

? ? ? ? ?3.?邏輯異或運算指令

? ? ? ? ? ? ?相同為0,不同為1

? ? ? ? ? ? ?格式:XOR OP目,OP源

? ? ? ? ? ? ?功能:對兩個操作數進行異或運算,結果回送到OP目。

? ? ? ? ? ? ?說明:用于對某個二進制數按位取反或對某寄存器清0。

? ? ? ? ? ? ?和0異或不變和1異或取反

? ? ? ? ? ? ?例: XOR?? AL,0FFH ;?? AL數據按位求反?

? ? ? ? ? ? ?例:??? MOV?? AX,? 3333H
? ? ? ? ? ? ? ? ? ? ? XOR?? AX,? 00FFH ;?

? ? ? ? ? ? ?結果:AX=33CCH, AH數據保持不變,對AL數據求反。即對應0不變,對應1求反

? ? ? ? ??? ?例:寄存器清0(有4條指令可達到AX清0目的):

? ? ? ? ? ? ? ? ? ? XOR?? AL,AL? ? ;????? AL清0

? ? ? ? ? ? ? ? ? ??MOV? AX,0

? ? ? ? ? ? ? ? ? ? SUB? AX,AX

? ? ? ? ? ? ? ? ? ? AND? AX,0???

? ? ? ? ? ? ?例:將0-9轉為ASCII或將ASCII轉為0-9? ?XOR AL,30H

? ? ? ? ??4. 邏輯非運算指令

? ? ? ? ? ? ??整體取反

? ? ? ? ? ? ? 格式:NOT OP

? ? ? ? ? ? ? 功能:對操作數逐位取反后回送到原處。

? ? ? ? ? ? ? 例: MOV? AX,1

? ? ? ? ? ? ? ? ? ? ? NOT?? AX???????? ;

? ? ? ? ? ? ? ? ? ? ? AX=0FFFEH

? ? ? ? ? ? ? 注意:? (1)該指令只是執行求反操作,而不是求反碼指令,對符號位也求反。

(2)不影響標志位。

? ? ? ? ? 5.?測試指令

? ? ? ? ? ? ? 格式:TEST OP目,OP源

? ? ? ? ? ? ? 功能:將OP目與OP源進行與運算,不回送結果,只根據結果置標志位。

? ? ? ? ? ? ??說明:主要用來檢測目的操作數的某些位是1或0,根據測試結果,決定轉向

? ? ? ? ? ? ? 例:測試AX中的D15位是1還是0

? ? ? ? ? ? ? ? ? ? ?TEST??? AX,8000H;

? ? ? ? ? ? ? ? ? ? ?若D15為1,ZF=0,否則ZF=1?

? ? ? ?? ?總結:

? ? ? ? ? ? ? ? (1)AND? OR?? XOR? TEST均影響標志,CF=0,OF=0,而PF,SF,ZF由結

? ? ? ? ? ? ? ? ? ? ? ? ?果而定,AF無意義。此類指令可用來清CF,常用于拆字,拼字。

? ? ? ? ? ? ? ? (2)NOT 不影響標志。

? ? ? ? ? 例: 讓AX清零的幾個辦法:

? ? ? ? ? ? ? ? ① 給AX送0? MOV AX, 0

? ? ? ? ? ? ? ? ②自己減自己? SUB AX,AX

? ? ? ? ? ? ? ? ③與運算(有0出零) AND AX,0

? ? ? ? ? ? ? ? ④異或? XOR,AX,AX


(四).?移位指令

? ? ? ? ?移位操作:? ??(1)非循環移位:邏輯移位、算術移位

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)循環移位:不帶進位的移位、帶進位的移位

? ? ? ? ?規定:移動一位時由指令中的計數值直接給出;移動兩位及以上,則移位次數由CL

? ? ? ? ? ? ? ? ? ??指定,即必須將移位位數N事先裝入CL中。

? ? ? ? ?1. 非循環移位指令

? ? ? ? ? ? ? 邏輯左移算數左移:最高位移進CF,最低位補零

? ? ? ? ? ? ? 邏輯右移:最低位移進CF,最高位補零

? ? ? ? ? ? ? 算數右移:最低位移進CF,最高位補本身(最高位是什么就補什么)

? ? ? ? ? ? ? 算術左移與邏輯左移相同,可用于無符號數乘2操作;

? ? ? ? ? ? ? 邏輯右移可用于無符號數除2操作;

? ? ? ? ? ? ? 算術右移可以用于有符號數除2操作。

? ? ? ? ? ? ? 算術邏輯移位指令是雙操作數指令,操作數可以是除立即數之外的任何尋址方式,?

? ? ? ? ? ?? ?當計數值大于1時,必須使用CL作計數器。

例:MOV?? BX, FFFCH

? ? ? ? ? ? ?SAR???? BX,1

? ? ? ? ? ? ?結果:? BX=FFFEH,BX由-4變為-2

? ? ??例:? MOV? BL,0CH? ;BL=12

? ? ? ? ? ? ?SHL??? BL,??? 1????? ;??? BL=24?

? ? ? ? ? ? ? 例:? 對AX內容進行乘10運算(設無溢出,乘10后仍為一個字)

? ? ? ? ? ? ? ? ? ? 分析:? AX * 10=AX *(2的三次方+2)=AX * 2+AX *2的三次方

? ? ? ? ? ? ? ? ? ? 程序:MOV? BX,?? AX

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SAL??? BX,?? 1??????? ; 原數*2àBX

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MOV? CL,??? 3

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SAL??? AX,? CL????? ; 原數*23àAX

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ADD?? AX,? BX????? ; 原數*10àAX

? ? ? ? ?2.? 循環移位指令

??? ? ? ? ? ?(1)不帶進位的循環移位

? ? ? ? ? ? ? ? ? ? ?循環左移:ROL? OP目,計數值

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?把最高位移給CF的同時移給最低位

? ? ? ? ? ? ? ? ? ? ?循環右移:ROR? OP目,計數值?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?把最低位移給CF的同時移給最高位

? ? ? ? ? ? ? (2)? 帶進位的循環移位

? ? ? ? ? ? ? ? ? ? 循環左移:RCL? OP目,計數值

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? CF移給最低位,最高位移給CF

? ? ? ? ? ? ? ? ? ? 循環右移:RCR? OP目,計數值

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??CF移給最高位,最低位移給CF


(五).?字符串操作指令

??? ? ? ?串操作指令實現對一串字符或數據的操作,分為基本串操作指令重復前綴指令。基

? ? ? ? ?本串操作指令每執行一次只能處理一個數據,與重復前綴指令結合可以處理一串數據。

? ? ? ? ?串操作有如下共同點:

? ? ? ? ? ? ?(1)源串一般存放在數據段(DS),偏移地址由SI指定, 目標串在附加段(ES),偏移

? ? ? ? ? ? ? ? ?地址由DI指定。

? ? ? ? ? ? ?(2)每執行一次串操作后自動修改指針SI、DI。若方向標志DF=0,則每次操作后

? ? ? ? ? ? ? ? ? ?SI和DI自動加1(或加2);若DF=1,則每次操作后SI和DI自動減1(或減2)修改。

? ? ? ? ? ? ?(3)串長(字或字節個數)存放在CX中。

? ? ? ? ?注意:在執行指令前必須DS、ES、SI、DI、DF、CX置好需要的值,它們是串操作

? ? ? ? ? ? ? ? ? ? 指令的隱含操作數。

? ? ? ? ?1.字符串串操作指令

? ? ? ? ? ? (1)字符串傳送指令?

? ? ? ? ? ? ? ? 格式: MOVS? OP目,OP源(必須說明操作數的類型,確定是字節/字傳送)

? ? ? ? ? ? ? ? ? ? ? ? ? ? MOVSB——字節傳送

? ? ? ? ? ? ? ? ? ? ? ? ? ? MOVSW——字傳送

? ? ? ? ? ? ? ? 功能:把位于數據段由SI指定的內存單元的字節/字數據傳送到附加段由DI指定

? ? ? ? ? ? ? ? ? ? ? ? ? ?的內存單元,指令不影響狀態標志位。

? ? ? ? ? ? ? ? 過程:[DI]←[SI]? 若DF=0 SI←SI+1/2,DI←DI+1/2

? ? ? ? ? ?? ? ? ? ? ? ? ? [DI]←[SI]? 若DF=1 SI←SI - 1/2,DI←DI-1/2

? ? ? ? ? ? ? ? 說明:串傳送指令常與無條件重復前綴連用

? ? ? ? ? ? (2)字符串比較指令

? ? ? ? ? ? ? ? 格式: CMPS??? OP目,OP源

? ? ? ? ? ? ? ? ? ? ? ? ? ? CMPSB?? ——字節比較

? ? ? ? ? ? ? ? ? ? ? ? ? ? CMPSW ——字比較

? ? ? ? ? ? ? ? 功能:把位于數據段由SI指定的字節/字數據與附加段由DI指定的字節/字數據進

? ? ? ? ? ? ? ? ? ? ? ? ? ?行比較,結果不保存,但影響狀態標志位,并由DF狀態決定SI、DI的修

? ? ? ? ? ? ? ? ? ? ? ? ? ?改方向。

? ? ? ? ? ? ? ? 過程:[SI] -[DI]?? SI←SI±1/2,DI←DI±1/2

? ? ? ? ? ? ? ? 說明:串比較指令常與條件重復前綴連用,指令的執行不改變操作數,僅影響標

? ? ? ? ? ? ? ? ? ? ? ? ? ?志位。

? ? ? ? ? ? ?(3)字符串搜索指令?

? ? ? ? ? ? ? ? ?格式:??SCAS?? OP(目標操作數)

?SCASB

?SCASW

? ? ? ? ??? ???? 功能: 把AL/AX中的內容與附加段由DI指定的一個字節/字數據進行比較,結果不

? ? ? ? ? ? ? ? ? ? ? ? ? 保存,但影響狀態標志位,并由DF狀態決定DI的修改方向。 ? ?

? ? ? ? ? ? ? ? ?過程:字節——AL-[DI],DI←DI±1

? ? ? ? ? ? ? ? ? ? ? ? ? ? 字——AX-[DI],DI←DI±2

? ? ? ? ? ??(4)取字符串指令(不常用)

? ? ? ? ? ? ? ? ?格式:LODSB?? ——AL←[SI],SI←SI±1

? ?LODSW? ——AX←[SI],SI←SI±2

? ? ? ? ? ? ? ? ?功能:把位于數據段由SI指定內存單元的內容取到AL或AX中,并修改SI的內容,

? ? ? ? ? ? ? ?? ? ? ? ? ? ?指向下一字節/字單元。? ?

? ? ? ? ? ? (5)存字符串指令(不常用)

? ? ? ? ? ? ? ? 格式:STOSB ——[DI]←AL,DI←DI±1

??STOSW ——[DI]←AX,DI←DI±2

? ? ? ? ? ? ? ? 功能:? 把寄存器AL或AX中的內容存到附加段由DI指定的內存單元,并修改DI的

? ? ? ? ? ? ? ? ? ? ? ? ? 內容,指向下一字節/字的存放單元。
? ? ? ??2. 重復前綴指令

? ? ? ? ? ? 基本串操作指令每執行一次只能處理一個數據,與重復前綴指令結合可以處理一串

? ? ? ? ? ? 數據。

? ? ? ? ?

? ? ? ? 注意:? ? ? ? ?

(1)重復前綴指令不能單獨使用,其后必須緊跟基本串操作指令,控制基本串操作
指令重復執行。其執行過程相當于一個循環程序的運行。在每次重復之后,地
址指針SI和DI都被修改,但指令指針IP仍保持指向帶有前綴的串操作指令的地
址。
(2)重復執行次數由數據串長度決定,數據串長度應預置在寄存器CX中。
(3)執行重復前綴指令不影響標志位。
JZ 表示ZF=1跳轉
JNZ表示ZF不等于0跳轉
? ? ? ? CLD會讓DF=0? STD會讓DF=1

(六).?轉移指令

? ? ? ? 一. 尋址方式

? ? ? ? ? ? ?控制轉移指令在段內、段間轉移時,使用直接(相對)尋址或間接尋址方式。

? ? ? ? ? ? ?1. 直接尋址方式

? ? ? ? ? ? ? ? ?段內直接尋址方式——目標程序和源程序在同一個程序段內,只給出源地址和目

? ? ? ? ? ? ? ? ?標地址的差值,此差值是偏移量,它是一個以IP為基準的8位或16位的帶符號補

? ? ? ? ? ? ? ? ?碼數。

? ? ? ? ? ? ? ? ?段間直接尋址方式——直接給出轉移目標地址的段地址和段內位移量,用前者取

? ? ? ? ? ? ? ? ?代CS當前的值,用后者取代IP中當前的值,使程序從一個代碼段轉移到另一個

? ? ? ? ? ? ? ? ?代碼段。

? ? ? ? ? ? ?2.??間接尋址方式

? ? ? ? ? ? ? ? ? 段內間接尋址方式——指令轉移的有效地址存在一個寄存器或存儲器單元中,

? ? ? ? ? ? ? ? ? 用它取代當前IP的值,實現程序轉移。

? ? ? ? ? ? ? ? ? 段間間接尋址方式——指令給出一個存儲器地址,從該地址開始的4個字節單元

? ? ? ? ? ? ? ? ? 中存放轉移目標地址的段內偏移量和段地址,這兩個地址在指令執行時用于取

? ? ? ? ? ? ? ? ? 代當前的IP和CS的內容,使程序從一個代碼段轉移到另一個代碼段。

? ? ? ? 二.?轉移指令

? ? ? ? ? ? ? 通過修改指令的偏移地址或段地址及偏移地址實現程序的轉移

? ? ? ? ? ? ??無條件轉移指令無條件轉移到目標地址,執行新的指令

? ? ? ? ? ? ? 有條件轉移指令在具備一定條件的情況下轉移到目標地址

? ?? ? ?三.?無條件轉移指令

? ? ? ? ? ? ? ?? ? ?JMP指令

? ? ? ? ? ? ? ? ? ? 格式:JMP? OP

? ? ? ? ? ? ? ? ? ? 功能:無條件地將控制轉移到目標地址去。

? ? ? ? ? ? ? ? ? ? 原則上可實現在整個內存空間的轉移。? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ?段內轉移:

? ? ? ? ? ? ? ? ? ?段內轉移指令:

? ? ? ? ? ? ?

? ? ??

? ? ? ? ? ? ? ? ? ? 段間轉移:

? ? ? ? ? ? ? ? ? ? 段間轉移指令:

? ? ? ? ?

? ? ? ?

? ? ? ?? ?四.?調用和返回指令(CALL和RET指令)

? ? ? ? ? ? ? ??1.?調用指令

? ? ? ? ? ? ? ? ? ??格式:CALL??? OP

? ? ? ? ? ? ? ? ? ? 功能:將CALL指令的下一條指令的地址(斷點地址)IP或IP與CS壓棧,新

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 的目標地址(子程序首地址)裝入IP或IP與CS中,控制程序轉移到由

? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? OP指明入口的子程序。其中OP為子程序(過程)的名字。

? ? ? ? ? ? ? ? ? ? 操作過程:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(1)SP-2 → SP, 當前CS壓棧,OP所在段地址 → CS

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(2)SP-2 → SP, 當前IP壓棧,OP的偏移地址 → IP

? ?對于段內調用只有(2)。

? ? ? ? ? ? ? ? ? ? ?(1).?段內調用

? ? ? ? ? ? ? ? ?? ? (2).? 段間調用

? ? ? ? ? ? ? ? ? ? ? ? ? ? 子過程與原調用程序不在同一代碼段,在調用之前需保護斷點的段基地址

? ? ? ? ? ? ? ? ? ? ? ? ? ? 和偏移地址。先將斷點的CS壓棧,再壓入IP

? ? ? ? ? ? ? ? ? ? ? ? ? ? 格式:CALL? FAR? PROC

? ? ? ? ? ? ? ? ? ? ? ? ? ? 例:CALL? FAR? TIMRE

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CALL? DWORD? PTR[SI]

? ? ? ? ? ? ????2.? 返回指令

? ? ? ? ? ? ? ? ? ? ?格式:RET

? ? ? ? ? ? ? ? ? ? ?功能:通常作為一個子程序的最后一條指令,用以返回到調用子程序的斷點

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 處,即從堆棧彈出斷點送IP和CS。

? ? ? ? ? ? ? ? ? ? ?操作過程:??

???? (1)從棧頂彈出一個字給IP,SP+2→SP?

???? (2)從棧頂彈出一個字給CS,SP+2→SP?

? ? ? ?對于段內調用只有(1)。

? ? ? ? ? ? ? ? ? ???調用指令與轉移指令的比較:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?用于調用一個子過程

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?調用前須保護斷點地址

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?子過程執行結束后要返回原調用處繼續執行原程序

? ? ? ? ? ? ? ? ? ? ?調用指令的執行過程

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?將調用指令的下一條指令的地址(斷點)壓入堆棧

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?獲取子過程的入口地址(子過程第1條指令的偏移地址)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?執行子過程,含相應參數的保存及恢復

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?將斷點偏移地址由堆棧彈出,返回原程序

? ? ? ? ? 3. 條件轉移指令

條件轉移指令將前一條指令執行結果對狀態標志位的影響,作為程序轉移的
條件。滿足條件時轉移到指令指定的地址,否則將順序執行下條指令。可作
為判斷條件的狀態標志位有CF、PF、ZF、SF和OF。
條件轉移指令都是采用相對尋址方式的雙字節指令,指令第一字節是操作碼,
第二字節是帶符號的位移量。條件轉移指令只能在當前段中實現短轉移,不
影響狀態標志。

? ? ?①對無符號數

? ? ? ? ?A:大于? ? B:小于? ? E:等于? ? ?N: 取反

? ? ? ? ?高于/不低于也不等于轉移?? JA/JNBE 目標標號? CF AND ZF=0

? ? ? ? ?高于或等于/不低于轉移?????? JAE/JNB 目標標號???????? CF=0

? ? ? ? ?低于/不高于也不等于轉移??? JB/JNAE 目標標號???????? CF=1

? ? ? ? ?低于或等于/不高于轉移??? JBE/JNA 目標標號?????? CF? OR? ZF=1

? ? ? ? ? ? ?②對有符號數

? ? ? ? ? ? ? ? ?G:大于? ?L:小于?? E:等于? ? ?N: 取反

? ? ? ? ? ? ? ? ?大于/不小于也不等于轉移?? JG/JNLE 目標標號

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ?(SF? XOR? OF)AND? ZF=0

? ? ? ? ? ? ? ? ?大于或等于/不小于轉移?????? JGE/JNL 目標標號

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SF? XOR? OF=0?

? ? ? ? ? ? ? ? ?小于/不大于也不等于轉移?? JL/JNGE 目標標號?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SF? XOR? OF=1

? ? ? ? ? ? ? ? ?小于或等于/不大于轉移?????? JLE/JNG 目標標號

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (SF? XOR? OF)=1OR? ZF=1

? ? ?③對標志位

? ? ? ? ?進位為1轉移???????? JC??? 目標標號??????????? CF=1

? ? ? ? ?進位為0轉移???????? JNC???? 目標標號??????? CF=0

? ? ? ? ?等于/結果為0轉移????????? JZ/JE?? 目標標號??????? ZF=1

? ? ? ? ?不等于/結果不為0轉移? JNZ/JNE 目標標號??? ZF=0

? ? ? ? ?溢出轉移????????? JO????? 目標標號??????????? OF=1

? ? ? ? ?不溢出轉移????? JNO???? 目標標號????????? OF=0

? ? ? ? ?奇偶位為0/奇偶性為奇轉移???? JNP/JPO 目標標號???? PF=0

? ? ? ? ?奇偶位位1/奇偶性為偶轉移???? JP/JPE? 目標標號?????? PF=1

? ? ? ? ?符號標志位為0轉移?????????? JNS???? 目標標號? SF=0

? ? ? ? ?符號標志位為1轉移?????????? JS????? 目標標號? SF=1


(七).?循環控制指令

使用循環控制指令之前,必須在 CX(計數器)中預置循環次數的初值。
不影響狀態標志位。
主要用于數據塊比較、查找關鍵字等操作。
?注意:同一個循環不要用多個LOOP,不然CX會異常
? ? ? ? ? ? ?如果需要用兩個循環嵌套,那么需要把外部循環的CX進棧保護一下,內部循環
? ? ?? ? ? ? 用完CX再pop出來

? ? ?⑴ 計數循環

? ? ? ? ? 格式:LOOP??? 目標標號

? ? ? ? ? 功能:CX-1→CX,若CX≠0,循環轉移到目標標號,直到CX=0退出循環。

? ? ?⑵ 結果為0/相等循環(不常用)

? ? ? ? ?格式:LOOPZ/LOOPE??? 目標標號

? ? ? ? ?功能:CX-1→CX,若CX≠0且ZF=1時,循環轉移到目標標號,直到CX=0或ZF=0

? ? ? ? ? ? ? ? ? ? 退出循環。

?? ?? ⑶ 結果不為0/不相等循環(不常用)

? ? ? ? ? 格式:LOOPNZ/LOOPNE??? 目標標號

? ? ? ? ? 功能:CX-1→CX,若CX≠0且ZF=0時,循環轉移到目標標號,直到CX=0或ZF=1

? ? ? ? ? ? ? ? ? ?? 時退出循環 ?

? ? ?(4) 計數為0轉移(不常用)

? ? ? ? ? 格式:JCXZ? 目標標號

? ? ? ? ? 功能:若CX=0時,則轉向目標標號,否則順序執行

? ? ? 1. 處理器控制指令

? (1)標志操作指令

? ? ? ?格式:? CLC? ;置CF= 0

? ? ? ? ? ? ? ? ?? ?STC? ;置CF= 1

? ? ? ? ? ? ? ? ? ? CMC? ;置CF= CF(上面有一橫線,表示CF取反)

? ? ? ? ? ? ? ? ?? ?CLD? ;置DF=0

? ? ? ? ? ? ? ? ? ??STD? ;置DF=1

? ? ? ? ? ? ? ? ? ??CLI? ;置IF=0

? ? ? ? ? ? ? ? ? ? STI? ;置IF=1

? ? ? ?標志操作指令完成對標志位的置位、復位等操作,這些指令只影響與其相關

? ? ? ?的標志位。

? (2)CPU控制指令

? ? ? ?①?處理器暫停指令

? ? ? ? ? ? 格式:HLT

? ? ? ? ? ? 功能:使處理器處于暫時停機狀態。

? ? ? ? ? ? 說明:HLT引起的暫停,只有RESET(復位)、NMI(非屏蔽中斷請求)、

? ? ? ? ? ? ? ? ? ? ???INTR(可屏蔽中斷請求)信號可以使CPU退出暫停狀態。

? ? ? ?② 處理器等待指令

? ? ? ? ? ? 格式:WAIT

? ? ? ??? ? 功能:執行WAIT指令后,處理器處于等待狀態,直到檢測到TEST引腳

? ? ? ? ? ? ? ? ? ? ? 有效,才退出等待狀態,執行后續指令。

? ? ? ? ? ? 說明:用于處理器與外設同步。

? ? ? ? ? ? ? ??③?處理器交權指令

? ? ? ? ? ? ? ? ? ?? 格式:ESC? EXTOPCD,OP源(其中EXTOPCD為外部操作碼,OP源為源

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 操作數)

? ? ? ? ? ? ?功能:用來為協處理器提供一個操作碼和操作數,以便完成主機對協處理器

? ? ? ? ? ? ? ? ? ? ? ? 的某種操作要求。

? ? ? ?? ? ? ? ? ④ 空操作指令

? ? ? ? ? ? ? ? ? ? ?格式:NOP

? ? ? ? ? ? ? ? ? ? ?功能:在執行本指令期間,CPU不完成任何操作,只是每執行一條NOP

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?指令,耗費3個時鐘周期的時間。

? ? ? ? ? ? ? ? ⑤?總線封鎖前綴

? ? ? ? ? ? ? ? ? ? 前綴格式:LOCK

? ? ? ? ? ? ? ? ? ? 功能: 當CPU執行帶有LOCK前綴的指令時,不允許其他設備對總線進行訪問

? ? ? ? ? ? ? ? ? ? 說明:LOCK可作為任意指令前綴使用。

? ? ? ? ? ? ? ? ? ? 注意:此類指令均不影響標志位。

? ? ? ? 2.? 輸入輸出指令

? ? ? ? ?? ? CPU對外設端口有兩種尋址方式,即直接尋址和間接尋址。直接尋址范圍為00H

? ? ? ? ? ? ?—0FFH個端口;間接尋址范圍為0000H—0FFFFH共64K個端口。間接尋址時,

? ? ? ? ? ? ?只能用DX作間址寄存器。

? ? ? ? ? ? ?(1)? 輸入指令

? ? ? ? ? ? ? ? ? ?格式: :IN? 累加器(AX或AL),端口(00H-FFH或DX)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 端口在0-255(00H-FFH)時直接給出,大于255時把地址給DX

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 從地址為端口號xxx的地方取8/16位數據送AL/AX

? ? ? ? ? ? ? ? ? ?功能: 把一個字節/字由輸入端口傳送到AL/AX中.

? ? ? ? ? ? ? ? ? ?注意:???當外設是16位時用AX,外設是8位時用AL

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 當端口號大于8位或十進制數大于255時用間接尋址

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 端口中存放的是地址,累加器中存放的是數據

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? IN是讀指令,而且區分奇偶地址

? ? ? ? ? ? ? ? ? ?例: IN? AL,21H? ;將端口21H的8位數讀到AL中

? ? ? ? ? ? ? ? ? ? ? ? ? ?MOV? DX,201H;? ??

? ? ? ? ? ? ? ? ? ? ? ? ? ?IN? AX,DX;? ? ?從201H號端口讀16位給AX

? ? ? ? ? ? ?(2)? 輸出指令

? ? ? ? ? ? ? ?? ? 格式:OUT? 端口,累加器

? ? ? ? ? ? ? ? ? ?功能:把AX中的16位數或AL中的8位數輸出到指定端口。?

? ? ? ? ? ? ? ? ? ?例:OUT? 22H ,AL? ;將AL中的數傳到22H端口

? ? ? ? ? ? ? ? ? ? ? ? ? MOV? DX,511H? ?

? ? ? ? ? ? ? ? ? ? ? ? ? OUT? DX ,AX?

? ? ? ???3.? 中斷指令

? ? ? ? ? ? ? (1)?溢出中斷指令

? ? ? ? ? ? ? ? ? ?格式:INTO

? ? ? ? ? ? ? ? ? ?功能:檢測OF標志位。當OF=1時,產生一個中斷類型4的中斷;當OF=0時,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 本指令不起作用。

? ? ? ? ? ? ? ? ? ?注意:影響標志位IF、TF。

? ? ? ? ? ? ? ?(2)?軟中斷指

? ? ? ? ? ? ? ? ? ? 格式:INT n(n為中斷類型號)

? ? ? ? ? ? ? ? ? ? 功能:產生一個軟件中斷,把控制轉向一個類型號為n的軟中斷。

? ? ? ? ? ? ? ? ? ??注意:影響標志位IF、TF。?

? ? ? ? ? ? ? ?(3)?中斷返回指令

? ? ? ? ? ? ? ? ? ? 格式:IRET

? ? ? ? ? ? ? ? ? ? 功能:讓CPU執行完中斷服務程序后,正確返回原程序的斷點處。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SP+6? 恢復IP,CS,FR

? ? ? ? ? ? ? ? ? ? 注意:影響所有標志位。?


(八).?宏匯編語言的基本語法

? ? ? ? ?1. 常數

? ? ? ? ? ? ?常數——沒有任何屬性的純數值。在匯編期間,它的值已經完全確定,而且在程

? ? ? ? ? ? ?序的運行中也不會發生變化。它可以有以下幾種類型:

? ? ? ? ? ? ?⑴二進制數:以字母B結尾的由一串“0”和“1”組成的序列。例如:0010110B。

? ? ? ? ? ? ?⑵八進制數:以字母o或Q結尾,由若干個0到7的數字組成的序列。例如:255Q、

? ? ? ? ? ? ?⑶十進制數:由若干個0到9的數字組成的序列,可以以字母D結尾,也可以省略

? ? ? ? ? ? ? ? ?字母D。例如:1234D或1234。

? ? ? ? ? ? ?⑷十六進制數:以字母H結尾,由若干個0到9的數字和字母A到F組成的序列,且

? ? ? ? ? ? ? ? ?必須以數字開頭。例如:56H,0B3FH。

? ? ? ? ? ? ?⑸字符串常數:用引號括起來的一個或多個字符。這些字符以ASCII 碼形式存在

? ? ? ? ? ? ? ? ?內存中。例如‘A’的值是41H,而‘B’的值是42H。因此串常量與整數常量可以交

? ? ? ? ? ? ? ? ?替使用。

? ? ? ? ? ? ?注意:為了區別由A~F組成的一個字符串是十六進制數還是英文符號,規定凡以

? ? ? ? ? ? ? ? ? ? ? ? 字母A~F為起始字符的十六進制數,必須在前面冠以數字“0”

? ? ? ? ?? ? 總之,常數主要以立即數、位移量的形式出現在指令語句或數據定義偽指令中。

? ? ? ? ?2. 變量

? ? ? ? ? ? ?變量——通常是存放在某些存儲單元的數據,這些數據在程序運行期間可以修改。

? ? ? ? ? ? ?變量名——表示數據在段中的有效地址,由用戶指定。變量名是可選的,如果使用

? ? ? ? ? ? ?變量名,它代表數據區中第一個數據項的地址。

? ? ? ? ? ? ?變量的三個屬性:? (1)段屬性(SEGMENT):表示變量所在段的段首地址

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)偏移屬性(OFFSET):表示變量的偏移地址

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (3)類型屬性(TYPE):表示變量占用存儲單元的字節數。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??類型:字節,字,雙字,四字,十字節類型,

? ? ? ? ? ? ?變量是用數據定義偽指令DB、DW、DD等定義的。

? ? ? ? ? ? ?DB—字節

? ? ? ? ? ? ?DW—字(2字節)

? ? ? ? ? ? ?DD—雙字(4字節)

? ? ? ? ? ? ?例如: DATA1 DB?12H,13H,00H

? ? ? ? ? ? ?注意:變量也可以定義為一個數據區或存儲區,但變量名僅表示該數據區或存儲區

? ? ? ? ? ? ? ? ? ? ? ? 的第一個數據單元(即數據區或存儲區的首地址)。????????

? ? ? ? ?3. 標號

表示一條指令所在的地址,也是指令語句的地址符號,常用作轉移指令(包含子程
序調用指令)的操作數,即目標地址。
通常由字母數字串組成,但第一個字符必須為字母。最多允許使用31個字符,且
可以使用下劃線(-)使標號容易閱讀。
例如: JMP LOP
LOP : MOV AL,AH? ? LOP表示標號
? 標號的三個屬性:? ?(1)段屬性(SEGMENT):表示標號所在段的段基址???

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)偏移屬性(OFFSET):表示標號的偏移地址

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (3)距離屬性(類型屬性TYPE):表示標號作為段內或段間的

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 轉移屬性

? ? ? ? ? ? ?距離屬性分為兩種:

? ? ? ? ? ? ? ? ?(1)NEAR(近):表示本標號只能被標號所在段內的轉? 移和調用指令訪問

? ? ? ? ? ? ? ? ? ?(即段內轉移)。

? ? ? ? ? ? ? ???(2)FAR(遠):表示本標號可以被其他段(不是標號所在段)的轉移和調用指

? ? ? ? ? ? ? ? ? ? ? 令訪問(即段間轉移)。

? ? ? ? ?4.?運算符與表達式

? ? ? ? ? ? ?表達式:(1)數值表達式:只產生數值結果

? ? ? ? ? ? ? ? ? ? ? ? ?? (2)地址表達式:產生的結果是一個存儲器地址,若該地址存放的是數據,

? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ?一般稱它為變量,若存放的是指令,一般稱它為標號

? ? ? ? ? ? ?運算符:

? ? ? ? ? ? ? ? ? ? ? (1)算術運算符?

? ? ? ? ? ? ? ? ? ? ? ? ? 包括:+、-、*、/、MOD(求余)、SHL(左移)和右移(SHR)

? ? ? ? ? ? ? ? ? ? ? ? ? 例:CONT = 14*4????? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?CONT = CONT/8 ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MOV AL, 21H SHL 2???????????

? ? ? ? ? ? ? ? ? ? ??(2)邏輯運算符?

? ? ? ? ? ? ? ? ? ? ? ? ? 包括:AND、OR、XOR和NOT。只適用于對常數進行邏輯運算。

? ? ? ? ? ? ? ? ? ? ? ? ? 例:? AND? DX,PORT AND 0FEH

? ? ? ? ? ? ? (3)關系運算符

? ? ? ? ? ? ? ? ? 包括:EQ(相等)、NE(不相等)、LT(小于)、GT(大于)、

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?LE(小于或等于)、GE(大于或等于)。

? ? ? ? ? ? ? ? ? 結果:若關系為假(不成立),結果為0;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?若關系為真(成立),結果為0FFH或0FFFFH。

? ? ? ? ? ? ? ? ? 例:? MOV? BX,PORT? LT? 5

? ? ? ? ? ? ? ? ? 例:? MOV? BX,( (PORT? LT? 5) AND? 20) OR

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?( (PORT? GE? 5) AND 30 )

? ? ? ? ? ? ? ? ? ? ? ? 當PORT<5時,等價 MOV?? BX,?? 20? ? ?

? ? ? ? ? ? ? ? ? ? ? ? 當PORT>5時,等價 MOV?? BX,?? 30

? ? ? ?(4)分析操作符(數值返回運算符)??

? ? ? ? ? ?①取地址的偏移量

? ? ? ? ? ? ? ?格式:OFFSET? 變量名或標號

? ? ? ? ? ? ? ?功能:取變量名或標號所在段的段內偏移量。

? ? ? ? ? ?②取段基址

? ? ? ? ? ? ? ?格式:SEG? 變量名或標號

? ? ? ? ? ? ? ?功能:取變量名或標號所在段的段首地址。

? ? ? ? ? ? ? ? ? ? ? ? ?③求變量名或標號的類型值

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?格式:TYPE?? 變量名或標號

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?功能:返回一個數字值。若TYPE加在變量名前,返回該變量的類型

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 屬性;若加在標號前,返回該變量的距離屬性。

? ? ? ? ? ? ? ? ? ? ? ???④求長度

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?格式:LENGTH?? 變量名

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?功能:返回一個變量名所占存儲單元(字節、字或雙字)的數目。若變

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 量是用重復定義子句說明的,則返回DUP前面的數值;其余返回

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1。

? ? ? ? ? ? ? ? ? ? ? ? ?⑤求大小

? ? ? ? ? ? ? ? ? ? ? ? ? ? 格式:SIZE??? 變量名

? ? ? ? ? ? ? ? ? ? ? ? ? ? 功能:返回變量名所占存儲單元的字節數,它等于LENGTH和TYPE兩個

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?運算符返回值的乘積。

? ? ? ? ? ? ? ? ? ? ? ? ⑥指定偏移地址

? ? ? ? ? ? ? ? ? ? ? ? ? ?格式:ORG? ?指定的偏移地址(必須是立即數)

? ? ? ? ? ? ? ? ? ? ? ? ? ?功能:指定下一條指令的偏移地址

? ? ? ? ? ? ? ? ? ? (5)綜合運算符

①?PTR運算符

? ? 格式:類型?? PTR? 表達式

? ? 功能:用于指出變量、標號或地址表達式的類型屬性,新的類型只在當

? ? ? ? ? ? ? ?前指令內有效。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?例:? ?MOV BYTE PTR [DI],4 ;指明目的操作數為字節類型?????????????????????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? JMP DWORD PTR [BP];指明目的操作數為雙字類型

? ? ? ? ? ? ? ? ? ? ? ? ?②THIS運算符(不常用)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?格式:THIS?? 類型?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?功能:把它后面指定的類型或距離屬性賦給當前的變量、標號或地址表

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 達式。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?例:? A EQU THIS BYTE

? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? B DW? 20? DUP(?)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?說明:A、B對應同一存儲器地址,對變量A為字 節訪問,對變量B為字

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? 訪問,且A和B具有相同的段基址和偏移量。?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 注:THIS使下面的原標號或原變量有新的名字和類型,但不分配新的存

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 儲單元。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 例:將數據表原來按字節定義使用,現改為按字定義使用。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?WBUFFER1 EQU THIS WORD

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?BUFFER DB 100 DUP(0)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?二者段地址,偏移地址相同,類型不同。

? ? ? ? ? ? ?(6)其他運算符

? ? ? ? ? ? ? ? ? ①HIGH和LOW運算符(不常用)

? ? ? ? ? ? ? ? ? ? ? 格式:? HIGH? 表達式

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?LOW?? 表達式

? ? ? ? ? ? ? ? ? ? ? 功能:從運算對象中分離出高字節或低字節。

? ? ? ? ? ? ? ? ? ? ? 例:K1???? EQU? 1234H

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MOV??? AL,LOW? ?? K1 ;AL ← 34H

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MOV??? BL,HIGH?? K1 ;BL ← 12H

? ? ? ? ? ? ? ? ? ②SHORT運算符(不常用)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 格式:? SHORT? 標號

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 功能:當轉移的目標地址與本轉移指令的下一條指令之間的字節距

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?離在-128~127范圍時,可以用SHORT運算符進行說明。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 例:?? L1:? JMP?? SHORT? L2

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ┇

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? L2:? MOV? AX,BX

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ┇


(九).?偽指令

? ? ? ? ?8086宏匯編語言有兩種類型的語句:

? ? ? ? ?指令語句:在匯編過程中被翻譯成相應的目標代碼,經連接后生成可執行的機器指令

? ? ? ? ? ? ? ? ? ? ? ? ? ?代碼。

? ? ? ? ?偽指令語句:(指示性語句)在匯編時被解釋執行,由匯編程序來處理的一類操作,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如數據定義,分配存儲器等。

? ? ? ? ?偽指令不生成機器碼,不能被執行,起解釋說明的作用

? ? ? ?一.?偽指令語句的格式?

? ? ? ? ? ? ?格式:符號名? 定義符?? 操作數;

? ? ? ? ? ? ?符號名:在偽指令語句的前面,可以是常量名、變量名、段名和過程名等。

? ? ? ? ? ? ? ? ? ? ? ? ? ? 標號后用“:”——在指令語句中

? ? ? ? ? ? ?定義符:表示該語句的偽操作功能。定義符由匯編程序規定,宏匯編程序中使用了

? ? ? ? ? ? ? ? ? ? ? ? ? ?數十種定義符。

? ? ? ? ? ? ?操作數:可以是常數(二、十、十六進制等)、字符串、常量名、變量名、標號和

? ? ? ? ? ? ? ? ? ? ? ? ? ? 一些專用符號等。

? ? ? ?二.?常用偽指令

? ? ? ? ? ? 1. 符號定義偽指令(賦值語句)

? ? ? ? ? ? ? ??⑴ 等值偽指令

? ? ? ? ? ? ? ? ? ? ?格式:符號名??? EQU??? 表達式

? ? ? ? ? ? ? ? ? ? ?功能:將表達式的值賦給符號名。

? ? ? ? ? ? ? ? ? ? ?例:? ALFA??? EQU?? 100

? ? ? ? ? ?? ? ? ? ? ? ? ? COUNT?? EQU?? ALFA

? ? ? ? ? ? ? ? ? ? ?注意:符號名一旦被EQU定義,就不能再賦值,即不能用EQU再為符號名重

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 新賦值。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? EQU定義不占用內存單元

? ? ? ? ? ? ? ? ⑵ 等號偽指令

? ? ? ? ? ? ? ? ? ? ?格式:符號名 = 表達式

? ? ? ? ? ? ? ? ? ? ?功能:將表達式的值賦給符號名。

? ? ? ? ? ? ? ? ? ? ?說明:可以在程序中不同的地方多次使用以重新為符號名賦值。

? ? ? ? ? ? ? ? ? ? ?=定義也不占用內存單元

? ? ? ? ? ? ? ? ? ? ?例:?? ALFA = 100

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?MOV? AL,ALFA? ;AL←100

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ALFA = ALFA+2? ?????? ;? ALFA = 102

??(3) 定義符號名偽指令(不重要)

?????? 格式:符號名?? LABEL? 類型

?????? 功能:定義一個標號或變量,并指定其類型。

? ? ? ?例:??? BARY? LABEL? WORD;定義BARY為字類型

? ? ? ? ? ? ? ? ADD? ? AX,BARY? ;字加法

? ? ? ? ? ? ? ? ABCF? LABEL?? FAR? ;ABCF為FAR類型標號

? ? ? ? ? ? ?2.?數據定義偽指令

? ? ? ? ? ? ? ? ?格式:[變量名]? ? DB? ? 表達式? ;定義字節

? ? ? ? ? ? ? ? ? ? ? ? ? ? [變量名]?? DW? ? 表達式? ;定義字

? ? ? ? ? ? ? ? ? ? ? ? ? ? [變量名]? ? DD? ? 表達式? ;定義雙字?

? ? ? ? ? ? ? ? ? ? ? ? ? ? [變量名]?? DQ??? 表達式? ;定義8個字節?

? ? ? ? ? ? ? ? ? ? ? ?? ? ?[變量名]? ? DT? ? 表達式? ;定義10個字節?

? ? ? ? ? ? ? ? ? ? ? ? ? ? 表達式——是賦給變量的初始值,可以有一個,也可以有多個,常見的

? ? ? ? ? ? ? ? ? ? ? ? ? ? 有以下幾種:

? ? ? ? ? ? ? ? ⑴數值表達式

? ? ? ? ? ? ? ? ???實際上是為數據分配存儲單元,并把變量名作為該存儲單元的名稱。若要定

? ? ? ? ? ? ? ? ? ?義多個相同類型的數據,可用逗號把這些數據隔開,并依次分配在相鄰的存

? ? ? ? ? ? ? ? ? ?儲單元。

? ? ? ? ? ? ? ? ? ?例:?? BUF? DB? 20H,30H

? ? ? ? ? ? ? ? ? ? ? ? ? ?BUF1 DW 100

? ? ? ? ? ? ? ? ? ? ? ? ? ?DAT? DW 1234H,5678H ;

? ? ? ? ? ? ? ? ? ? ? ? ???字變量DAT的內容為1234H,占用兩個字節單元,下一個字單元即

? ? ? ? ? ? ? ? ? ? ? ? ?? DAT+2單元的內容為5678H,仍是低字節存在低地址單元。

? ? ? ? ? ? ? ⑵ASCII字符串

? ? ? ? ? ? ? ? ? 字符串必須用引號括起來,并且不超過256個字符,它們在內存中按地址遞

? ? ? ? ? ? ? ? ? 增順序自左向右依次存放字符的ASCII碼。

? ? ? ? ? ? ? ? ? 注意: 字符串定義一般用DB

? ? ? ? ? ? ? ? ? 例:STRING DB ‘ABC’

? ? ? ? ? ? ? ? ? ? ? ? ?STRING1 DB ‘ How are you? ’

? ? ? ? ? ? ? ? ? 例:? DATA?? DB? ‘AB’?

? ? ? ? ? ? ? ? ? ? ? ? ?DATA1? DW ‘AB’

? ? ? ? ? ? ??⑶為數據項分配存儲單元的一種方法,只是存儲單元中不預置確定的值,常用

? ? ? ? ? ? ? ? ? 來預留存儲單元,存放程序的中間結果或最終結果。

? ? ? ? ? ? ? ? ? 例:? RESULT? DB? ?;預置一個字節單元,其值不定

? ? ? ? ? ? ? ? ? ? ? ? ?ABC DB 12H , ?, ? , 24H

? ? ? ? ? ? ? ? ? ? ? ? ?DEF DW? ?,895H ,?

? ? ?⑷重復定義子句 DUP——可以為若干個重復數據分配存儲單元。

? ? ? ? ?格式:??? n?? DUP? (表達式)

 ? ? ?說明:? n:重復次數? ? ? ?表達式:重復的內容

? ? ? ? ?例:?? C??? DB?? 100? DUP(0)?

? ? ? ? ? ? ? ? ? ?TAB? DB? 100? DUP(5? DUP(1),2) ?

? ? ? ? ?注意:? ?(1) DUP操作可以嵌套。

? ? ? ? ? ? ? ? ? ??(2)在定義變量及存儲單元的同時,也定義了它們的類型屬性。

? ? ? ? ? ? ? ? ? ? ? ?? 同一數據定義語句所定義的各存儲單元具有相同的類型。

? ? ? ? ?例:? DA1? DB? 3? DUP(5,?, 6);

? ? ? ? ? ? ? ?從DA1地址單元開始存放三組“05H,預留,06H”共9個地址單元

? ? ? ? ? ? ? ?DA2? DW? 40? DUP(?);

? ? ? ? ? ? ? ?從DA2地址單元開始保留40個字共80個地址單元

? ? ? ? ? ? ? ?DA3?? DB? 10?? DUP(1,2,3 DUP(30,4);

? ? ? ? ? ? ? ?從DA3地址單元開始存放十組“01,02,30,04,30,04,30,04”,

? ? ? ? ? ? ???共占用80個字節。

? ? ? ? ? ? ??3. 段定義偽指令

? ? 格式:段名??? SEGMENT [定位類型][組合類型][‘類別名’]

? ? ? ? ? ? ? ? ? ? ? ? ? 段體

? ? ? ? ? ? ? ?段名??? ENDS?

? ??段名為該段起的名字,用來指出匯編程序為該段分配的存儲器起始地址,開始

? ? 的段名和結束的段名必須相同。

? ? 段體為段內的語句序列

? ? 功能:把模塊化分為若干個邏輯段。

???????????????每個SEGMENT/ENDS可定義一個邏輯段。

? ? 4. 段寄存器說明偽指令

? ? ? ? 格式:? ASSUME?? 段寄存器? :段名[,段寄存器? :段名…]

? ? ? ? 功能:向匯編程序指示當前各段所用的段寄存器,設定段寄存器與段的對應

? ? ? ? ? ? ? ? ? ?關系。

? ? ? ? 注意:?① 本偽指令只是指示各邏輯段使用寄存器的情況,并沒有對段寄存器內

? ? ? ? ? ? ? ? ? ? ? ? 容進行裝填。段寄存器的實際值(CS除外)還要由MOV指令在程序

? ? ? ? ? ? ? ? ? ? ? ? 中裝填數據。

? ? ? ? ? ? ? ? ? ? ②也可用來取消段寄存器與段之間的對應關系(用NOTHING),然后

? ? ? ? ? ? ? ? ? ? ? ? 再建立新的對應關系。

? ? ? ? ? ? ? ? ? 例:???? ASSUME?? DS: NOTHING

? ? ? ? ? ? ? ? ? ? ? ? ? ?ASSUME?? DS: DATAB ? ???????? ????

? ? ? ? ? ? ? ? ? ? ? ? ?? MOV????? AX, DATAB

? ? ? ? ? ? ? ? ? ? ? ? ? ?MOV????? DS, AX?

? ? ? ? ? ? ? 5. 過程定義偽指令?

? ?過程是程序的一部分,它可以被程序調用。每次可調用一個過程,當過程中的

? ?指令執行完后,控制返回調用它的地方。過程的定義是用過程定義偽指令完成? ? ? ? ?的。

? ?格式: 過程名???? PROC?? [NEAR / FAR]? ??

?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?過程體

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? RET

? ? ? ? ? ? ? ?過程名???? ENDP

? ?過程名:自定義符,開始、結束要相同;有三個屬性(段地址,偏移地址和距

? ? ? ? ? ? ? ?離屬性)

???RET:可有多個RET,一般作為最后一條指令

? ? ? ? ? ? ? ? ? 例: CODE SEGMENT

? ? ? ? ? ? ? ? ? ? ? ? ? ?APRC? PROC? NEAR

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ADD? AX, BX

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? …

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? RET

? ? ? ? ? ? ? ? ? ? ? ? ? ?APRC? ENDP

? ? ? ? ? ? ? ? ? ? ? ? ? START: MOV? AX, NOM

? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ?CALL APRC

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?……

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?CALL? APRC

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?…….

? ? ? ? ? ? ? ? ? ? ? ? ? ?CODE? ENDS

? ? ? ? ? ? ? ? ? ? ? ? ? ?END STAR????????

? ? ? ? ? ? ?6.? 模塊定義及通信偽指令?

? 匯編語言可以把程序劃分成許多模塊,并對每個模塊獨立地進行匯編和調試。

? ⑴ 模塊開始偽指令

? ? ? ? ?格式:NAME?? 模塊名

? ? ? ? ?功能:指明程序模塊的開始,并指出模塊名。

? ? ? ? ?說明:模塊名是自定義符,不能是系統保留字。若該項缺省,則取TITLE

? ? ? ? ? ? ? ? ? ? 語句中的頁標題6個字符;若沒有TITLE語句,則取源程序文件名

? ? ? ? ? ? ? ? ? ? 為模塊名。

?? ⑵ 模塊結束偽指令(源程序結束偽指令)

? 格式:END?? 啟動標號或過程名

? 功能:END表示一個模塊(源程序)的結束。通知匯編程序源程序到此

? ? ? ? ? ? ?結束,并給出執行程序的入口位置。

? 例:????? START: MOV? ? AX,DATA

???????????????????????????????????????? ┇

?????????????????????????????? END? START?

? ? ? ? ? ? ? ? ? ? ? ? ?注意:①END與NAME聯合使用,當NAME缺省時,END 值表示原程序

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?的結束。

? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ?②匯編處理只進行到END為止。


(十).?宏指令

? ? ? ? ?1. 宏定義及其調用

? ? ? ? ? ? ?宏定義格式:? 宏指令名?? MACRO?? [形參,形參,┅]
?????????????????????????????????????? 宏體????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ENDM

? ? ? ? ? ? ?宏調用的格式為:? 宏指令名? [實參,實參,┅]

? ? ? ? ? ? ?例:為了實現ASCII碼和BCD碼之間的相互轉換,往往需要把AL中的內容左移或右

? ? ? ? ? ? ? ? ? ? 移4位。設左移4位,可用下列指令序列實現:

? ????MOV? CL,4

? ????SAL??? AL,CL

? ? ? ? ? ? ?若多次使用,則可用一條宏指令來代替,宏定義如下:

? SHIFT???MACRO

? ? ? MOV? CL,4

? ? ? SAL? AL,CL

? ENDM

? ? ? ? ? ? ? 例:

? ? ? MOV? AL,[DI]

? ? ? ADD? AL,[SI]

? ? ? SHIFT? ;宏調用

? ? ? MOV? [BX],AL

宏和子程序區別:??宏是原樣替換,子程序是跳轉執行


(十一).?匯編語言程序的結構

? ? ? ? ? ? ? 一個標準的匯編語言源程序的框架結構:

DATA??? SEGMENT

? ? ? ? ? ? ? ? ? ┇?定義數據段

DATA??? ENDS

CODE?? SEGMENT?定義代碼段

ASSUME? CS:CODE,DS:DATA

START: MOV?? AX,DATA? ?裝載數據段

? ? ? ? ? ? ?MOV?? DS,AX??設置用戶數據段,附加段

? ? ? ? ? ? ? ? ?┇

MOV??? AH,4CH

INT????? 21H? ? ? ? ?返回DOS

CODE? ENDS? ? ???????????????

? ? ? ? ? ? ? ?END??? START


(十二).?DOS系統功能調用

? ? ? ? ? ? ?MS-DOS系統中設置了幾十個內部子程序,在匯編語言源程序中可采用軟中斷指令

? ? ? ? ? ? ?調用它們。 MS-DOS中常用的軟中斷有8條,系統規定它們的中斷類型碼為20H—

? ? ? ? ? ?? 27H, INT? 21H是DOS系統功能調用。

? ? ? ? ? ? ?INT 21H中斷本身包含很多子程序,調用它們時采用統一的格式:

? ? ? ? ? ? ?①傳送入口參數到指定寄存器中

? ? ? ? ? ? ?②功能號送入AH寄存器

? ? ? ? ? ? ?③INT 21H

? ? ? ? ? ? ?1. 鍵盤輸入單字符——1號系統功能調用

? ? ? ? ? ? ? ? ?格式:MOV? AH,1

? ? ? ? ? ? ? ? ? ? ? ? ? ? INT?? 21H

? ? ? ? ? ? ? ? ?功能:無入口參數,執行時,系統等待鍵盤輸入,待按下任何一鍵,系統先檢查

? ? ? ? ? ? ? ? ? ? ? ? ? ? 是否是Ctrl—Break鍵。若是則退出,否則將鍵入值置入AL中,并在屏幕

? ? ? ? ? ? ? ? ? ? ? ? ? ? 上顯示該字符。

? ? ? ? ? ? ?2. 輸出單字符——2號系統功能調用

? ?格式: MOV? DL,‘A’

? ? ? ? ? ? ? ?MOV? AH,2

? ? ? ? ? ? ? ?INT? ? 21H?

? ?功能:將DL中的字符送屏幕顯示。

? ? ? ? ? ? ?3. 鍵盤輸入字符串——0AH號系統功能調用

? ? ? ? ? ? ? ? ?功能:將鍵盤輸入的字符串寫入到內存緩沖區中,必須事先定義一個緩沖區

? ? ? ? ? ? ? ? ?緩沖區的第一個字節:該緩沖區存放的字節數。

? ? ? ? ? ? ? ? ?第二個字節:預留,系統填寫實際的字符數

? ? ? ? ? ? ? ? ?從第三個開始:存放字符串,回車(0DH)表示結束

? ? ? ? ? ? ? ? ?格式:????????? ┇

? ? ? ? ? ? ? ? ? ? ? ? ? BUF? DB? 20

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? DB? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?DB? 20 DUP(?)? ??????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ┇?

? ? ? ? ? ? ? ? ? ? ?? ? MOV? DX,OFFSET? BUF

? ? ? ? ? ? ? ? ? ? ? ? ?MOV? AH,0AH

? ? ? ? ? ? ? ? ? ? ? ? ?INT? 21H?

? ? ? ? ? ? ?4.??輸出字符串——9號系統功能調用

? ? ? ? ? ? ? ? ? 功能:將指定的內存緩沖區中的字符串在屏幕上顯示出來,緩沖區的字符串

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?以“$為結束標志

? ? ? ? ? ? ? ? ? 格式:?BUF? DB? ‘GOOD BYE$

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ┇

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MOV?? DX,OFFSET? BUF

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? MOV?? AH,9

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? INT??? 21H

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 結果:顯示GOOD BYE

? ? ? ? ? ? ?5.??返回操作系統——4CH號系統功能調用

? ? ? ? ? ? ? ? ? 格式:?? MOV? AH,4CH

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? INT?? 21H

第四章: 存儲器

1. 存儲器基礎

1.?存儲系統的層次結構

? ? 存儲系統的層次結構——就是把各種不同存儲容量,不同存儲速度的存儲器,按照一定

? ? 的體系結構方式組織起來,使所存放的程序數據按層次分布在各種存儲器中

? ? 三級存儲系統:? 高速緩沖存儲器——主存儲器——外存儲器

? ? (1)主存儲器—外存儲器(彌補主存容量的不足)

? ? ? ? 主存(內存)一般把具有一定容量且速度較高的存儲器作為內存,CPU可直接用指

? ? ? ? 令對內存儲器進行讀寫。存放現行程序和數據,存取速度快,容量有限,是主機的一

? ? ? ? 部分。通常用半導體存儲器作為內存。

? ? ? ? 外存(輔存或海存):存儲容量大、速度較低、位于主機之外的存儲器。用來存放當

? ? ? ? 前暫時不用的程序和數據。CPU不能直接用指令對外存進行讀寫。要使用外存中的信

? ? ? ? 息,必須先將它調入內存。

? ? ? ? 內存-外存存儲層次的形成解決了存儲器的大容量和低成本之間的矛盾

? ? (2)主存儲器—高速緩沖存儲器

?????? ? 為使主存儲器與CPU的速度相匹配,提高CPU訪問存儲器的速度,在CPU和內存中

? ? ? ? ?間設置高速緩沖器(cache)。

? ? ? ? ?高速緩存-內存層次的形成解決了速度與成本的矛盾。

????在現代微機中同時采用這兩種存儲層次,構成cache-內存-外存三級存儲系統。這三級存

? ? 儲系統的形成,滿足了現代微型計算機對存儲系統的速度快、容量大且價格低廉的要求。

? ? 高速緩沖存儲器(cache):

? ? 高速緩沖存儲器是存在于主存與CPU之間的一級存儲器, 由靜態存儲芯片(SRAM)組成,

? ? 容量比較小但速度比主存(內存)高得多, 接近于CPU的速度。它和主存儲器一起構成

? ? 一級的存儲器。高速緩沖存儲器和主存儲器之間信息的調度和傳送是由硬件自動進的。

? ? 某些機器甚至有二級三級緩存,每級緩存比前一級緩存速度慢且容量大。


2.?存儲器的分類(按存取方式分類)

? ? ①隨機存儲器(RAM)

? ? ? ? 既可讀有可寫,又稱讀/寫存儲器。如主存。

? ? ②只讀存儲器(ROM)(可以隨機讀)

? ? ? ? 只能讀,不能寫。存放固定不變的系統程序和子程序等。

? ? ③順序存儲器(SAM)

? ? ? ? 按照順序進行讀/寫 ,如磁帶。?

? ? ?RAM和ROM區別:? RAM掉電消失,ROM永久保存


3.?存儲器的技術指標

? ? (1)存儲容量——通常以允許存放的字數×位數或字節數表示存儲器的容量。

? ? ? ? ?32K×16?? 1KB=2十次方B=1024B,1MB=2十次方KB=1024KB

? ? ? ? ?1KB=1K×8b

? ? ? ? ?容量=單元數*每個單元位數

? ? ? ? ?一般單元數就是尋址范圍就是2的地址線次方,位數就是數據線條數

? ? (2)存取周期(又稱讀寫周期或訪問周期)

? ? ? ? 通常指連續存入或取出兩個數據所間隔的時間。

? ? (3)取數時間——從CPU發出讀命令開始,直到存儲器獲得有效讀出信號的一段時間。

? ? (4)可靠性——通常以平均無故障工作時間來衡量存儲器的可靠性。

? ? (5)經濟性——常以“性能價格比”來衡量存儲器經濟性能的好壞。

? ? 存取周期>取數時間


4.?隨機讀寫存儲器

? ? (1)靜態RAM(SRAM)

? ? ? ? 靜態RAM的工作原理:MOS型靜態RAM的基本存儲單元,可由六個MOS場效應晶體

? ? ? ? 管構成,其基本存儲單元電路如圖所示。

? ? ? ??靜態RAM組成:將多個存儲單元按一定方式排列起來,就組成了一個靜態RAM存儲器,

? ? ? ? 如圖所示。

? ? ? 靜態RAM舉例:Intel 2114? ? 1K×4位? ?4094字節? ? 64×64矩陣

? ?(2)動態RAM(DRAM)

? ? ? ?特點:存儲的信息具有一定的時間性,在很短的時間內,其數據是有效的,超過一定

? ? ? ?的時間,數據就消失了。為了使數據常在,就要周期性地對所在數據重寫(刷新),

? ? ? ?這種存儲器為動態存儲器。

? ? ? ?動態RAM的使用舉例:

? ? ? ?例:用4K?1的存儲芯片構成16K字節(8位)的內存模塊。??

? ? ? ? ? ? ? 需要32個 4K?1的芯片

? ? ? ? ? ? ?分4組:每組由4K?1的8個芯片組成(4K字節)。

? ?靜態RAM(SRAM)和動態RAM(DRAM)的區別:

①DRAM用作內存比較多,SRAM用作cache比較多。
②SRAM不需要刷新電路就能夠保存數據,所以具有靜止存取數據的作用。而DRAM則
需要不停地刷新電路,否則內部的數據將會消失。
③SRAM追求的速度,所以一般做的比較小(K)而DRAM追求的僅僅是暫時性的存儲數
據,所以較大(G)且較為廉價。
④由于SRAM的容量較小,所以行和列的地址可以一次性送入,而DRAM則需要將行和
列的地址分別送入。

5. 半導體只讀存儲器

? ? (1)掩膜式只讀存儲器ROM

? ? ? ? 制造廠家根據程序設計者編好的程序組成的“1”、“0”代碼矩陣,利用集成電路工藝制

? ? ? ? 造出相應的掩膜圖案并生產出ROM芯片。這種ROM中的信息是永久性存儲。使用

? ? ? ? 時只能讀出而不能寫入新內容。

? ?(2)可編程的只讀存儲器PROM

? ? ? ? 制作時不寫入信息,使用時可寫入自己的程序。但寫入是一次性的,一旦寫入內容后

? ? ? ? 就不能更改,所以稱一次性可編程序只讀存儲器,又稱為現場可編程序只讀存儲器。

? (3)?可編程、可擦除的只讀存儲器——EPROM

? ? ? ?用戶使用時可重復編程、可多次改寫所寫內容。

? ? ? (1)紫外線擦除的EPROM

? ? ? ? ? 采用紫外線擦去原存內容,再用專門寫入器改寫內容。因此又稱UVEPROM。實

? ? ? ? ? 際中,用紫外線(或X射線)燈,相距3cm,進行照射10~20min,就可把EPROM

? ? ? ? ? 中的原存全部信息抹去,并成為全“1”狀態。然后,再根據用戶程序,用加電壓的

? ? ? ? ? 手段使要存入“0”的那些存儲位進行寫“0”,而對要存“1”的存儲位不加電壓,仍保存

? ? ? ? ? 原有的“1”代碼。

? ? ? ?? ?常用的:2732(4KB)? 2764 (16K)??? 27256??? 27128? ? ?Intel 2716

? ?(2)電可擦除只讀存儲器

? ? ? ? ? 簡稱為EEPROM或E的平方PROM 。

? ? ? ??? 它是采用金屬—氮—氧化物—硅(MNOS)集成工藝制成的。使用時讓電流只通過

? ? ? ? ? 指定的存儲單元,把其中一個字(或字節)擦去并改寫,其余未通入電流的單元內

? ? ? ? ? 容保持不變。

? ? ? (3)EPROM芯片舉例——Intel 2716

? ? ? ? ? 16K位,可組成2K×8的紫外線擦除的EPROM

2. 兩塊重要的存儲芯片

1.?SRAM-6264

2.?Intel 2164

? ? ?2164A的容量為64K×1位,即片內共有64K(65536)個地址單元,每個地址放一位數

? ? ?據。片內尋址需64K即16根地址線。為減少引腳,地址線分為兩部分:行地址與列地

? ? ?址,故地址譯碼線只需8條,內部設有地址鎖存器來鎖存行列地址。

?3. 編址和譯碼

門電路:

存儲器地址分配及譯碼:

存儲器地址分配在進行存儲器與CPU連接前,首先要確定內存容量的大小和選擇存儲器芯片的容量大小。?

存儲器地址譯碼

常用的譯碼電路:

一種常見的3∶8譯碼器74LS138

存儲器與CPU的連接:

存儲器芯片的外部引腳按功能分為數據線、地址線和控制線。CPU對存儲器的讀寫操作首先是向其地址線發地址信號,然后向控制線發讀寫信號,最后在數據線上傳送數據信息。每一塊存儲器芯片的地址線、數據線和控制線都必須和CPU建立正確的連接,才能進行正確的操作。

CPU與存儲器的連接就是指地址線、數據線和控制線的連接。重點說明的是存儲器與CPU地址總線的連接方式,必須滿足對這些芯片所分配的地址范圍的要求。

CPU發出的地址信號必須實現兩種選擇:

? (1)片選:對存儲器芯片的選擇,使相關芯片的片選端CS為有效。

? (2)字選:在選中的芯片內部再選擇某一存儲單元。

? ? 片選信號和字選信號均由CPU發出的地址信號經譯碼電路產生,其中:

? ? ? ? 片選信號:由存儲器芯片的外部譯碼電路產生,需自行設計。

? ? ? ? 字選信號:由存儲器芯片的內部譯碼電路產生,這部分譯碼電路不需用戶設計。

下面介紹外部譯碼電路的兩種譯碼方法。

1. 線性選擇法

????直接用CPU地址總線中某一高位線作為存儲器芯片的片選信號,簡稱為線選法。

? ??優點:連接簡單,片選信號的產生不需復雜的邏輯電路。

? ? 缺點:(1) 當采用線選法時,高位地址未全部用完、而又沒有對其實施控制時,會出現

? ? ? ? ? ? ? ? ? ? 地址的不連續和多義性。

? ? ? ? ? ? ? ?(2)即使所有的高位地址線都用作線選,其能尋址的存儲空間也十分有限。

2. 全譯碼法

????將高位地址全部作為譯碼器的輸入,用譯碼器的輸出作為片選信號。

????在這種方法中,低位地址線用作字選,與芯片的地址輸入端直接相連;高位地址線全部

? ? 連接進譯碼電路,用來生成片選信號。這樣,所有的地址線均參與片內或片外的地址譯

? ? 碼,不會產生地址的多義性和不連續性。在全譯碼方式中,譯碼電路的核心常用一塊譯

? ? 碼器充當,例如74LS138等。

? ? 地址連續:前一片存儲器的最后一個單元地址加一是后一片存儲器的首單元

? ? 容量=末字節地址-首字節地址+1?

? ? 末字節地址=首字節地址+容量-1?

? ? ?????末字地址=首字地址+容量-2

第五章: 輸入輸出及中斷技術

1. io接口、編址、傳送方式

1.?io接口
? ? I/O接口:?將外設連接到總線上的一組邏輯電路的總稱。用以實現外設與主機之間的信息
交換
? ? I/O端口:接口中的寄存器,可以由CPU讀或寫。
端口分為: 數據端口? 狀態端口? 控制端口?
? ? 一個簡單的外設接口框圖 :


2.?編址

? ? 統一編址 (存儲器映射):在這種編址方式中,I/O端口和內存單元統一編址,即把I/O端口
? ? ? ? ? ? ? ? ? ?當作內存單元對待,從整個內存空間中劃出一個子空間給I/O端口,每一個I/O
? ? ? ? ? ? ? ? ? ?端口分配一個地址碼,用訪問存儲器的指令對I/O端口進行操作。

? ? 獨立編址I/O端口編址和存儲器的編址相互獨立,即I/O端口地址空間和存儲器地址空

? ? ? ? ? ? ? ? ? ? ? 間分開設置,互不影響。采用這種編址方式,對I/O端口的操作使用輸入/輸

? ? ? ? ? ? ? ? ? ? ? 出指令(I/O指令)。

? ? 統一編址的優點:①訪問內存指令均適用于I/O端口,對I/O端口的數據處理能力強

②cpu無需產生區別訪問內存操作和I/O操作的控制信號,從而可減少
引腳。

? ? 統一編址的缺點:①程序中I/O操作不清晰,難以區分程序中的I/O操作和存儲器操作

②I/O端口占用了一部分內存空間
? ? 獨立編址的優缺點(8086):①不占用內存空間
②使用I/O指令,程序清晰,很容易看出是I/O操作還是存儲器操作
③譯碼電路比較簡單(因為I/0端口的地址空間一般較小,所用地址線也就較少)
④I/O獨立編址缺點是:需要特定的引腳來區分內存和IO單元的訪問
? ? CPU同外設間交換的信息有三類:

I/O端口的訪問:

? ? (1)輸入指令

? ? ? ? 格式:IN?? 累加器(AX或AL),端口(DX或00-FFH)

? ? ? ? 功能:把端口中數據讀到AL、或AX中。

? ? ? ??例:IN?? AL,21H? ?????? MOV? DX,201H

? ???????????????????????????????????????????? IN?? AX,DX

? ? (2)輸出指令

? ? ? ? 格式:OUT?? 端口(DX或00-FFH),累加器(AX或AL)

? ? ? ? 功能:把寄存器AL、或AX中數據輸出到端口。

? ? ? ? 例: OUT? 32H,AL? ? ???MOV? DX,201H

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?IN? DX,AX?


3. CPU與外設交換數據的方式

? ??程序控制傳遞方式 :無條件傳送? 查詢式傳送? 中斷方式傳送

? ? 特點:(1)以CPU為中心,控制來自CPU,通過預先編寫好的I/O程序實現數據的傳送。

? ? ? ? ? ? ? ?(2)速度較低,傳送路徑經過CPU內部寄存器同時數據I/O響應也比較慢。

? ? (1)無條件傳送方式 (同步傳送方式)?

? ? ? ? 特點:適用于總是處于準備好狀態的外設

? ? ? ? 方法:把I/O指令插入到程序中,當程序執行到該指令時,外設已作好準備,于是在此

? ? ? ? ? ? ? ? ? ?指令時間內完成數據傳送任務。

? ? ? ? 優點:軟件及接口硬件簡單

? ? ? ? 缺點:CPU效率低,只適用于簡單外設,適應范圍較窄????????

? ? (2)查詢傳送方式(異步傳送方式)

??????? 當CPU同外設不同步且不知道外設工作速率時,可采用此方式傳送。傳送前,CPU必

? ? ? ? 須先對外設進行狀態檢測。

? ? ? ? 適用場合:①外設并不總是準備好? ? ? ②對傳送速率和效率要求不高

? ? ? ? 對外設及接口的要求:①外設應提供設備狀態信息? ? ②接口應具備狀態端口

? ? ? ? 完成一次傳送過程的步驟如下:

? ? ? ??①通過執行一條輸入指令,讀取所選外設的當前狀態

? ? ? ? ? ?外設 “忙”或“未準備就緒” —>重復檢測外設狀態

? ? ? ? ? ?外設 “空”或“準備就緒” —>發出I/O指令,進行一次數據傳送。

? ? ? ? ②根據該設備的狀態決定程序去向? ? ? ? ?

優點:軟件比較簡單
缺點:CPU效率低,數據傳送的實時性差,速度較慢
? ? (3)中斷傳送方式

? ? ? ? ?無條件傳遞和查詢傳送的缺點是:CPU和外設只能串行工作。

? ? ? ?? 為提高系統的工作效率,充分發揮CPU的高速運算能力,引入了“中斷”系統,利用中

? ? ? ? ?斷來實現CPU與外設之間的數據傳送,這就是中斷傳送方式。

? ? ? ? ?特點:外設在需要時向CPU提出請求,CPU再去為它服務。服務結束后或在外設不

? ? ? ? ?需要時,CPU可執行自己的程序。

? ? ? ? ?中斷使CPU和外設以及外設之間能并行工作。

? ? ? ? ?工作過程:在中斷傳送方式中,通常在程序中安排好某一時刻啟動某一臺外設,然后

? ? ? ? ?CPU繼續執行其主程序,當外設完成數據傳送的準備后,向CPU發出中斷請求信號,

? ? ? ? ?在CPU可以響應中斷的條件下,現行主程序被“中斷”,轉去執行“中斷服務程序”,在

? ? ? ? ?“中斷服務程序”中完成一次CPU與外設之間的數據傳送,傳送完成后仍返回被中斷的

? ? ? ? ?主程序,從斷點處繼續執行

優點:CPU效率高, 實時性好,速度快
缺點:程序編制較為復雜
? ? 以上三種I/O方式的共性:
均需CPU作為中介:
軟件: 外設與內存之間的數據傳送是通過CPU執行程序來完成的
?硬件: I/O接口和存儲器的讀寫控制信號、地址信號都是由CPU發出的?
缺點:程序的執行速度限定了傳送的最大速度

? ? (4)DMA(直接存儲器存取)傳遞方式

? ? ? ? 外設和內存之間直接傳送數據的方式,即DMA傳送方式。在DMA傳送方式中,對這

? ? ? ? 一數據傳送過程進行控制的硬件稱為DMA控制器(DMAC)。

? ? ? ? 特點:外設直接與存儲器進行數據交換 ,不需要CPU干預也不需軟件介入。

總線由DMA控制器(DMAC)進行控制(CPU要放棄總線控制權),
內存/外設的地址和讀寫控制信號均由DMAC提供。
? ??DMA操作的基本方法:①周期挪用(Cycle Stealing)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?②周期擴散

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?③CPU停機方式(最常用,最簡單的傳送方式)

??????? ? ? ? DMA的傳送方式:

? ? ? ? ①單字節傳送方式:每次DMA傳送只傳送一個字節就立即釋放總線。

? ? ? ? ②成組傳送方式:? DMAC在申請到總線后,將一組數據傳送完后才釋放總線,而不管中? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 間DREQ是否有效。

? ? ? ? ③請求傳送方式(查詢傳送方式):

? ? ? ? ? ?成組傳送,但每傳送一個字節后,DMAC查DREQ,有效傳,無效掛起。

? ? ? ? DMAC(DMA控制器)的基本功能:

? ? ? ? ①能接收外設的請求,向CPU發出DMA請求信號。

? ? ? ? ②當接到CPU發出DMA響應信號后,DMAC接管對總線的控制,進入DMA方式。

? ? ? ? ③能尋址存儲器,即能輸出地址信息和修改地址。

? ? ? ? ④能向存儲器和外設發相應的讀/寫控制信號。

? ? ? ? ⑤能控制傳送的字節數,判斷DMA是否結束。

? ? ? ? ⑥在DMA傳送結束后,能結束DMA請求信號,釋放總線,使CPU恢復正常工作。

? ? ? ? DMA過程:
? ? ? ? 首先DMAC通過HOLD引腳向CPU發出DMA請求信號,若CPU允許DMA傳送,通過

? ? ? ? HLDA引腳發出允許命令;此時CPU總線交權,有關的所有引腳變為高阻態,總線的

? ? ? ? 控制權交由DMAC來處理。當DMA傳送結束后,DMAC取消向CPU發出的HOLD信號,

? ? ? ? CPU重新取回總線控制權。

?2. 中斷

概述

中斷——外設隨機地(指主程序運行到任何一條指令時)或程序預先安排產生中斷請求信號,暫停CPU正在運行的程序,轉入執行稱為中斷服務的子程序,中斷服務完畢后,返回到主程序被中斷處繼續執行的過程。?

中斷源——引起中斷的事件

通常中斷源有以下幾種:

(1) 輸入、輸出設備: 如鍵盤、顯示器和打印機等;

(2) 數據通道: 如磁帶等;

(3) 實時控制過程中的各種參數;

(4) 故障源: 如掉電保護等;

(5) 控制系統的現場測試信號以及軟件中斷。

中斷系統應具有以下功能:

(1)?能實現中斷響應、中斷服務和中斷返回

(2) 能實現中斷優先級排隊

(3) 能實現中斷嵌套 ????


1. 中斷過程

?????一個完整的中斷基本過程包括:中斷請求、中斷判優、中斷響應、中斷處理中斷返回

? ? ?等五個基本過程。

? ? ?(1)中斷請求

????? ? ?當某一外部中斷源要求CPU中斷時,首先要向CPU發出中斷請求,該請求信號被存

? ? ? ? ?放在中斷源接口電路的中斷請求觸發器中暫存,并通過INTR(可屏蔽中斷請求引腳)

? ? ? ? ?或NMI(不可屏蔽中斷請求引腳)信號線引入CPU 。

? ? ?(2)中斷判優(優先級)

? ? ? ?? ?由于中斷請求是隨機的,在某一瞬間有可能出現兩個或兩個以上中斷源同時提出請求

? ? ? ? ??的情況。這時必須根據中斷源的輕重緩急,給每個中斷源確定一個中斷級別—— 中

? ? ? ? ? 斷優先權 。

? ? ? ? ? 另一個作用能實現中斷嵌套 。

? ? ?(3)中斷響應

?? ? ? ? ?CPU每執行完一條指令后,查詢是否有中斷請求。當查詢到有中斷請求且此時CPU

? ? ? ? ? 允許中斷(即IF=1,開中斷),CPU響應中斷。

? ? ? ? ??響應中斷后系統做的工作:

? ? ? ? ??①自動關中斷;通過使IF清零來實現

? ? ? ? ??②保存FR和斷點

? ? ? ?? ?③形成中斷入口地址。通過中斷矢量,查詢中斷地址表實現。

? ? ? (4)中斷處理

? ? ? ? ? ?執行中斷服務程序

? ? ? ? ? ?①中斷服務開始要用壓棧指令(PUSH)將要用到的寄存器內容壓入堆棧,以便返

? ? ? ? ? ? ? ?回到主程序時能正確運行。——保護現場

? ? ? ? ? ?②中斷服務程序結束后,用POP指令把所保存的有關寄存器的內容從堆棧彈出,以

? ? ? ? ? ? ?? 便恢復到中斷前的狀態。——恢復現場

? ? ? ?(5) 中斷返回

? ? ? ? ? ? 通常在中斷返回前,要用指令開中斷,以便再次響應中斷,然后執行中斷返回指

? ? ? ? ? ? 令IRET。IRET指令具有彈出斷點地址送IP和CS及恢復標志寄存器FR內容的功能。

2.?中斷優先權

? ? (1) 軟件查詢方式?

? ? (2)硬件優先權排隊電路。

①簡單硬件方式——菊花鏈法或鏈式優先權排隊電路。

②專用硬件方式——可編程的中斷控制器?

3.?8086/8088的中斷系統 ?

1. 中斷分類:? ?

? ? 硬件中斷——由外部硬件產生的,也稱外部中斷

? ? ? ? 非屏蔽中斷:通過CPU的NMI引入,它不受內部中斷允許標志位IF的屏蔽,一般在一個? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 系統中只允許有一個非屏蔽中斷。?

? ? ? ? 可屏蔽中斷:通過CPU的INTR引入 ,它受IF的控制。只有在IF=1時,CPU才能響應中? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 斷源的請求。當IF=0時,中斷請求被屏蔽。

? ??軟件中斷——CPU根據軟件的某些指令或者軟件對標志寄存器某個標志位的設置而產生? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 的,由于它與外部中斷電路完全無關,故稱為內部中斷。?

2. 中斷向量表

? ? 存放中段服務器程序的入口地址的,

? ? 每個中斷服務程序的入口地址都是由段地址:偏移地址

? ? 所以每個中斷占用4字節

? ? 8086中斷向量表的地址為00000H-003FFH? ?共1KB

? ? 所以8086支持1KB/4B=256個中斷

????存放中斷地址的一段內存空間稱中斷向量表。

存放各類中斷的中斷服務程序的入口地址??
表的地址位于內存的0000∶0000~0000∶03FFH(即0段的0000~03FFH)大小為1KB,
共256個入口
每個入口占用4個單元,依次為IP:CS, 低字為段內偏移,高字為段基址
? ? 第N號地址占用的是4N到4N+3的四個地址
中斷向量表:

3.??內部中斷——軟中斷

?????在8086/8088系統中,通過執行中斷指令或由CPU本身啟動的中斷稱為內部中斷

? ?(也稱軟件中斷)。

???? 除單步中斷外,內部中斷無法用軟件禁止,即不受IF的影響。

? ? ?(1)內部中斷的類型

? ? ? ? ?①0型中斷——除法出錯中斷

? ? ? ? ?②1型中斷——單步中斷

? ? ? ? ?③3型中斷——斷點中斷

? ? ? ? ?④4型中斷——溢出中斷

? ? ? ? ?⑤INT n指令中斷

? ? ?(2)內部中斷的處理過程

? ? ? ? ? 如何獲取相應的中斷類型碼

? ? ? ? ? 專用中斷:中斷類型碼是自動形成的。

? ? ? ? ? 幾種類型碼為:類型0、1、3、4。

? ? ? ? ? 對于INT n指令,其類型碼為指令中給定的n。

? ? ? ? ? 取得了類型碼后的處理過程:

? ? ? ? ? ? ? ①類型碼*4 —> 向量表指針。

? ? ? ? ? ? ? ②標志寄存器FR入棧,保護各個標志。

? ? ? ? ? ? ? ③清除IF和TF標志,屏蔽新的INTR中斷和單步中斷。

? ? ? ? ? ? ? ④保存斷點(斷點處IP和CS壓棧,先壓CS后壓IP)。

? ? ? ? ? ? ? ⑤從中斷向量表中取出中斷服務程序入口地址分別送入IP和CS中。

? ? ? ? ? ? ? ⑥按新的地址執行中斷服務程序。

4.??外部中斷——硬中斷

? ? ?非屏蔽中斷——NMI引腳產生的中斷,不受IF控制,類型號為2。

? ? ?可屏蔽中斷——由CPU的INTR端接收可屏蔽中斷。受IF控制,只有當IF=1, 在一條指令

? ? ?執行結束后,CPU才能響應可屏蔽中斷的請求。

? ? ?(1)外部中斷的響應:

? ? ? ? ?CPU采樣到非屏蔽中斷請求時,自動提供中斷類型號2,然后根據中斷類型號,查找

? ? ? ? ?中斷向量表指針,其后的處理與內部中斷一樣。

? ? ? ? ?當INTR信號有效,如IF=1,則CPU執行完一條指令后,進入可屏蔽中斷響應周期。

? ? ? ? ?在中斷響應周期中CPU從數據線中獲取外部設備的中斷類型碼。

? ? (2)外部中斷處理過程

? ? ? ??在外部中斷響應周期中,CPU獲取了外部中斷類型碼之后的中斷處理過程,與前述的

? ? ? ? 軟中斷過程順序是一樣的,不再贅述。

? ? ? ? 如果把CPU中斷響應周期的動作和前面講到的中斷響應過程結合起來,當一個可屏蔽

? ? ? ? 中斷被響應時,CPU實際執行了7個總線周期,即(內部中斷和NMI中斷沒有前兩步):

? ? ? ? ①執行第一個INTA周期(發出應答信號)。

? ? ? ? ②執行第二個INTA周期,被響應的外設通過D0~D7的8位數據線提供中斷類型碼n

? ? ? ? ?(由8259A提供),CPU接到類型碼后,將它左移兩位,形成向量表指針存入暫存器。

? ? ? ? ③執行一個總線寫周期,把FR壓棧。同時IF和TF為0,以禁止中斷響應過程中其他可

? ? ? ? ? ? 屏蔽中斷的進入,同時也禁止了中斷過程中出現單步中斷。

? ? ? ? ④?執行一個總線寫周期,CS壓棧。

? ? ? ? ⑤執行一個總線寫周期,IP壓棧。(保護斷點?

? ? ? ? ⑥執行一個總線讀周期,從中斷向量表中取出中斷服務程序入口地址的偏移量送IP中。

? ? ? ? ⑦執行一個總線周期,從中斷向量表中取出中斷服務程序入口地址的段值送CS。

??對于非屏蔽與軟中斷跳過第⑴、⑵步,從第⑶步開始執行到第⑺步。

? ? ? ? 簡寫: ①INTA應答 ②INTA取中斷類型碼 ③壓FR關IF TF? ④壓CS? ⑤壓IP

? ? ? ? ? ? ? ? ? ? ⑥取新IP? ⑦取新CS

5. 各類中斷的優先權及中斷響應

????8086/8088系統中,中斷優先權次序從高到低為:除法出錯、INTn、INTO、NMI、INTR

? ? 、單步中斷。(內>外(NMI>INTR)>單步)

????除單步之外的內部優先權最高,其次是非屏蔽中斷,再次是可屏蔽中斷,而單步最低。

4.??8259A可編程中斷控制器

1.?8259A的功能

? ? Intel 8259A 是與8086系列CPU兼容的可編程中斷控制器,它的主要功能為:

? (1)具有8級優先權控制,級連可擴展至64級。

? (2)每一級中斷都可以屏蔽或允許。

? (3)在中斷響應周期,8259A可提供相應的中斷向量號(中斷類型號)。

? (4)8259A的工作方式,可通過編程來進行選擇。??


2. 8259A的結構及工作原理

? (1)8259A的內部結構

? (2)8259A的引腳

? (3)8259A的工作原理

???? ? ? ? 當系統通電后,首先應對8259A初始化。(由CPU執行一段程序,向可編程芯片寫

? ? ? ? ? ?入若干命令字,規定其工作狀態,使其處于準備就緒的狀態。

? ? ? ? ? ?8259A對外部中斷請求處理過程如下:

? ? ? ? ? ? ? ①當有IR0~IR7變 高,則IRR的相應位置1。

? ? ? ? ? ? ? ②若中斷請求線中至少有一條是中斷允許的,則由 INT 引腳向CPU發出中斷請求。?

? ? ? ? ? ? ? ③若CPU處于開中斷狀態,則在當前指令執行完后,用INTA信號作為響應。

? ? ? ? ? ? ? ④8259A接到INTA后,使最高優先權的ISR位置1,而相應的IRR位復位。在此周

? ? 期中,8259A不向系統數據總線送任何內容。

? ? ? ? ? ? ? ⑤在中斷響應周期的第二個信號期間8259A向數據總線輸送一個8位指針(向量號

? ?或類型號),CPU讀取此類型號,類型號*4作為地址就可從中斷向量表中取出中

? ?斷服務程序入口地址。

? ? ? ? ? ? ? ⑥若8259A工作在自動結束中斷AEOI方式(Automatic End Of Interrupt),在第二

? ? ? ? ? ? ? ? ? 個INTA結束時,使中斷源在ISR的相應位復位。否則,直至中斷服務程序執行

? ? ? ? ? ? ? ? ? 到EOI命令,才使ISR的相應位復位。


3.??8259A的編程

? ? ?8259A的編程分兩部分:

? ? ?初始化編程:由CPU向8259A送2~4字節的初始化命令字ICW

? ? ?工作方式編程:由CPU向8259A送三個字節的工作命令字OCW,以規定8259A的工作方

? ? ?式。該命令字可在8259A初始化命令字ICW后的任何時間寫入。

? ?(1)8259A的初始化編程

? ? ? ? ? ? 8259A的初始化命令字共4個(ICW1~ICW4)設置過程如圖:

? ? ? ? ? ?①寫初始化命令字ICW1——芯片控制字

? ? ? ? ? ②寫初始化命令字ICW2——中斷類型控制字( 中斷類型碼 )

? ? ? ? ? ? ? 用來定義中斷類型碼的高5位

? ? ? ? ?③寫初始化指令字ICW3—主/從片初始化(級連控制字)

? ? ? ? ?④寫初始化命令字ICW4——方式控制字

? ? ? ? ? ? ?對于8086/8088系統是必須設置的初始化命令字

(2)8259A的操作命令字?

? ? ? ? ?三個操作命令字OCW1~OCW3。

? ? ? ? ?在設置操作命令字時,順序上沒有嚴格的要求,但端口地址上有嚴格的規定。

? ? ? ? ?OCW1必須寫入奇地址端口(A0=1)

? ? ? ? ?OCW2和OCW3必須寫入偶地址端口(A0=0)

? ? ? ? ?①操作命令字OCW1 —屏蔽操作命令字

? ? ? ? ? ? ?用來設置或清除對中斷的屏蔽(設置IMR的值)

?? ? ? ?②操作命令字OCW2——中斷方式命令字

? ? ? ? ? ? 設置優先級循環和中斷結束方式

? ? ? ?③操作命令字OCW3——狀態操作命令字

? ? ? ? ? 設置和撤銷特殊屏蔽方式、設置中斷查詢方式、

? ? ? ? ? 設置對8259A內部寄存器的讀出命令


4.?8259A的工作方式?

? ? (1)中斷嵌套方式

? ?? ? ①全嵌套方式

? ? ? ? ? ?當工作在全嵌套方式時,8259A寫入初始化命令字后,中斷優先權是固定的,即IR0

? ? ? ? ? ?優先權最高,IR7優先權最低。當CPU響應中斷時,申請中斷的優先權最高的中斷源

? ? ? ? ? ?在ISR中相應位置位,而且把它的中斷向量號(類型碼)送到數據總線,在此中斷源

? ? ? ? ? ?的中斷服務程序完成前,與它同級或優先權更低的中斷源申請被屏蔽,只有優先權比

? ? ? ? ? ?它高的中斷源的申請才允許。

? ? ? ?②特殊全嵌套方式——級連情況

? ? ? ? ? 與全嵌套方式不同之處:

? ? ? ? ? 當某一從片中斷請求被響應后,主片不封鎖從片的INT輸入端,使該從片優先級更高

? ? ? ? ? 的中斷源的請求能得到響應。

? ? ? ? ? 當從片中斷處理快要結束時,用軟件檢查從片中斷服務寄存器ISR的內容是否為0,若

? ? ? ? ? 為0,則這個從片的中斷請求是唯一的,此時連發兩個中斷結束命令EOI,使主片、從

? ? ? ? ? 片都結束中斷。若只發一個EOI命令則只結束從片,不結束主片中斷。

? ?(2)中斷優先級循環方式

? ? ? ? 8259A中有兩種改變優先權的辦法

? ? ? ? ①自動循環方式

當某一個中斷源服務完以后,它的優先級變成最低的 。

? ? ? ? ②特殊循環方式

? ? ? ? ? ? 如果中斷源的優先權需要任意改變,就必須工作在特殊循環方式下。此時,可用程

? ? ? ? ? ? 序通過寫OCW2來改變優先權。

? ? ? ? ? ? 例如:? 設置IR5為最低優先權,則IR6的優先權就變為最高。這時OCW2最高三位為

? ? ? ? ?? ?110,而最低三位L2~L0應為101(最低優先權編碼)。?

? ? ? ? ? ? OCW2:?? 1 1 0 0 0 1 0 1

? ? (3)中斷屏蔽

? ? ? ? 8259A的8條中斷請求線的每一條都可根據需要單獨屏蔽,可通過寫入OCW1的命令

? ? ? ? 字來實現。

? ? ? ? 8259A有兩種屏蔽方式:

? ? ? ?①普通屏蔽方式

? ? ? ? ? ?特點:當執行某一級中斷服務程序時,只允許比該級優先級高的中斷源申請中斷,

? ? ? ? ? ? ? ? ? ? ? 不允許同級或低級的中斷源申請中斷。??????????

? ? ? ? ? ?方法:用OCW1將IMR寄存器某一位或幾位置1,即可將相應的中斷請求屏蔽掉。

? ? ? ? ? ?使用情況:當CPU執行主程序時,可將不希望響應的中斷源屏蔽;當CPU執行某中

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?斷服務程序時,可將不希望響應的比此優先級高的中斷源屏蔽。

? ? ? ?②特殊屏蔽方式

? ? ? ? ? ?特點:CPU正在處理某一級中斷時,只可對本級中斷進行屏蔽,允許級別比它高的

? ? ? ? ? ? ? ? ? ? ? 或比它低的中斷源申請中斷。????????

? ? ? ? ? ?方法:在某級中斷服務程序中首先用OCW3設置該方式(即D6D5=11),然后設置

? ? ? ? ? ? ? ? ? ? ??OCW1使該級的中斷申請被屏蔽,只有寫入這兩個控制字之后,才能使中斷

? ? ? ? ? ? ? ? ? ? ? 屏蔽寄存器IMR中該級中斷位被屏蔽(=1),不允許發生同級中斷,同時使

? ? ? ? ? ? ? ? ? ? ? 中斷服務寄存器ISR相應位置0,允許比該級低級別的中斷源申請中斷。若想

? ? ? ? ? ? ? ? ? ? ? 退出此方式,通過設置OCW3的D6D5=10,再執行輸出指令即可。

? ? ? ? ? ?使用情況:在中斷處理過程中,需要動態改變系統的優先級結構時。

? ?(4)程序查詢方式

? ? ? ?CPU利用查詢命令(OCW3中D2=1)獲得當前請求服務的優先級。此時8259A內部仍

? ? ? ?進行8級中斷請求的判優和屏蔽管理。查詢命令發出后,執行一條輸入指令,可得到查

? ? ? ?詢字。

? ?(5)?中斷結束命令

? ? ? ? ?根據不同的工作方式8259A可以有幾種不同的結束方法。

? ? ? ? ?①自動中斷結束方式(AEOI)

? ? ? ? ? ? 特點:中斷服務寄存器ISR的相應位清零是由硬件自動完成的。當某一級中斷被CPU

? ? ? ? ? ? ? ? ? ? ?? 響應后,CPU送回第一個INTA中斷響應信號,使ISR的相應位置1,當第二個

? ? ? ? ? ? ? ? ? ? ? ?INTA負脈沖結束時,自動將ISR的相應位置0。

? ? ? ? ? ? 實現方法:通過將ICW4的D1位設置為1實現。

? ? ? ? ? ? 使用環境:適用不要求中斷嵌套的情況。

? ? ? ? ②非自動中斷結束方式(EOI)

? ? ? ? ? ?特點:中斷返回前,必須用指令向8259A發中斷結束命令,即使ICW4的D1=0。若

? ? ? ? ? ? ? ? ? ? ? 級連,發2個。

? ? ? ? ? ?方法:首先將ICW4的D1=0,定為正常中斷結束方式,然后用OUT向8259A的偶地

? ? ? ? ? ? ? ? ? ? ? 址端口輸出OCW2操作控制字(OCW2的D7D6D5=001),實現自動結束命

? ? ? ? ? ? ? ? ? ?? ?令。

? ? ? ? ? ?使用環境:一般的中斷結束方式只能應用于全嵌套方式下,不能用于優先級自動循環? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 方式和優先級特殊循環方式。因為一般中斷結束方式結束的中斷是尚未處

? ? ? ? ? ? ? ? ? ? ?? ? ? ?理完的級別最高的中斷。若中斷級別改變,會使整個中斷過程混亂。

?? ? ???③特殊中斷結束方式

? ? ? ? ? ?特點:通過用指令發一中斷結束命令,同時給出結束中斷的中斷源是哪一級,使該中

? ? ? ? ? ? ? ? ? ? ? ?斷源的中斷服務寄存器ISR的相應位置0。

? ? ? ? ? ?使用環境:可應用在任何情況下,但要在中斷處理中給出中斷結束命令。

? ? ? ? ? ?使用方法:首先將ICW4的D1=0,定為正常中斷結束方式,然后通過將OCW2的? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?D7D6D5=011或111,D2D1D0位指出結束中斷處理的中斷源號,使該

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?中斷源在中斷服務寄存器ISR中的相應位清零。

? ? (6)讀8259A 的狀態

? ? ? ? 8259A的IRR、ISR、IMR的狀態,可通過讀命令讀入CPU,供用戶了解8259A的工作

? ? ? ? 情況。

? ? ? ? ①在讀命令之前,輸出一個OCW3,令其RR=1,RIS=0(D1D0=10),可利用讀命令

? ? ? ? ? ? 讀入中斷請求寄存器IRR的狀態。若RR=1,RIS=1(D1D0=11),可利用讀命令讀

? ? ? ? ? ??入中斷服務寄存器ISR的狀態。?

? ? ? ? ②對奇地址端口(A0=1)進行讀操作,可讀得中斷屏蔽寄存器IMR的值。


5.?由多片8259A組成的主從式中斷系統

????在一個系統中若中斷源多于8個,必須采用多片8259A進行級連。其中有一片主8259A,

? ? 若干片從8259A,可把中斷源擴展到64個。


6.??8259A的編程實例

? ? ?(1)初始化編程

? ? ? ? ?例:對IBM PC/XT機中使用的8259A初始化編程。硬件連接如圖。??

?第六章:常用接口技術

1. 8255

兩個頻率的比值=其周期比值的倒數

1s=10的三次方毫秒=10的六次方微妙=10的九次方納秒

1KB=2的十次方B? ? ? ?1KHZ=10三次方HZ

周期T與頻率F:S分之一=HZ ?1S=1HZ? 1ms=1000HZ=1KHZ? ?1納秒=1000000HZ=1MHZ

二極管:單向導電性(只能從陽極往陰極流),想導通只能在陽極接高電平,在陰極接低電平

發光二極管:導通就亮

二極管圖標
普通二極管
發光二極管
同反向驅動器

一.?并行通信和并行接口芯片

? ? ?1. 并行通信——就是把一個字符的全 部n個數據位用n條線同時進行傳輸。

? ? ? ? ?特點:傳輸速度快,效率高,用電纜多

? ? ? ? ?適用場合:數據傳輸率要求較高,而傳輸距離較短的場合。? ? ?

? ? ?2.?并行接口——實現并行通信的接口

? ? ? ? ?典型的并行接口和外設連接的示意圖 :?

二.?可編程并行通信接口芯片8255A的應用

? ? ?1. 8255A的內部結構

? ? ? ? ?端口A:輸入輸出均鎖存,數據不易丟失

? ? ? ? ?端口B:輸入不鎖存,輸出鎖存

? ? ? ? ?端口C:輸入不鎖存,輸出鎖存

? ? ? ? ?通常使用方法:

? ? ? ? ? ? (1)? 端口A、B作為獨立的輸入或者輸出端口

? ? ? ? ? ? (2)? 端口C配合端口A、B 。通過方式控制命令分成2個4位端口,傳送控制和狀態信

? ? ? ? ? ? ? ? ? 息。

? ? ? ? ?(2)?CPU接口部分

? ? ? ? ? ? ? ① 讀/寫控制邏輯電路

? ? ? ? ? ? ?? ? ? 功能:管理數據傳輸過程。

? ? ? ? ? ? ??② 數據總線緩沖器(雙向三態的8位數據緩沖器 )

? ? ? ? ? ? ? ? ? ?功能:通過它與系統數據總線相連。

? ? ?2. 8255A的引腳及功能

? ? ? ? ⑴?與外設相連的引腳?? 24個

? ? ? ? ? ? ?PA7~PA0——端口A數據線

? ? ? ? ? ? ?PB7~PB0——端口B數據線

? ? ? ? ? ? ?PC7~PC0——端口C數據線

? ? ? ? ?注意:因為低8位和偶地址端口相連,所以在8086系統中,將8255A的A1、A0引腳分

? ? ? ? ? ? ? ? ? ? 別接向系統總線A2、A1,并且CPU對8255A的端口進行訪問時,應將其地址

? ? ? ? ? ? ? ? ? ? 最低位A0設置為0。

? ? ?3. 8255A的控制字

? ? ? ? ?根據D7位的狀態來決定控制字分兩類。

? ? ? ? ?兩類 :①各端口的方式選擇控制字? ?②C端口按位置1/置0控制字

⑴方式選擇控制字

? ? ? ?(2)端口C置位/復位控制字(D7=0) ?

? ? ? ? ? ? 此控制字必須寫入8255A的控制口

? ? ?4. 8255A的工作方式

? ? ? ??(1)方式0——基本輸入/輸出方式

? ? ? ? ? ? ?特點:①端口A、端口B、端口C上、下均可作為輸入或輸出口,且各端口均是獨立

? ? ? ? ? ? ? ? ? ? ? ? ?的。

? ? ? ?②四個端口的輸入或輸出,可以有16種不同的組合。? ?

? ? ? ?③各端口輸入時無鎖存,輸出時鎖存。??

? ? ? ? ? ? ?使用場合:①同步傳送 (無條件傳送方式)? ? ? ? ? ②查詢式傳送

? ? ?? ?⑵方式1——選通的輸入/輸出方式

? ? ? ? ? ? 必須利用端口C提供的選通信號和應答信號

? ? ? ? ? ? 特點:①端口A和B要在端口C 的配合下工作。

? ? ? ? ? ? ? ? ? ? ? ?②端口C中有三位用于端口A的I/O控制,另有三位用于端口B的I/0控制,并

? ? ? ? ? ? ? ? ? ? ? ? ? 且提供中斷邏輯。

? ? ? ? ? ? ? ? ? ? ? ?③若只有一個數據端口工作在方式1,則另一個數據端口及端口C余下的五位

? ? ? ? ? ? ? ? ? ? ? ? ? ?可工作于方式0;若兩個數據端口都工作于方式1,那么端口C余下的兩位

? ? ? ? ? ? ? ? ? ? ? ? ? ?可作I/O位,也可進行置位/復位操作。

? ? ? ? ?注意:①方式2的I/O均為鎖存

? ? ? ? ? ? ? ? ? ? ②端口A工作于方式2時,? 端口B可工作于方式0或方式1

? ? ? ? ? ? ? ? ? ? ③端口C用5個數位提供控制和狀態信號

? ? 5. 8255A應用舉例

? ? ?(1)8255A工作方式0

? ? ? ? ? ?某接口設計采用一片8255A實現。其端口A連接并行打印機, 端口B連接紙帶讀入機。

? ? ? ? ? ?8255A工作于方式0,以查詢方式傳送數據。對8255A初始化并編寫相關的程序

? ? ? ? ? ?各控制信號的意義為:

? ? ? ? ? ? ? DATA STROBE ──數據選通信號。打印機要有一個寬度為0.5μs的脈沖,作為數

? ? ? ? ? ? ???據選通信號。由PC4位輸出。

? ? ? ? ? ? ??BUSY──當其有效時為高電平,此時表示打印機“忙”,不能接收新的輸出數據。

? ? ? ? ? ? ? 這是打印機的狀態信號。由PC2位讀入。

? ? ? ? ? ?? ?DRIVE RIGHT──此信號驅動紙帶前進一步,并讀一個字符。它是8255A給外設的

? ? ? ? ? ? ? 啟動信號。由PC5位輸出。

? ? ? ? ? ? ? DATA READY──紙帶讀入器的狀態信號。其為高電平表示紙帶讀入器已將數據準

? ? ? ? ? ? ? 備好。由PC3位讀入。

? ? ?⑵ 8255A工作于方式1應用舉例

? ? ? ? ?8255A工作于方式1,可以支持CPU以中斷方式和外設進行通信。下圖是一個使

? ? ? ? ?用8255A的接口電路,其中字符打印機以中斷方式工作。

2. 可編程定時/計數器8253

如何實現定時?

? ?1. 軟件方法:用一段程序實現延時:利用程序循環延遲指定的時間

? ? ? ?缺點:CPU占用率高,延時精度低, 兼容性低?

? ?2.?硬件方法:定時/計數器電路:利用脈沖計數在設定的時間輸出定時信號?

? ?3.?8253是一種硬件定時/計數器芯片

注意:定時器的本質是計數器,定時器是基準為時間的計數器


一. 外部引線及內部結構

? ? ??8253概貌:

? ? ? ? ? 3個16位的定時/計數器(通道)

? ? ? ? ? 24引腳雙列直插式

? ? ? ? ? 最高計數頻率2.6MHz

? ? ? ? ? TTL電平兼容

? ? ? ? ? 單電源+5V供電

? ? ? 計數通道的主要引線(每通道均相同):

CLKn???? 時鐘脈沖輸入,計數器的計時基準。
GATEn? ?門控信號輸入,控制計數器的啟停。
OUTn???? 計數器輸出信號,不同工作方式下產生不同波形。

? ? ? ? ?(n = 0~2)??? ? ? ? ?

二. 計數啟動方式

? ? ?編程結構:

? ? ?? ?計數器(3個)——?包括:16位初值寄存器,16位計數寄存器(減法計數器)?

? ? ? ? 控制寄存器—— 存放控制命令字(只寫)

? ? ? ? 占用4個地址— 3個計數器,1個控制寄存器

? ? ?控制字:

? ? ? ? 用于確定各計數器的工作方式。

8253必須先 初始化才能正常工作。
每個計數器都必須初始化一次。
CPU通過OUT指令把控制字寫入控制寄存器。

? ?? 8253的控制字格式:

? ? ?關于的控制字說明:

1. 8253只有一個工作方式控制字,但是對每個計數器而言,它們的工作方式控制字
內容一定各不相同(前兩位不同),所用各計數器的控制字需要分別設置,先后
不計。? ?
2. 8253的工作方式控制字的特殊形式可用于對計數器的當前計數值進行鎖存。
3. 在工作方式控制字被設置之后,隨后必須緊接著給計數器預設置計數初值,計數
器方可開始工作。

? ? ?定時/計數的工作過程

? ? ? ? ?1. 設置8253的工作方式(寫入控制字)

? ? ? ? ?2. 設置計數初值到初值寄存器

? ? ? ? ?3. 第一個CLK信號使初值寄存器的內容置入計數寄存器

? ? ? ? ?4. 以后每來一個CLK信號,計數寄存器減1?

? ? ? ? ?5. 減到0時,OUT端輸出一特殊波形的信號

? ? ? ? ?注:以上計數過程中還受到GATE信號的控制

? ? ? ? 在8253中

? ? ? ? ? ? 對于二進制置數? ?初值范圍(0-65535)? 計數范圍(1-65536)

? ? ? ? ? ? 對于十進制置數? ?初值范圍(0-9999) 計數范圍(1-10000)

三. 工作方式

? ? ? 1.?方式0——計數結束中斷

? ? ? ? ? 軟件啟動,不自動重復計數。

? ? ? ? ? 裝入控制字后OUT端變低電平,計數結束OUT輸出高電平。

? ? ? ? ? 計數過程中,GATE端應保持高電平。每寫入一次初值計數一個周期,然后停止計

? ? ? ? ? 數。OUT端輸出是一個約(N+1)TCLK寬度的負脈沖。計數過程中可隨時修改初值重

? ? ? ? ? 新開始計數。

? ? ? 2.?方式1——可重復觸發的單穩態觸發器

? ? ? ? ? 硬件啟動,不自動重復計數。裝入控制字后OUT端變高電平。計數開始OUT端變為

? ? ? ? ? 低電平,計數結束后又變高。?

? ? ? ? ? 門控信號GATE端的跳變觸發計數,可重復觸發。若下一次GATE上升沿提前到達,

? ? ? ? ? 則OUT端負脈沖拉寬為兩次計數過程之和。

? ? ? ? ? 計數過程中寫入新初值不影響本次計數。

? ? ?3. 方式2——頻率發生器

? ? ? ? ?軟、硬件啟動,自動重復計數

? ? ? ? ?裝入控制字后OUT端變高電平,計數到最后一個CLK時OUT輸出負脈沖,并連續重

? ? ? ? ?復此過程。?

? ? ? ? ?GATE為計數的控制信號:GATE變低計數停止,再變高時的下一個CLK下降沿,從

? ? ? ? ?初值開始重新計數。

? ? ? ? ?每個計數周期結束時(減到1時),OUT端輸出一個TCLK寬度的負脈沖。

? ? ? ? ?計數過程自動重復進行。

? ? ? ? ?計數過程中修改初值不影響本輪計數過程。

? ? 4. 方式3——方波發生器

? ? ? ? 軟、硬件啟動,自動重復計數

? ? ? ? 裝入控制字后OUT端變高電平,然后OUT連續輸出對稱方波:

? ? ? ? ? ? 前 N/2或(N+1)/2 個CLK,OUT為高,

? ? ? ? ? ? 后N/2或(N-1)/2 個CLK,? OUT為低。

? ? ? ? OUT輸出方波,前半周期為高,后半周期為低。

? ? ? ? 計數過程中修改初值不影響本半周期計數過程。

? ? ? ? GATE可以作為計數的控制信號:GATE變低計數停止,再變高時的下一個CLK下降

? ? ? ? ?沿,從初值開始重新計數。

? ??5. 方式4——軟件觸發選通

? ? ? ? 軟件啟動,不自動重復計數。

? ? ? ? 裝入控制字后輸出端變高電平,計數結束輸出一個CLK寬度的負脈沖

? ? ? ? 計數過程中,GATE端應保持高電平

? ? ? ? 每寫入一次初值,計數一個周期,然后停止計數。?

? ? ? ? 每個計數周期結束時(減到0時),OUT端輸出一個TCLK寬度的負脈沖。

? ? ? ? 計數過程中修改初值不影響本輪計數過程。

? ? 6. 方式5——硬件觸發選通

? ? ? ? 硬件啟動,不自動重復計數。

? ? ? ? OUT端波形與方式4相同

? ? ? ? 寫入初值時,GATE端應保持低電平。?

? ? ? ? GATE每出現一次正脈沖,計數一個周期,然后停止計數。

? ? ? ? 每個計數周期結束時(減到0時),OUT端輸出一個TCLK寬度的負脈沖。

? ? ? ? 計數過程中修改初值不影響本輪計數過程。

? ?8253的6種工作方式的輸出波形:

由軟件觸發計數 (送新的計數值)—— 方式0、方式4
由硬件觸發計數 (由GATE觸發) —— 方式1、方式5
分頻計數器輸出(產生序列脈沖) —— 方式2、方式3

? 與系統的連接示意圖:

? 初始化程序流程:

? 擴展定時/計數范圍(級聯):

? ? ? 當定時長度不夠時,可把2個或3個計數通道串聯起來使用,甚至可把多個8253串聯起

? ? ? 來使用。

? ? ? 例如:CLK頻率為1MHz,要求在OUT1端產生頻率1Hz的脈沖。

? ?? ?這時可將計數器0、1串聯,工作方式都均為方式3,計數初值均為1000。

? ? ? 如何讀出當前計數值:

第1種方法——在計數過程中讀計數值
鎖存當前計數值,再用兩條輸入指令將16位計數值讀出。
第2種方法——停止計數器再讀
GATE信號使計數器停止,再規定RL1和RL0的讀寫格式,然后讀出。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163911.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163911.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163911.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue中的列表過濾和列表排序

列表過濾 <body><div id"root"><!--輸入框用于模糊查詢--><input type"text" placeholder"請你輸入名字" v-model"name"><ul><!--in可以換成of--><li v-for"(p,index) in persons" …

航天博物館3D虛擬交互展廳讓大眾對科技發展有更深切的理解和感受

博物館作為人們了解歷史、文化和藝術的重要場所&#xff0c;現在可以通過VR全景技術來進行展覽&#xff0c;讓參觀者身臨其境地感受歷史文化的魅力。本文將介紹博物館VR全景的特點、優勢&#xff0c;以及如何使用VR全景技術來使得博物館的展覽和教育活動更豐富。 VR數字博物館…

WPF圖形變形使用技巧

在 WPF (Windows Presentation Foundation) 中&#xff0c;圖形變形通常是通過使用 Transform 對象來實現的。WPF 提供了幾種不同類型的 Transform&#xff0c;包括&#xff1a; TranslateTransform&#xff1a;用于在 x 軸和 y 軸上移動&#xff08;平移&#xff09;元素。Sc…

SSH 下載及安裝之 Windows Server

文章目錄 1 概述1.1 操作系統截圖1.2 下載 2 安裝2.1 解壓到指定路徑2.2 CMD 到 OpenSSH 目錄下2.3 安裝 sshd 服務2.3 開放端口 222.4 配置開機自啟 sshd 服務2.5 配置環境變量 path2.6 測試 3 連接3.1 使用 Xshell 連接3.2 輸入登錄用戶名3.3 輸入登錄密碼3.4 會話已建立 1 概…

3、如何從0到1去建設數據倉庫

1、數倉實施過程 1.1 數據調研 數據調研包括&#xff1a;業務調研、需求調研 業務調研 需要調研企業內有哪些業務線、業務線的業務是否還有相同點和差異點 各個業務線有哪些業務模塊&#xff0c;每個模型下有哪些業務流程&#xff0c;每個流程下產生的數據 是怎樣存儲的 業務調…

python數據結構與算法-16_優先級隊列

優先級隊列 你可能比較奇怪&#xff0c;隊列不是早就講了嘛。這里之所以放到這里講優先級隊列&#xff0c;是因為雖然名字有隊列&#xff0c; 但其實是使用堆來實現的。上一章講完了堆&#xff0c;這一章我們就趁熱打鐵來實現一個優先級隊列。 實現優先級隊列 優先級隊列(Pr…

UWA報告使用技巧小視頻,你get了么?(第十一彈)

隨著玩家對手游渲染品質的要求日益趨上&#xff0c;60幀、各種花式后處理導致發熱、耗電等問題日趨明顯。本期UWA報告使用技巧將分享關于GPU優化的專題姊妹篇。 《GPU性能優化篇》 UWA專注于手游GPU性能的優化&#xff0c;以確保您的游戲體驗得以最佳展現。基于最新發布的GOT …

141.【Git版本控制】

Git-深入挖掘 (一)、Git分布式版本控制工具1.目標2.概述(1).開發中的實際常見(2).版本控制器的方式(3).SVN (集中版本控制器)(4).Git (分布版本控制器)(5).Git工作流程圖 (二)、Git安裝與常用命令1.Git環境配置(1).安裝Git的操作(2).Git的配置操作(3).為常用的指令配置別名 (可…

輕松解決rpm軟件包的依賴問題 yum download ,rpm和deb不同系列

centos rpm系列的 為它往往有很多依賴項目。比如&#xff0c;我們來查看一下net-tools的依賴項有哪些&#xff1a; yum deplist net-tools 推薦使用以下幾種方法&#xff1a; 1.repotrack 我這里也以上期講到的Mariadb為例演示&#xff0c;以下操作需要在有網絡的環境下進…

國內企業出海首選的免費開源訂單管理系統(OMS)解決方案

用開源智造Odoo訂單管理系統 (OMS) 解決方案實現"訂單到收款"流程自動化 開源智造Odoo 訂單管理軟件功能消除了手動操作瓶頸&#xff0c;可防止出錯&#xff0c;還建立了從銷售報價到訂單履行的順暢工作流來確保及時開票和付款&#xff0c;從而幫助您理順訂單處理過程…

Python將多個視頻幀組合成.mp4視頻

已經有很多文章描述了如何將視頻拆分成視頻幀&#xff0c;例如&#xff1a;https://blog.csdn.net/WYKB_Mr_Q/article/details/124929081 那我們如何將很多視頻幀重新組合成視頻呢&#xff1f; 這里我們主要用到了 OpenCV 庫中的 VideoWriter 類。 OpenCV種的 cv2.VideoWrit…

jdbc批量插入或更新數據

mybatis可以批量插入或更新數據&#xff0c;不過mybatis底層也是基于jdbc來實現的&#xff0c;如何使用jdbc批量操作數據&#xff1f;本文給出demo。 /*** JDBC分批次批量插入* * throws IOException*/public static void testJDBCBatchInsertUser() throws IOException {Conne…

工作流引擎的架構設計主要考慮以下方面

工作流引擎的架構設計主要考慮以下方面&#xff0c;以馳騁工作流引擎為例來說明。 高度抽象和封裝&#xff1a;為了適應各種業務場景&#xff0c;工作流引擎應具備高度抽象和封裝的特性&#xff0c;以便統一處理各流程。靈活配置&#xff1a;工作流引擎應支持靈活的配置&#…

Linux之實現簡易的shell

1.打印提示符并獲取命令行 我們在使用shell的時候&#xff0c;發現我們在輸入命令是&#xff0c;前面會有&#xff1a;有用戶名&#xff0c;版本&#xff0c;當前路徑等信息&#xff0c;這里我們可以用環境變量去獲取: 1 #include <stdio.h>2 #include <stdlib.h>…

python如何快速查找到想要的文檔

字多不看版&#xff0c;直接體驗 待補充 演示代碼 # -*- coding:UTF-8 -*-# region 導入必要的依賴包 import os import subprocess from enum import Enum模塊名 pyperclip try:import pyperclip # 需要安裝 pyperclip 模塊&#xff0c;以支持粘貼板操作 except ImportEr…

PTA-成績轉換

本題要求編寫程序將一個百分制成績轉換為五分制成績。轉換規則&#xff1a; 大于等于90分為A&#xff1b;小于90且大于等于80為B&#xff1b;小于80且大于等于70為C&#xff1b;小于70且大于等于60為D&#xff1b;小于60為E。 輸入格式: 輸入在一行中給出一個整數的百分制成…

羊大師教你如何科學控制體重,輕松瘦下來

羊大師教你如何科學控制體重&#xff0c;輕松瘦下來 我們都知道&#xff0c;控制體重對于保持健康和美麗至關重要。然而&#xff0c;許多人在減肥的道路上走得波折重重&#xff0c;常常陷入挫敗和不知所措的境地。那么&#xff0c;如何科學控制體重&#xff0c;輕松瘦下來呢&a…

項目經理只需要有PMP證書就行?

就目前而言&#xff0c;大部分人對于項目經理的認識還停留在&#xff1a;有項目管理經驗&#xff0c;有對應的工作年限&#xff0c;有PMP證書。所以絕大多數人都認為只要報考了PMP項目管理&#xff0c;取得PMP證書&#xff0c;即可加入項目經理的圈子&#xff0c;薪資翻倍。 但…

協同過濾與矩陣分解講解(PPT)

總覽 協同過濾算法&#xff0c;就是一種完全依賴用戶和物品之間行為關系的推薦算法。 從字面理解&#xff0c;協同大家的反饋、評價和意見一起對海量的信息進行過濾&#xff0c;從中篩選出用戶可能感興趣的信息。 知識概括 從這幾個方面進行分析。 一、基于用戶的協同過濾 顯示…

6個PPT素材網站,讓你快速做出好看的PPT

找PPT模板一定要收藏好這6個網站&#xff0c;能讓你快速做出好看的PPT&#xff0c;重點十可以免費下載&#xff0c;趕緊收藏&#xff01; 1、菜鳥圖庫 https://www.sucai999.com/search/ppt/0_0_0_1.html?vNTYwNDUx 菜鳥圖庫網有非常豐富的免費素材&#xff0c;像設計類、辦公…