版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、系統(tǒng)總線總線是CPU向存儲(chǔ)器和輸入/輸出接口傳送地址、數(shù)據(jù)和控制信息的公共通路。包括:地址總線(AB)數(shù)據(jù)總線(DB)控制總線(CB)2)十進(jìn)制轉(zhuǎn)換為二進(jìn)制需要對(duì)數(shù)的整數(shù)部分和小數(shù)部分分別進(jìn)行處理,再合并得到轉(zhuǎn)換結(jié)果。(1)十進(jìn)制整數(shù):采用除2取余法,即用基數(shù)2不斷去除要轉(zhuǎn)換的十進(jìn)制數(shù),直至商為0。每次的余數(shù)即為二進(jìn)制位數(shù),先得到的是二進(jìn)制低位,后得到的是二進(jìn)制高位。(2)十進(jìn)制小數(shù):采用乘2取整法,即用基數(shù)2不斷去乘要轉(zhuǎn)換的十進(jìn)制數(shù)。每次得到積的整數(shù)部分即為二進(jìn)制位數(shù),先得到的是二進(jìn)制小數(shù)的高位,后得到的是二進(jìn)制小數(shù)的低位。例1.1例1.1將十進(jìn)制數(shù)135.8125轉(zhuǎn)換為二進(jìn)制數(shù)。 所以,(
2、135.8125)10=(10000111.1101)2 3)二進(jìn)制和十六進(jìn)制間的互換4位二進(jìn)制數(shù)對(duì)應(yīng)1位十六進(jìn)制數(shù)。二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)時(shí),以二進(jìn)制數(shù)的小數(shù)點(diǎn)分界,分別進(jìn)行分組處理,不足的位用0補(bǔ)足,整數(shù)部分在高位補(bǔ)0,小數(shù)部分在低位補(bǔ)0。例1.2例1. 2將二進(jìn)制數(shù)10000111.1101轉(zhuǎn)換為六進(jìn)制數(shù)。(10000111.1101)2=(1000 0111.1101)2=(87.D)16 溢出及其判定溢出:補(bǔ)碼運(yùn)算時(shí),若運(yùn)算結(jié)果超出了其表數(shù)范圍就發(fā)生了溢出,造成運(yùn)算結(jié)果錯(cuò)誤。例如,字長n=8時(shí),X=+99,Y=+98,X+Y=+197+127,肯定發(fā)生溢出。溢出的判定方法:由于溢出
3、只可能出現(xiàn)在同號(hào)相加或異號(hào)相減運(yùn)算時(shí),且采用補(bǔ)碼減法可轉(zhuǎn)變?yōu)榧臃?,最直觀、最易于理解的溢出判定方法是:若正數(shù)加正數(shù),結(jié)果為負(fù)數(shù)或負(fù)數(shù)加負(fù)數(shù),結(jié)果為正數(shù),則發(fā)生溢出。 圖2.1 8086微處理器內(nèi)部結(jié)構(gòu)圖1.總線接口部件BIU功能 負(fù)責(zé)CPU與內(nèi)存或I/O端口傳送指令或數(shù)據(jù)。BIU從內(nèi)存取指令送到指令隊(duì)列緩沖器。當(dāng)EU執(zhí)行指令時(shí),BIU要配合EU從指定的內(nèi)存單元或I/O端口中讀取數(shù)據(jù),或者把EU的操作結(jié)果送到指定的內(nèi)存單元或I/O端口去。組成:段寄存器、指令指針寄存器、地址加法器、指令預(yù)取隊(duì)列及總線控制邏輯。圖2.12.執(zhí)行部件EU 功能負(fù)責(zé)指令的譯碼和執(zhí)行。負(fù)責(zé)向總線接口部件BIU提供偏移地址
4、。對(duì)通用寄存器和標(biāo)志寄存器進(jìn)行管理。組成:算術(shù)邏輯單元(ALU) 、1個(gè)標(biāo)志寄存器、8個(gè)通用寄存器、1個(gè)數(shù)據(jù)暫存寄存器和EU控制電路。 圖2.11)段寄存器所有寄存器都是16位的,因此,能夠提供的最大地址空間只能為64 KB。為了尋址1MB,將存儲(chǔ)器的空間分成若干段,每段最大為64KB。段寄存器:用來存放段的起始地址(16位)的寄存器,設(shè)有四個(gè)段寄存器:CS 代碼段寄存器(Code Segment register)DS 數(shù)據(jù)段寄存器(Data Segment register)SS 堆棧段寄存器(Stack Segment register)ES 附加數(shù)據(jù)段寄存器(Extra Segment
5、 register) 圖2.13)通用寄存器組4個(gè)16位數(shù)據(jù)寄存器AX、BX、CX、DX4個(gè)16位指針與變址寄存器:堆棧指針寄存器SP(Stack Pointer)基址指針寄存器BP(Base Pointer) 源變址寄存器SI(Source Index) 目的變址寄存器DI(Destination Index) 圖2.1圖2.2 8086/8088的寄存器結(jié)構(gòu) 3.標(biāo)志寄存器(16位)16位標(biāo)志寄存器FR用于反映指令執(zhí)行結(jié)果或控制指令執(zhí)行的形式。只用了其中的9位,分為:狀態(tài)標(biāo)志位和控制標(biāo)志位。1)狀態(tài)標(biāo)志位(6位)用來反映算術(shù)或邏輯運(yùn)算后結(jié)果的狀態(tài),以記錄CPU的狀態(tài)特征。進(jìn)位標(biāo)志CF奇偶標(biāo)
6、志PF符號(hào)標(biāo)志SF溢出標(biāo)志OF輔助進(jìn)位標(biāo)志AF零標(biāo)志ZF進(jìn)位標(biāo)志CF(Carry Flag)加法時(shí),最高位(字節(jié)操作時(shí)的D7位,字操作時(shí)的D15位)是否有進(jìn)位產(chǎn)生。減法時(shí),最高位(字節(jié)操作時(shí)的D7位,字操作時(shí)的D15位)是否有借位產(chǎn)生。奇偶標(biāo)志PF(Parity Flag)若運(yùn)算結(jié)果低8位中“1”的個(gè)數(shù)為偶數(shù),則PF=1;否則PF=0。一般用來檢測(cè)數(shù)據(jù)傳輸中是否發(fā)生錯(cuò)誤。輔助進(jìn)位標(biāo)志AF(Auxiliary carrry Flag)加法時(shí),第3位向第4位有進(jìn)位。減法時(shí),第3位向第4位有借位。該標(biāo)志位通常用于對(duì)BCD算術(shù)運(yùn)算結(jié)果進(jìn)行調(diào)整。 零標(biāo)志ZF(Zero Flag)若運(yùn)算結(jié)果為0,則ZF=
7、1;否則ZF=0。符號(hào)標(biāo)志SF(Sign Flag)它和運(yùn)算結(jié)果的最高位相同。溢出標(biāo)志OF(Overflow Flag)若運(yùn)算過程中發(fā)生了“溢出”,則OF=1,否則OF=0。 2)控制標(biāo)志位(3位)用來控制CPU的操作,由程序設(shè)置或清除。中斷允許標(biāo)志IF方向標(biāo)志DF跟蹤(陷阱)標(biāo)志TF中斷允許標(biāo)志IF(Interrupt Enable Flag)如果IF置“1”,則CPU可以接受可屏蔽中斷請(qǐng)求;反之,則CPU不能接受可屏蔽中斷請(qǐng)求。STI 指令使IF置“1”,即開放中斷。 CLI 指令使IF清“0”,即關(guān)閉中斷。方向標(biāo)志DF(Direction Flag)控制字符串操作指令的步進(jìn)方向。 DF=
8、1時(shí),地址自動(dòng)遞減; DF=0時(shí),地址自動(dòng)遞增。 STD使DF=1。 CLD使DF=0。跟蹤(陷阱)標(biāo)志TF(Trap Flag)為調(diào)試程序的方便而設(shè)置的。 TF=1,則處于單步工作方式; TF=0 ,將正常執(zhí)行程序。例如,在系統(tǒng)調(diào)試軟件DEBUG中的T命令,就是用該標(biāo)志位來進(jìn)行程序的單步跟蹤的。 例題設(shè)(CS)=4232H ,(IP)=0066H,試計(jì)算物理地址。8086總線周期的概念為了取得指令或傳送數(shù)據(jù),就需要CPU的總線接口部件(BIU)執(zhí)行一個(gè)總線周期。一個(gè)最基本的總線周期由4個(gè)時(shí)鐘周期組成。習(xí)慣上將4個(gè)時(shí)鐘周期分別稱為4個(gè)狀態(tài),即T1狀態(tài)、T2狀態(tài)、T3狀態(tài)和T4狀態(tài)。表2.4 復(fù)
9、位后CPU內(nèi)部寄存器的狀態(tài)NMI非屏蔽中斷請(qǐng)求信號(hào),輸入,上升沿有效。此請(qǐng)求不受IF的影響。只要此信號(hào)一出現(xiàn),CPU就在現(xiàn)行指令結(jié)束后響應(yīng)中斷。INTR可屏蔽中斷請(qǐng)求信號(hào),輸入,高電平有效。當(dāng)INTR=1時(shí),表示外設(shè)提出了中斷請(qǐng)求,8086/8088在每個(gè)指令周期的最后一個(gè)T狀態(tài)去采樣此信號(hào)。若IF=1,則CPU響應(yīng)中斷,轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。中斷響應(yīng)信號(hào),輸出,低電平有效。用于對(duì)外設(shè)的中斷請(qǐng)求作出響應(yīng)。連續(xù)周期中的兩個(gè)負(fù)脈沖。第1個(gè)脈沖是通知外設(shè)接口,它的中斷請(qǐng)求已獲允許;外設(shè)接口收到第2個(gè)負(fù)脈沖后,往數(shù)據(jù)總線上放中斷類型碼。表2.7 、A0代碼表示的奇偶區(qū)的選擇圖2.24 各種字節(jié)和字的讀
10、操作示例第3章 16位/32位微處理器指令系統(tǒng) 指令:要求計(jì)算機(jī)執(zhí)行各種特定操作的命令。指令系統(tǒng):微機(jī)能夠識(shí)別和執(zhí)行的全部指令集合。不同的微處理器所對(duì)應(yīng)的指令系統(tǒng)也不相同。 指令的基本格式3.18086/8088的尋址方式3.28086/8088的指令系統(tǒng)3.380386的尋址方式和指令系統(tǒng)3.4Pentium新增加的指令3.53.1 指令的基本格式 指令的構(gòu)成3.1.18086/8088的指令格式3.1.23.1.1指令的構(gòu)成包括兩部分:操作碼:表示操作性質(zhì)或類型編碼操作數(shù):操作對(duì)象。一般來說,第一字節(jié)表示操作碼,第二字節(jié)表示尋址方式,第三、四字節(jié)表示操作數(shù)在內(nèi)存的位移量或者是立即數(shù)(在指令
11、中沒有位移量時(shí)),第五、六字節(jié)表示立即數(shù)。 3.1.28086/8088的指令格式 基本格式: 標(biāo)號(hào): 操作碼助記符 目的操作數(shù),源操作數(shù) ;注釋標(biāo)號(hào):為該條指令所在內(nèi)存單元的符號(hào)地址,后面要跟冒號(hào)。標(biāo)號(hào)一般由字母開頭,后跟字母、數(shù)字或特殊字符,不允許使用保留字。操作碼助記符:指示CPU執(zhí)行什么樣的操作。操作數(shù):分目的操作數(shù)和源操作數(shù)兩種。目的操作數(shù)是指令結(jié)果存放的位置,源操作數(shù)是指令操作的對(duì)象。注釋:說明本條指令或一段程序的功能,使程序可讀性強(qiáng)。匯編程序?qū)ζ洳贿M(jìn)行處理。 3.2 8086/8088的尋址方式 操作數(shù)的尋址方式就是指尋找操作數(shù)位置的方式。立即尋址1寄存器尋址2直接尋址3寄存器間
12、接尋址4基址尋址和變址尋址5基址變址尋址6固定尋址71.立即尋址操作數(shù)包含在指令中,這種操作數(shù)稱為立即數(shù)可以是8位數(shù)值(00HFFH)也可以是16位數(shù)值(0000HFFFFH)MOV AL,80H;將80H送入AL MOV AX,306AH;將306AH送入AX立即數(shù)尋址方式常用來給寄存器和存儲(chǔ)單元賦值。操作數(shù)直接在指令中取得,不需要使用另外的總線周期,執(zhí)行時(shí)間短、速度快。2.寄存器尋址操作數(shù)在CPU的內(nèi)部寄存器中:8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器:AX、BX、CX、DX、SI、DI、BP、SP4個(gè)段寄存器:CS、DS、SS、ESMOV AL,BL;將BL
13、的內(nèi)容傳送到AL中 MOV BX,AX;將AX的內(nèi)容傳送到BX中采用寄存器尋址的指令在執(zhí)行時(shí),操作數(shù)就在CPU中,不需要訪問存儲(chǔ)器來取得操作數(shù),執(zhí)行速度快。另外寄存器名比內(nèi)存地址短,指令所占內(nèi)存空間少。 3.直接尋址有效地址EA (Effective Address):操作數(shù)的偏移地址。EA可通過不同的尋址方式來得到。直接尋址方式的有效地址在指令中直接給出。默認(rèn)的段基址在DS段寄存器,可使用段前綴改變。用方括號(hào)包含有效地址,如:MOV AX,1000H。如果有效地址是以符號(hào)地址形式提供,則可不加方括號(hào)。 MOV AX,BUFA;BUFA為符號(hào)地址,這時(shí)不加跨段前 綴,默認(rèn)仍為DS數(shù)據(jù)段。如BU
14、FA變量 在附加段中,就必須書寫為: MOV AX,ES:BUFA注意:有些宏匯編程序規(guī)定,直接尋址的16位常量有效地址必須加段前綴,否則會(huì)當(dāng)作立即數(shù)。 例子例子段基址:2000H有效地址:1000H物理地址:21000HAX已知: (DS)=2000H ,(21000H)=12H, (21001H)=34H。試給出指令 MOV AX,1000H執(zhí)行后AX的內(nèi)容。20000H數(shù)據(jù)段2FFFFH21000H21001H12H34H存儲(chǔ)器指令執(zhí)行后,(AX)=3412H。4.寄存器間接尋址有效地址存放在基址寄存器BX、BP或變址寄存器SI、DI中。如用BX、SI或DI作為間址寄存器,則默認(rèn)的段基址
15、在DS段寄存器。如用BP作為間址寄存器,則默認(rèn)的段基址在SS段寄存器??墒褂枚吻熬Y改變。MOV AX,BX ;若(DS)=2000H,(BX)=1000H ,則將數(shù)據(jù)段 21000H、21001H兩個(gè)單元的內(nèi)容送到AX中。MOV CX,BP ;若 (SS)=4000H,(BP)=1000H ,則將堆棧段 41000H、41001H兩個(gè)單元的內(nèi)容送到CX中。MOV AX,ES:SI ;若(ES)=3000H,(SI)=1000H ,則將附加段 31000H、31001H兩個(gè)單元的內(nèi)容送到AX中。 5.基址尋址和變址尋址有效地址是寄存器內(nèi)容與有符號(hào)8位或16位位移量之和,寄存器可以是BX、BP或S
16、I、DI。有效地址BX/BP/SI/DI8/16位位移量如果寄存器為BX或BP,則為基址尋址如果寄存器為SI或DI,則為變址尋址段基址對(duì)應(yīng)BX/SI/DI寄存器默認(rèn)是DS,對(duì)應(yīng)BP寄存器默認(rèn)是SS;可用段前綴改變。例子例子段基址:4000H有效地址:5000H物理地址:45000HAX已知: (DS)=4000H , (SI)=2000H, 內(nèi)存單元(45000H)=34H, (45001H)=12H。試給出指令 MOV AX,SI+3000H執(zhí)行后AX的內(nèi)容。40000H數(shù)據(jù)段4FFFFH45000H45001H34H12H存儲(chǔ)器指令執(zhí)行后,(AX)=1234H。6.基址變址尋址有效地址由基
17、址寄存器(BX或BP)的內(nèi)容加上變址寄存器(SI或DI)的內(nèi)容構(gòu)成:有效地址BX/BPSI/DI 8/16位位移量段基址對(duì)應(yīng)BX寄存器默認(rèn)是DS,對(duì)應(yīng)BP寄存器默認(rèn)是SS;可用段前綴改變。該尋址方式適用于數(shù)組或表格存取。MOV AX,8BX+SI ;默認(rèn)操作數(shù)在數(shù)據(jù)段中 MOV BX,-6BP+DI;默認(rèn)操作數(shù)在堆棧段中 MOV BX,ES:BP+DI ;操作數(shù)在附加段中 7.固定尋址固定尋址又叫隱含尋址。指令碼中不包含指明操作數(shù)地址的部分,而其操碼本身隱含地指明了操作數(shù)地址。如:十進(jìn)制調(diào)整指令DAA,該指令的功能是對(duì)AL寄存器中的內(nèi)容進(jìn)行十進(jìn)制調(diào)整,調(diào)整后的內(nèi)容仍存放到AL中。隱含尋址的指令
18、,不需要計(jì)算EA,執(zhí)行速度快,而且大多為單字節(jié)指令。3.3 8086/8088的指令系統(tǒng)符號(hào)的約定:OPD :目的操作數(shù)(8/16位)OPS :源操作數(shù)(8/16位)數(shù)據(jù)傳送類指令3.3.1算術(shù)運(yùn)算類指令3.3.2邏輯運(yùn)算與移位類指令3.3.3串操作類指令3.3.4控制轉(zhuǎn)移類指令3.3.5處理器控制類指令3.3.63.3.1 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送是計(jì)算機(jī)中最基本、最重要的一種操作,傳送指令也是最常使用的一類指令。除標(biāo)志寄存器傳送指令外,均不影響標(biāo)志位。通用數(shù)據(jù)傳送指令1標(biāo)志寄存器傳送指令2目標(biāo)地址傳送指令3輸入/輸出指令41.通用數(shù)據(jù)傳送指令MOV傳送指令XCHG交換指令XLAT換碼指令堆棧
19、操作指令1) MOV傳送指令格式: MOV OPD,OPS MOV指令是使用最多的指令,它可以完成CPU內(nèi)寄存器之間、寄存器與存儲(chǔ)器之間的數(shù)據(jù)傳送,還可以將立即數(shù)送入寄存器或內(nèi)存。MOV AL,BL;將寄存器BL的內(nèi)容傳送到寄存器AL中。MOV DI, AX;將寄存器AX的內(nèi)容傳送到DI和DI+1所 指的內(nèi)存字單元中。MOV CX,1000H;將數(shù)據(jù)段中偏移地址1000H和1001H 單元的內(nèi)容送CX中。MOV BL,40;將立即數(shù)40傳送到寄存器BL。 注意注意 立即數(shù)、CS和IP不能作為目的操作數(shù)。兩個(gè)段寄存器之間不能相互傳送數(shù)據(jù)。兩個(gè)存儲(chǔ)單元之間不能直接傳送。不能將立即數(shù)直接傳送到段寄存
20、器。兩個(gè)操作數(shù)的類型和長度必須一致。2) XCHG交換指令格式:XCHG OPD,OPS操作數(shù)的類型可以為字節(jié)或字。交換只能在通用寄存器之間、通用寄存器與存儲(chǔ)器之間進(jìn)行。XCHG AX,BX;AX和BX的內(nèi)容互換3) XLAT換碼指令格式: XLAT 或 XLAT 表首址功能:使AL中的值變換為內(nèi)存表格中的對(duì)應(yīng)值。它是一條隱含尋址方式的指令。將數(shù)據(jù)段內(nèi)有效地址為(BX)+(AL)的內(nèi)存字節(jié)單元中數(shù)據(jù)送入AL。該指令常用來查表,即將表頭地址賦予BX,再將需求的表內(nèi)位移地址賦予AL,最后運(yùn)用XLAT指令即可以將該地址處的表值送到AL。 功能圖XLAT換碼指令的功能圖數(shù)據(jù)段存儲(chǔ)器表BXAL+BX+A
21、LAL4)PUSH入棧指令與POP出棧指令堆棧是一個(gè)“后進(jìn)先出LIFO”(或說“先進(jìn)后出FILO”)的主存區(qū)域,位于堆棧段中;SS段寄存器記錄其段基址。堆棧的存取操作都發(fā)生在棧頂;用堆棧指針寄存器SP指定。入棧指令PUSH出棧指令POP入棧指令PUSH格式:PUSH OPS功能:修改指針:(SP)-2SP;將OPS指定的寄存器、段寄存器或存儲(chǔ)器中的一個(gè)字?jǐn)?shù)據(jù)壓入堆棧的頂部。PUSH指令在使用時(shí)應(yīng)該注意:源操作數(shù)只能是16位,而不能是8位的。源操作數(shù)不能為立即數(shù)。 例子PUSH指令的例子例:假設(shè)在指令執(zhí)行前,(SP)=1000H;(AX)= 1234H。試分析PUSH AX指令的執(zhí)行結(jié)果。SP堆
22、棧段存儲(chǔ)器1000H0FFFH0FFEHSPAX12H34H出棧指令POP格式:POP OPD功能:將棧頂?shù)囊粋€(gè)字?jǐn)?shù)據(jù)送至OPD指明的寄存器、段寄存器(CS除外)或存儲(chǔ)器中;修改指針:(SP)+2SP。POP指令在使用時(shí)應(yīng)該注意:目的操作數(shù)只能是16位,而不能是8位的。立即數(shù)、CS不能作為目的操作數(shù)。例子POP指令的例子例:假設(shè)在指令執(zhí)行前,(SP)=0FFEH,(BX)=2004H,并且堆棧段棧頂(0FFEH)單元內(nèi)存放34H,(0FFFH)單元內(nèi)存放12H。試分析POP BX指令的執(zhí)行結(jié)果。SP堆棧段存儲(chǔ)器1000H0FFFH0FFEHSPBX12H34H=1234H2.標(biāo)志寄存器傳送指令
23、 LAHF指令:取標(biāo)志寄存器指令。將標(biāo)志寄存器FR的低8位傳送到AH中。SAHF指令:設(shè)置標(biāo)志寄存器指令。將AH的內(nèi)容傳送到標(biāo)志寄存器FR的低8位。PUSHF指令:將標(biāo)志寄存器FR的值壓入堆棧。POPF指令:從堆棧中彈出一個(gè)字到標(biāo)志寄存器FR中。3.目標(biāo)地址傳送指令取偏移地址指令LEA傳送偏移地址及數(shù)據(jù)段首址指令LDS傳送偏移地址及附加段首址指令LES1)取偏移地址指令LEA格式:LEA OPD,OPS功能:將源操作數(shù)的偏移地址送到目的操作數(shù)。該指令不影響標(biāo)志位,源操作數(shù)必須是存儲(chǔ)器操作數(shù),目的操作數(shù)必須是16位通用寄存器。LEA SI,TABLE;TABLE為存儲(chǔ)器操作數(shù)的符號(hào)地址LEA A
24、X,SI;該指令等效于MOV AX,SI指令,與MOV AX,SI 指令的效果不同,注意區(qū)別。格式:LDS OPD,OPS功能:從源操作數(shù)所指定的存儲(chǔ)單元中取出某變量的地址指針(共4個(gè)字節(jié)),將低地址兩個(gè)字節(jié)(偏移量)送到目的操作數(shù),將高地址兩個(gè)字節(jié)(段首址)送到DS中。該指令對(duì)標(biāo)志位不影響,源操作數(shù)是雙字類型存儲(chǔ)器操作數(shù),目的操作數(shù)必須是16位通用寄存器。2)傳送偏移地址及數(shù)據(jù)段首址指令LDS例子LDS指令的例子設(shè)某雙字存儲(chǔ)單元的偏移地址為3000H,雙字?jǐn)?shù)據(jù)為12345678H,試分析LDS SI,3000H指令的執(zhí)行結(jié)果。DS存儲(chǔ)器數(shù)據(jù)段3000H12H34H3001H3002H3003
25、H56H78HSI=1234H=5678H3)傳送偏移地址及附加段首址指令LES格式:LES OPD,OPS功能:從源操作數(shù)所指定的存儲(chǔ)單元取出某變量的地址指針(共4個(gè)字節(jié)),將低地址兩個(gè)字節(jié)(偏移量)送到目的操作數(shù),將高地址兩個(gè)字節(jié)(變量的段首址)送到ES中。 4.輸入輸出指令輸入/輸出指令用于完成輸入/輸出端口與累加器(AL/AX)之間的數(shù)據(jù)傳送,指令中給出輸入/輸出端口的地址。輸入指令I(lǐng)N輸出指令OUT注意事項(xiàng)1)輸入指令I(lǐng)N格式:IN OPD,OPS功能:從端口(地址為n或在DX中)輸入位數(shù)據(jù)到AL或輸入16位數(shù)據(jù)到AX。IN AL,40H;從40H端口讀入一個(gè)字節(jié)送ALIN AX,8
26、0H;從80H端口讀入一個(gè)字節(jié)送AL,從 81H端口讀入一個(gè)字節(jié)送AHMOV DX,8F00H;將端口地址8F00H送DXIN AL,DX;從8F00H端口讀入一個(gè)字節(jié)送AL 2)輸出指令OUT格式:OUT OPD,OPS功能:從AL輸出8位數(shù)據(jù)或從AX輸出16位數(shù)據(jù)到端口(地址為n或在DX中)。OUT 40H,AL;將AL內(nèi)容送40H端口OUT 80H,AX;將AL內(nèi)容送80H端口, 將AH的內(nèi)容送81H端口MOV DX,8F00H;將端口地址8F00H送DXOUT DX,AL;將AL內(nèi)容送8F00H端口輸入/輸出指令在使用時(shí)應(yīng)該注意輸入/輸出指令對(duì)標(biāo)志寄存器沒有影響。端口地址大于255時(shí),
27、必須用DX指定端口地址。 3.3.2 算術(shù)運(yùn)算類指令 可以完成帶符號(hào)和不帶符號(hào)的8位/16位二進(jìn)制的算術(shù)運(yùn)算,以及BCD碼表示的十進(jìn)制數(shù)的算術(shù)運(yùn)算。分為:加法指令1減法指令2乘法指令3符號(hào)擴(kuò)展指令4除運(yùn)算指令5十進(jìn)制調(diào)整指令61.加法指令不帶進(jìn)位加法指令A(yù)DD帶進(jìn)位加法指令A(yù)DC加1指令I(lǐng)NC1)不帶進(jìn)位加法指令A(yù)DD格式:ADD OPD,OPS功能:(OPS)+(OPD) OPD。影響標(biāo)志位CF、AF、PF、SF、OF和ZF。2)帶進(jìn)位加法指令A(yù)DC格式:ADC OPD,OPS功能:(OPS)+(OPD)+CF OPD。影響標(biāo)志位CF、AF、PF、SF、OF和ZF。ADC指令常用于多字的加法
28、。 3)加指令格式:INC OPD功能:將目的操作數(shù)OPD的內(nèi)容加,并將結(jié)果回送到目的操作數(shù)。影響標(biāo)志位AF、PF、SF、OF和ZF,但不影響CF標(biāo)志。INC AX;AX中內(nèi)容加,結(jié)果送回AXINC BL;BL中內(nèi)容加,結(jié)果送回BLINC BYTE PTR SI ;將SI所指內(nèi)存字節(jié)單元內(nèi)容 加,并回存。 2.減法指令不帶借位的減法指令SUB帶借位的減法指令SBB減1指令DEC比較指令CMP求補(bǔ)指令NEG1)不帶借位的減法指令SUB格式:SUB OPD,OPS功能:(OPD)-(OPS) OPD結(jié)果影響標(biāo)志位CF、AF、PF、SF、OF和ZF。SUB BX,CX;BX的內(nèi)容減去CX的內(nèi)容, 結(jié)
29、果放入BX2)帶借位的減法指令SBB格式:SBB OPD,OPS功能:(OPD)-(OPS)-CFOPD結(jié)果影響標(biāo)志位CF、AF、PF、SF、OF和ZF。 SBB SI,AL;SI所指字節(jié)單元內(nèi)容減AL的 值,再減CF,結(jié)果存回原內(nèi) 存單元。3)減指令DEC格式:DEC OPD功能:將目的操作數(shù)OPD的內(nèi)容減,并將結(jié)果回送到目的操作數(shù)。影響標(biāo)志位AF、PF、SF、OF和ZF,但不影響CF標(biāo)志。DEC AX;AX的內(nèi)容減,結(jié)果送回AX。 DEC CL;CL的內(nèi)容減,結(jié)果送回CL。 4)比較指令CMP格式:CMP OPD,OPS功能:目的操作數(shù)OPD減去源操作數(shù)OPS,結(jié)果不回送。但影響標(biāo)志位CF
30、、AF、PF、SF、OF和ZF。 CMP AL,09H;將AL的內(nèi)容和09H比較,結(jié)果影響標(biāo)志位可以根據(jù)標(biāo)志位的變化,來判斷比較結(jié)果。通過ZF的值來判斷兩數(shù)是否相等。若ZF=1,說明兩數(shù)相等;否則,兩數(shù)不等。通過CF、OF和SF的變化來判斷無符號(hào)數(shù)或有符號(hào)數(shù)的大?。簩?duì)于無符號(hào)數(shù),如CF=0,則目的操作數(shù)比源操作數(shù)大;如CF=1,則目的操作數(shù)比源操作數(shù)小。對(duì)于有符號(hào)數(shù),如OF=SF,則目的操作數(shù)比源操作數(shù)大;如OFSF,則目的操作數(shù)比源操作數(shù)小。 5)求補(bǔ)指令NEG格式:NEG OPD功能:由目的操作數(shù)OPD求補(bǔ),將其結(jié)果送回目的操作數(shù)。實(shí)際做0-(OPD)OPD運(yùn)算。影響標(biāo)志位CF、AF、PF
31、、SF、OF和ZF。 MOV AL,05HNEG AL;(AL)=0FBH,CF=1MOV AL,-05HNEG AL;(AL)=05H,CF=1 3.乘法指令無符號(hào)數(shù)乘法指令MUL有符號(hào)數(shù)乘法指令I(lǐng)MUL1)無符號(hào)數(shù)乘法指令MUL格式: MUL OPS功能: 字節(jié)乘法: (AL)(OPS)AX 字乘法: (AX)(OPS)(DX,AX)圖示圖示MUL指令在使用時(shí)應(yīng)該注意:OPS不能是立即數(shù)。MUL指令只影響CF、OF標(biāo)志:對(duì)于字節(jié)乘法,若AH0,則CF=1,OF=1;否則CF=0,OF=0。對(duì)于字乘法,若DX0,則CF=1,OF=1;否則CF=0,OF=0。2)有符號(hào)數(shù)乘法指令I(lǐng)MUL格式:
32、IMUL OPS功能:字節(jié)乘法: (AL)(OPS)AX 字乘法: (AX)(OPS)(DX,AX)IMUL指令的使用注意事項(xiàng)同MUL指令。 4.符號(hào)擴(kuò)展指令將字節(jié)擴(kuò)展為字指令CBW將字?jǐn)U展為雙字指令CWD1)將字節(jié)擴(kuò)展為字指令CBW格式:CBW功能:將AL的內(nèi)容從字節(jié)擴(kuò)展為字,存放到AX。若AL中數(shù)據(jù)的最高位為0,則(AH)=00H; 若AL中數(shù)據(jù)的最高位為1,則(AH)=0FFH。該指令不影響標(biāo)志位。2)將字?jǐn)U展為雙字指令CWD格式:CWD功能:將AX的內(nèi)容從字?jǐn)U展為雙字,存放到DX、AX。若AX中數(shù)據(jù)的最高位為0,則(DX)=0000H; 若AX中數(shù)據(jù)的最高位為1,則(DX)=0FFFF
33、H。該指令不影響標(biāo)志位。 5.除運(yùn)算指令無符號(hào)數(shù)除法指令DIV有符號(hào)數(shù)除法指令I(lǐng)DIV1)無符號(hào)數(shù)除法指令DIV格式:DIV OPS功能: 字節(jié)除法:(AX)/(OPS)AL(商),AH(余數(shù)) 字除法: (DX,AX)/ (OPS)AX(商),DX(余數(shù))圖示圖示DIV指令在使用應(yīng)該注意:OPS不能是立即數(shù)。除法指令不影響標(biāo)志位,除以0會(huì)導(dǎo)致結(jié)果溢出,產(chǎn)生除法出錯(cuò)中斷。 2)有符號(hào)數(shù)除法指令I(lǐng)DIV格式:IDIV OPS功能: 字節(jié)除法: (AX)/(OPS)AL(商),AH(余數(shù)) 字除法: (DX,AX)/ (OPS)AX(商),DX(余數(shù)) 6.十進(jìn)制調(diào)整指令前面的算術(shù)運(yùn)算指令都是二進(jìn)
34、制運(yùn)算指令,如何利用它們來進(jìn)行BCD 碼十進(jìn)制運(yùn)算?一般方法是:首先對(duì)BCD碼表示的十進(jìn)制數(shù)進(jìn)行二進(jìn)制運(yùn)算,然后再使用調(diào)整指令對(duì)運(yùn)算結(jié)果進(jìn)行調(diào)整,得出正確的BCD碼表示的十進(jìn)制運(yùn)算結(jié)果。加法的BCD碼調(diào)整指令減法的BCD碼調(diào)整指令乘法的非壓縮BCD碼調(diào)整指令A(yù)AM除法的非壓縮BCD碼調(diào)整指令A(yù)AD1)加法的BCD碼調(diào)整指令壓縮BCD碼調(diào)整指令DAA非壓縮BCD碼調(diào)整指令A(yù)AA(1)壓縮BCD碼調(diào)整指令DAA格式:DAADecimal Adjust After Addition 功能:將AL中二進(jìn)制加法運(yùn)算的結(jié)果調(diào)整為兩位壓縮BCD碼,結(jié)果仍保留在AL中。調(diào)整的方法:若AL的低4位大于9,則AL
35、的內(nèi)容加06H, 并AF位置1; 若AL的高4位大于9,則AL的內(nèi)容加60H, 并CF位置1; 若 AF=1,則低4位要加6; 若 CF=1,則高4位要加6。例如:MOV BL,34H MOV AL,56H ADD AL,BL DAA 上述指令序列執(zhí)行后,(AL)=90H ,CF=0,AF=0。 0011 0100 0101 0110 1000 1010 0110 1001 0000(2)非壓縮BCD碼調(diào)整指令A(yù)AA格式: AAAAscii Adjust for Addition. 功能:將AL中二進(jìn)制加法運(yùn)算結(jié)果調(diào)整為一位非壓縮BCD碼,調(diào)整后的結(jié)果仍保留在AL中,如果向高位有進(jìn)位(AF=1
36、,CF=1),則AH的內(nèi)容加1。調(diào)整的方法:若AL的低4位大于9或AF=1,則自動(dòng)將AL的內(nèi)容加06H,AH內(nèi)容加1并置AF=CF=1,將AL的高4位清零;若AL的低4位小于或等于9,則僅將AL的高4位清零,并AFCF。DAA、AAA指令在使用時(shí)應(yīng)該注意:DAA、AAA指令一般是緊跟在ADD或ADC指令后使用,單獨(dú)使用沒有意義。調(diào)整指令只對(duì)AL的內(nèi)容進(jìn)行調(diào)整,故在調(diào)整前,務(wù)必保證待調(diào)整結(jié)果出現(xiàn)在AL。2)減法的BCD碼調(diào)整指令壓縮BCD碼調(diào)整指令DAS非壓縮BCD碼調(diào)整指令A(yù)AS(1)壓縮BCD碼調(diào)整指令DAS格式:DAS功能:將AL中二進(jìn)制減法運(yùn)算的結(jié)果調(diào)整為兩位壓縮BCD碼,結(jié)果仍保留在A
37、L中。調(diào)整的方法:若 AF=1或AL的低4位大于9,則自動(dòng)(AL)-06HAL,1AF;若 CF=1或AL的高4位大于9,則自動(dòng)(AL)-60HAL,1CF。 (2)非壓縮BCD碼調(diào)整指令A(yù)AS格式:AAS功能:將AL 中二進(jìn)制減法運(yùn)算結(jié)果調(diào)整為一位非壓縮BCD碼,如果有借位,則保留在CF中。調(diào)整的方法:若AL的低4位大于9或AF=1,則自動(dòng)將AL的內(nèi)容減06H,AH內(nèi)容減1并置AF=CF=1,將AL的高4位清零;若AL的低4位小于或等于9,則僅將AL的高4位清零,并AFCF。DAS、AAS指令在使用時(shí)的注意事項(xiàng)可參考加法調(diào)整指令。 3)乘法的非壓縮BCD碼調(diào)整指令A(yù)AM格式:AAM功能:將A
38、L中二進(jìn)制乘法運(yùn)算結(jié)果調(diào)整為兩位非壓縮BCD碼,高位放在AH,低位放在AL。影響標(biāo)志位PF、SF和ZF。該指令必須緊跟在MUL之后,且被乘數(shù)和乘數(shù)必須用非壓縮的BCD碼表示。4)除法的非壓縮BCD碼調(diào)整指令A(yù)AD格式:AAD功能:用在兩位非壓縮的BCD碼相除之前,將AX內(nèi)容調(diào)整為二進(jìn)制數(shù)。 3.3.3邏輯運(yùn)算與移位類指令 邏輯運(yùn)算指令1移位指令2循環(huán)移位指令31.邏輯運(yùn)算指令可以對(duì)字或字節(jié)按位進(jìn)行邏輯運(yùn)算。非運(yùn)算指令NOT與運(yùn)算指令A(yù)ND測(cè)試指令TEST或運(yùn)算指令OR異或運(yùn)算指令XOR1)非運(yùn)算指令NOT格式:NOT OPD功能:將目的操作數(shù)的內(nèi)容按位取反后,再送回目的操作數(shù)。該指令不影響標(biāo)志
39、位。 2)與運(yùn)算指令A(yù)ND格式:AND OPD,OPS功能:將目的操作數(shù)的內(nèi)容與源操作數(shù)按位相與,結(jié)果送回目的操作數(shù)。影響標(biāo)志位SF、ZF、PF,使OF=0,CF=0,對(duì)AF無定義。 3)測(cè)試指令TEST格式:TEST OPD,OPS功能:將目的操作數(shù)的內(nèi)容與源操作數(shù)按位相與,但結(jié)果不送回目的操作數(shù)。影響標(biāo)志位SF、ZF、PF,使OF=0,CF=0,對(duì)AF無定義。例子: TEST AL,80H 執(zhí)行前:(AL) =39H 執(zhí)行后: ZF=1該指令可以用于判斷目的操作數(shù)的某個(gè)數(shù)位是否1。上例中可以根據(jù)ZF=1,判斷出AL內(nèi)容的最高位為零。 4)或運(yùn)算指令OR格式:OR OPD,OPS功能:將目的
40、操作數(shù)的內(nèi)容與源操作數(shù)按位相或,結(jié)果送回目的操作數(shù)。影響標(biāo)志位SF、ZF、PF,使OF=0,CF=0,對(duì)AF無定義。該指令常用來將目的操作數(shù)的某一位或幾位置1。5)異或運(yùn)算指令XOR格式:XOR OPD,OPS功能:將目的操作數(shù)的內(nèi)容與源操作數(shù)按位異或,結(jié)果送回目的操作數(shù)。影響標(biāo)志位SF、ZF、PF,使OF=0,CF=0,對(duì)AF無定義。由于某個(gè)操作數(shù)和同一個(gè)數(shù)異或結(jié)果為0,故異或運(yùn)算常被用來比較兩數(shù)是否相等或初始化某數(shù)為0。 2.移位指令這組指令可以對(duì)字節(jié)或字中的各位進(jìn)行算術(shù)移位和邏輯移位。移位次數(shù)可以是也可以大于。若移位次數(shù)大于時(shí),必須將次數(shù)預(yù)先放入CL。算術(shù)左移指令SAL邏輯左移指令SHL
41、算術(shù)右移指令SAR邏輯右移指令SHR1)算術(shù)左移指令SAL格式:SAL OPD,OPS功能:根據(jù)源操作數(shù)OPS中的移位次數(shù),將目的操作數(shù)的內(nèi)容連續(xù)進(jìn)行左移操作,每次高位進(jìn)入CF,最低位補(bǔ)0 。無符號(hào)數(shù)的算術(shù)左移一位相當(dāng)于目的操作數(shù)乘2。圖3.22)邏輯左移指令SHL格式:SHL OPD,OPS功能:與算術(shù)左移指令SAL完全相同。 3)算術(shù)右移指令SAR格式:SAR OPD,OPS功能:根據(jù)源操作數(shù)OPS中的移位次數(shù),將目的操作數(shù)的內(nèi)容連續(xù)進(jìn)行右移操作,每次低位進(jìn)入CF,最高位用移位前的值填補(bǔ) 。圖3.24)邏輯右移指令SHR格式:SHR OPD,OPS功能:根據(jù)源操作數(shù)OPS中的移位次數(shù),將目
42、的操作數(shù)的內(nèi)容連續(xù)進(jìn)行右移操作,每次低位進(jìn)入CF,最高位補(bǔ)0 。 圖3.2圖3.2 移位指令操作過程3.循環(huán)移位指令循環(huán)移位次數(shù)的設(shè)置和移位指令相同。這組指令只影響CF、OF標(biāo)志位。循環(huán)左移指令ROL循環(huán)右移指令ROR帶進(jìn)位的循環(huán)左移指令RCL帶進(jìn)位的循環(huán)右移指令RCR1)循環(huán)左移指令ROL格式:ROL OPD,OPS功能:根據(jù)源操作數(shù)OPS中的移位次數(shù),將目的操作數(shù)的內(nèi)容連續(xù)進(jìn)行循環(huán)左移操作。圖3.32)循環(huán)右移指令ROR格式:ROR OPD,OPS功能:根據(jù)源操作數(shù)OPS中的移位次數(shù),將目的操作數(shù)的內(nèi)容連續(xù)進(jìn)行循環(huán)右移操作。 圖3.33)帶進(jìn)位的循環(huán)左移指令RCL格式:RCL OPD,OP
43、S功能:根據(jù)源操作數(shù)OPS中的移位次數(shù),連續(xù)對(duì)目的操作數(shù)的內(nèi)容帶CF循環(huán)左移操作。圖3.34)帶進(jìn)位的循環(huán)右移指令RCR格式: RCR OPD,OPS功能:根據(jù)源操作數(shù)OPS中的移位次數(shù),連續(xù)對(duì)目的操作數(shù)的內(nèi)容帶CF循環(huán)右移操作。 圖3.3圖3.3 循環(huán)移位指令的操作過程3.3.4 串操作類指令 概述0重復(fù)指令前綴1數(shù)據(jù)字節(jié)串/字串傳送指令2數(shù)據(jù)字節(jié)串/字串比較指令3數(shù)據(jù)字節(jié)串/字串檢索指令4數(shù)據(jù)字節(jié)串/字串讀出指令5數(shù)據(jù)字節(jié)串/字串寫入指令60.概述字符串是指存儲(chǔ)器中順序存放的類型相同的字節(jié)或字的序列。串操作是指對(duì)串中每個(gè)元素都執(zhí)行同樣的操作。規(guī)定一個(gè)字符串的長度最長不能超過64K字節(jié)。源串
44、存放在數(shù)據(jù)段,用SI提供源串的偏移地址。 目的串存放在附加段,用DI提供目的串的偏移地址。當(dāng)方向標(biāo)志DF=0:地址指針SI、DI自動(dòng)加1(字節(jié)串)或2(字串) 當(dāng)方向標(biāo)志DF=1:地址指針SI、DI自動(dòng)減1(字節(jié)串)或2(字串)串操作指令前不加重復(fù)前綴,串操作只執(zhí)行一次。 如重復(fù)執(zhí)行串操作,可以用CX存放重復(fù)的次數(shù),每重復(fù)執(zhí)行一次,CX內(nèi)容減1。當(dāng)CX內(nèi)容減為0時(shí),串操作停止。1.重復(fù)指令前綴 無條件重復(fù)前綴REP相等/為零重復(fù)前綴REPE/REPZ不相等/不為零重復(fù)前綴REPNE/REPNZ1)無條件重復(fù)前綴REP格式:REP功能:用于一個(gè)串操作指令的前綴,每重復(fù)執(zhí)行一次串操作指令,CX的內(nèi)
45、容減1,直到(CX)=0 為止。執(zhí)行步驟如下:先判斷CX的內(nèi)容,如(CX)=0,則串操作停止,否則執(zhí)行第步; (CX)-1CX ;執(zhí)行其后的串操作指令,轉(zhuǎn)第步。 2)相等/為零重復(fù)前綴REPE/REPZ格式:REPE/REPZ功能:用于一個(gè)串操作指令的前綴,每重復(fù)執(zhí)行一次串操作指令,CX的內(nèi)容減1,直到(CX)=0 或ZF=0為止。執(zhí)行步驟如下:先判斷CX的內(nèi)容,如(CX)=0或ZF=0,則串操作停止,否則執(zhí)行第步; (CX)-1CX ;執(zhí)行其后的串操作指令,轉(zhuǎn)第步。 3)不相等/不為零重復(fù)前綴REPNE/REPNZ格式:REPNE/REPNZ功能:用于一個(gè)串操作指令的前綴,每重復(fù)執(zhí)行一次串操
46、作指令,CX的內(nèi)容減1,直到(CX)=0 或ZF=1為止。執(zhí)行步驟如下:先判斷CX的內(nèi)容,如(CX)=0或ZF=1,則串操作停止,否則執(zhí)行第步; (CX)-1CX ;執(zhí)行其后的串操作指令,轉(zhuǎn)第步。 2.數(shù)據(jù)字節(jié)串/字串傳送指令 格式:MOVSB/MOVSW功能:將數(shù)據(jù)段中由(DS:SI)指向的源串的一個(gè)字節(jié)(字)傳送到附加段由(ES:DI)指向的目的串中,且相應(yīng)修改地址指針,使其指向下一個(gè)字節(jié)(字)。例:將內(nèi)存單元首地址3100H起的100個(gè)字節(jié)傳送到首地址2800H的內(nèi)存單元。 CLD MOV SI,3100H MOV DI,2800H MOV CX,100 REP MOVSB 3.數(shù)據(jù)字節(jié)
47、串/字串比較指令格式:CMPSB/CMPSW功能:將數(shù)據(jù)段中由(DS:SI)指向源串的一個(gè)字節(jié)(字)減去附加段由(ES:DI)指向的目的串的一個(gè)字節(jié)(字),不回送結(jié)果,只根據(jù)結(jié)果影響標(biāo)志位,并相應(yīng)修改地址指針,使其指向下一個(gè)字節(jié)(字)。例:檢查內(nèi)存單元首地址2200H起的50個(gè)字節(jié)與首地址3200H起的50個(gè)字節(jié)是否對(duì)應(yīng)相等。如相等,則BX=0;若不相等,BX指向第一個(gè)不相等的字節(jié)單元。AL存放第一個(gè)不相等的源串內(nèi)容。 CLD MOV SI,2200H MOV DI,3200H MOV CX,50 REPE CMPSB JZ LP1 DEC SI MOV BX,SI MOV AL,SI JMP
48、 LP2 LP1:MOV BX,0 LP2: 4.數(shù)據(jù)字節(jié)串/字串檢索指令格式:SCASB/SCASW功能:將AL(AX)的內(nèi)容減去附加段由(ES:DI)指向的目的串的一個(gè)字節(jié)(字),不回送結(jié)果,只根據(jù)結(jié)果影響標(biāo)志位,并相應(yīng)修改地址指針,使其指向下一個(gè)字節(jié)(字)。例:在內(nèi)存附加段首地址為4300H起的100個(gè)字節(jié)中,查找是否有“*”,如有, 則將偏移地址送BX ,否則BX=0。 CLD MOV DI,4300H MOV AL,* REPNZ SCASB JNZ LP1 DEC DI MOV BX,DI ;找到“*”,偏移地址送BX JMP LP2LP1:MOV BX,0 ;未找到LP2: 5.
49、數(shù)據(jù)字節(jié)串/字串讀出指令格式:LODSB/LODSW功能:將數(shù)據(jù)段中由(DS:SI)指向源串的一個(gè)字節(jié)(字)讀出,放入AL(AX)中,并相應(yīng)修改地址指針,使其指向下一個(gè)字節(jié)(字)。6.數(shù)據(jù)字節(jié)串/字串寫入指令格式:STOSB/STOSW功能:將AL(AX)的內(nèi)容寫入附加段中由(ES:DI)指向的目的串一個(gè)字節(jié)(字)中,并相應(yīng)修改地址指針,使其指向下一個(gè)字節(jié)(字)。1)計(jì)數(shù)循環(huán)指令格式: LOOP 標(biāo)號(hào)功能:每執(zhí)行一次LOOP指令,CX的內(nèi)容減,若(CX)0,則循環(huán)轉(zhuǎn)移到標(biāo)號(hào)所指定的目標(biāo)地址去重復(fù)執(zhí)行程序,直到(CX)=0,退出循環(huán),接著執(zhí)行LOOP指令的下一條指令。例: MOV CX,0100
50、H;設(shè)置循環(huán)次數(shù)DELAY:LOOP DELAY2)相等/為零計(jì)數(shù)循環(huán)指令格式:LOOPE/LOOPZ 標(biāo)號(hào)功能:每執(zhí)行一次循環(huán)指令,CX的內(nèi)容減,若(CX)0且ZF=1,則循環(huán)轉(zhuǎn)移到標(biāo)號(hào)所指定的目標(biāo)地址去重復(fù)執(zhí)行程序,否則執(zhí)行循環(huán)指令的下一條指令。 3)不相等/不為零計(jì)數(shù)循環(huán)指令格式:LOOPNE/LOOPNZ 標(biāo)號(hào)功能:每執(zhí)行一次循環(huán)指令,CX的內(nèi)容減,若(CX)0且ZF=0,則循環(huán)轉(zhuǎn)移到標(biāo)號(hào)所指定的目標(biāo)地址去重復(fù)執(zhí)行程序,否則執(zhí)行循環(huán)指令的下一條指令。 1)軟中斷指令格式:INT n功能:n為中斷類型碼,可以取00FFH之間的256個(gè)值。每個(gè)中斷類型碼在中斷矢量表中占4個(gè)字節(jié),前兩個(gè)字節(jié)
51、用來存放中斷服務(wù)程序入口地址的偏移地址,后兩個(gè)字節(jié)用來存放段基址。CPU執(zhí)行INT指令時(shí),首先將標(biāo)志寄存器FR 入棧,接著清除IF、TF,然后將當(dāng)前程序斷點(diǎn)的段基址和偏移地址入棧保護(hù),最后將中斷矢量表中與中斷類型碼對(duì)應(yīng)的4個(gè)字節(jié)內(nèi)容先后送入IP、CS,這樣CPU轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。 2)中斷返回指令格式:IRET功能:放在中斷服務(wù)程序的出口處,由它從堆棧中彈出程序斷點(diǎn)分別送IP、CS,并彈出一個(gè)字送標(biāo)志寄存器FR,以退出中斷,返回到斷點(diǎn)處執(zhí)行后續(xù)程序。中斷服務(wù)程序的最后一條指令必須是IRET。 3)溢出中斷指令格式:INTO功能:該指令為單字節(jié)指令,中斷類型碼為4,放在有符號(hào)的算術(shù)運(yùn)算指令之
52、后,僅當(dāng)運(yùn)算產(chǎn)生溢出(OF=1)時(shí),即向CPU發(fā)出溢出中斷請(qǐng)求。 1.標(biāo)志位操作指令進(jìn)位位清0指令:CLC進(jìn)位位求反指令:CMC進(jìn)位位置1指令:STC關(guān)中斷指令:CLI;置IF=0,禁止外部可屏蔽中斷。開中斷指令:STI;置IF=1,允許外部可屏蔽中斷。方向標(biāo)志清0指令:CLD方向標(biāo)志置1指令:STDa)取地址偏移量運(yùn)算符OFFSET格式:OFFSET 變量或標(biāo)號(hào)例: MOV SI,OFFSET BUF 等價(jià)于 LEA SI,BUF注意:OFFSET后面只能是變量或標(biāo)號(hào)。 b)取段基址運(yùn)算符SEG格式:SEG 變量或標(biāo)號(hào)例:MOV AX,SEG BUF;將BUF所在段的段基址送入寄存器AX。
53、c)取類型運(yùn)算符TYPE格式:TYPE 變量或標(biāo)號(hào)該算符返回的結(jié)果為一數(shù)值。 d)取變量單元數(shù)運(yùn)算符LENGTH格式:LENGTH 變量如果一個(gè)變量已用重復(fù)操作符DUP說明其變量的個(gè)數(shù),則利用LENGTH算符可以得到這個(gè)變量的個(gè)數(shù)。如果未用DUP說明,則得到結(jié)果總為1。 e)取變量字節(jié)數(shù)運(yùn)算符 SIZE格式:SIZE 變量如果一個(gè)變量已用重復(fù)操作符DUP說明其變量的個(gè)數(shù),則利用SIZE算符可以得到這個(gè)變量的字節(jié)總數(shù)。如果未用DUP說明,則得到的結(jié)果和TYPE算符所得結(jié)果相同。 例4.4X1 DB 08HBUF DW 01H,02H,03H,04HX108H01H存儲(chǔ)器00HBUF02H00H0
54、3H00H04H00H01H02H03H04H例4.5BUF1 DB HELLOBUF2 DB ABBUF3 DW ABBUF1HE存儲(chǔ)器LBUF2LOABBABUF3例4.8BUF1 DB HELLOSA_BUF DW BUF1LA_BUF DD BUF1BUF1HE存儲(chǔ)器LSA_BUFLOLA_BUFBUF1的偏移地址BUF1的偏移地址BUF1的段基址例4.11DSEG SEGMENTORG 10HBUF DB 1234ORG $+5NUM DW 50DSEG ENDSBUF12存儲(chǔ)器34NUM0010H0014H0019H32H00H504.4.1 系統(tǒng)功能調(diào)用的方法INT 21H是一個(gè)
55、具有多個(gè)子功能的中斷服務(wù)程序,這些子功能的編號(hào)稱為功能號(hào)。INT 21H一般稱為系統(tǒng)功能調(diào)用。調(diào)用步驟:置入口參數(shù)功能號(hào)AH執(zhí)行INT 21H分析出口參數(shù)視具體情況而定6.返回操作系統(tǒng)(4CH功能)無入口參數(shù)。功能:結(jié)束當(dāng)前程序,返回操作系統(tǒng)。調(diào)用方式: MOV AH ,4CH INT 21H2.只讀存儲(chǔ)器ROM用戶在使用時(shí)只能讀出信息,不能寫入新的信息,存儲(chǔ)信息斷電后不會(huì)丟失。用來存放固定的應(yīng)用程序、系統(tǒng)軟件、監(jiān)控程序、常數(shù)表格等。分為:掩膜式ROMPROMEPROMEEPROM1)掩膜式ROM由ROM制造廠家在生產(chǎn)時(shí)使用掩膜式工藝將信息一次性寫入,其內(nèi)部信息不再能更改,所以也稱固定存儲(chǔ)器。
56、它適用于大批量生產(chǎn)。2)PROM由用戶使用專門的編程器自行一次性寫入的,一旦寫入就無法更改。 3)EPROM由用戶使用專門的編程器自行寫入程序和數(shù)據(jù),但寫入后的信息可用紫外線照射芯片的石英窗口來擦除,芯片中信息全部擦除后可再重新寫入新的內(nèi)容。EPROM可以多次擦除、多次寫入。4)EEPROMElectrically Erasable Programmable Read - Only Memory 用電信號(hào)進(jìn)行擦除和寫入信息,芯片不離開插件板便可擦除部分或全部信息和寫入其中信息。EEPROM為經(jīng)常需要修改程序和參數(shù)的應(yīng)用領(lǐng)域提供了極大的方便,但存取速度較慢,價(jià)格較貴。 表5.3 圖5.11存儲(chǔ)器
57、芯片的地址范圍 圖5.14 8088系統(tǒng)字位擴(kuò)展的接線圖 表5.5表5.5 圖5.14存儲(chǔ)器芯片的地址范圍 1.I/O端口統(tǒng)一編址又稱為存儲(chǔ)器映射編址方式,即把每個(gè)I/O端口都當(dāng)作一個(gè)存儲(chǔ)單元看待,按照存儲(chǔ)單元的編址方式統(tǒng)一安排端口的地址。優(yōu)點(diǎn):可以用訪問內(nèi)存的方法來訪問I/O端口。由于訪問內(nèi)存的指令種類豐富、尋址方式多樣,因此這種編址方式為訪問外設(shè)帶來了很大的靈活性。同時(shí),I/O控制信號(hào)也可與存儲(chǔ)器的控制信號(hào)共用,從而給應(yīng)用帶來了很大的方便。缺點(diǎn):外設(shè)占用了一部分內(nèi)存地址空間,這就減少了內(nèi)存可用的地址范圍。此外從指令上不易區(qū)分當(dāng)前是對(duì)內(nèi)存進(jìn)行操作還是對(duì)外設(shè)進(jìn)行操作。 Intel MCS-51
58、等系列的單片微型計(jì)算機(jī)和Motorola公司的MC6800、MC68000及68HC05等微處理器就采用統(tǒng)一編址方式。2.I/O端口獨(dú)立編址 內(nèi)存地址空間和外設(shè)地址空間是相互獨(dú)立的。8086/8088系統(tǒng)的內(nèi)存地址范圍為00000HFFFFFH,共1M空間,而外設(shè)端口的地址范圍為0000HFFFFH,共64K空間。這兩個(gè)地址空間相互獨(dú)立,互不影響。CPU在尋址內(nèi)存和外設(shè)時(shí),使用不同的控制信號(hào)來區(qū)分當(dāng)前是對(duì)內(nèi)存操作還是對(duì)I/O端口操作。例如8086的M/IO和8088的IO/M信號(hào)。指令系統(tǒng)中單獨(dú)設(shè)置有專用的I/O指令。優(yōu)點(diǎn):將輸入輸出指令和訪問存儲(chǔ)器的指令明顯區(qū)分開,使程序清晰,可讀性好,而且
59、I/O指令長度短,執(zhí)行的速度快,也不占用內(nèi)存空間;I/O地址譯碼電路較簡單,缺點(diǎn):必須有專門的IN和OUT指令,這些指令的功能沒有訪問存儲(chǔ)器指令強(qiáng),也增加了指令系統(tǒng)的規(guī)模。另外,CPU要能提供區(qū)分存儲(chǔ)器和I/O的控制信號(hào)。 6.2 CPU與外設(shè)之間的數(shù)據(jù)傳送方式無條件方式6.2.1查詢方式6.2.2中斷方式6.2.3DMA方式6.2.41.中斷源及其分類 引起中斷的事件就稱為中斷源。分為兩大類:內(nèi)部中斷源:來自CPU內(nèi)部,如:CPU執(zhí)行指令時(shí)產(chǎn)生的異常、特殊操作引起的異常以及由程序員安排在程序中的INT n軟件中斷指令。中斷的控制完全是在CPU內(nèi)部實(shí)現(xiàn)的。外部中斷源:來自CPU外部,如:如鍵盤
60、、打印機(jī)、定時(shí)器時(shí)間到、電源掉電、硬件出錯(cuò)等。利用CPU的兩條中斷輸入信號(hào)線INTR和NMI來告訴CPU已發(fā)生了中斷事件。(1)除法出錯(cuò)中斷在執(zhí)行除法指令時(shí),若發(fā)現(xiàn)除數(shù)為0或商超過了結(jié)果寄存器所能表示的最大范圍,則立即產(chǎn)生一個(gè)中斷類型碼為0的中斷。 (2)單步中斷8086/8088 CPU的標(biāo)志寄存器中有一位陷阱標(biāo)志TF。CPU每執(zhí)行完一條指令都會(huì)檢查TF的狀態(tài)。若發(fā)現(xiàn)TF=1,則CPU就產(chǎn)生中斷類型碼為1的中斷,使CPU轉(zhuǎn)向單步中斷的處理程序。單步中斷廣泛地用于程序的調(diào)試。 (3)斷點(diǎn)中斷8086/8088指令系統(tǒng)中有一條專用于設(shè)置斷點(diǎn)的指令I(lǐng)NT 3。CPU執(zhí)行該指令就會(huì)產(chǎn)生一個(gè)中斷類型碼
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024約定子女探望權(quán)及離婚后財(cái)產(chǎn)分割與子女教育協(xié)議3篇
- 2025年農(nóng)業(yè)科技產(chǎn)品研發(fā)與推廣合同3篇
- 二零二五年度民宿餐飲服務(wù)員勞動(dòng)協(xié)議范本3篇
- 2024年04月新疆興業(yè)銀行烏魯木齊分行春季校園招考筆試歷年參考題庫附帶答案詳解
- 專業(yè)司機(jī)招聘協(xié)議2024版示例一
- 2025年度廠房租賃合同標(biāo)準(zhǔn)版(含租賃保證金)3篇
- 臨時(shí)崗位:2024政府工作人員協(xié)議版
- 二零二四全新鋼材供應(yīng)鏈居間管理服務(wù)協(xié)議3篇
- 2025年度產(chǎn)業(yè)園區(qū)場(chǎng)商位租賃合作合同4篇
- 2025年農(nóng)膜生產(chǎn)設(shè)備租賃與維修服務(wù)合同3篇
- 申根簽證申請(qǐng)表模板
- 企業(yè)會(huì)計(jì)準(zhǔn)則、應(yīng)用指南及附錄2023年8月
- 諒解書(標(biāo)準(zhǔn)樣本)
- 2022年浙江省事業(yè)編制招聘考試《計(jì)算機(jī)專業(yè)基礎(chǔ)知識(shí)》真題試卷【1000題】
- 認(rèn)養(yǎng)一頭牛IPO上市招股書
- GB/T 3767-2016聲學(xué)聲壓法測(cè)定噪聲源聲功率級(jí)和聲能量級(jí)反射面上方近似自由場(chǎng)的工程法
- GB/T 23574-2009金屬切削機(jī)床油霧濃度的測(cè)量方法
- 西班牙語構(gòu)詞.前后綴
- 動(dòng)物生理學(xué)-全套課件(上)
- 河北省衡水市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- DB32-T 2665-2014機(jī)動(dòng)車維修費(fèi)用結(jié)算規(guī)范-(高清現(xiàn)行)
評(píng)論
0/150
提交評(píng)論