指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì).ppt_第1頁(yè)
指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì).ppt_第2頁(yè)
指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì).ppt_第3頁(yè)
指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì).ppt_第4頁(yè)
指令系統(tǒng)與匯編語(yǔ)言程序設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩113頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1,本章主要教學(xué)內(nèi)容 指令格式及尋址的有關(guān)概念 8086CPU指令系統(tǒng)的尋址方式及其應(yīng)用 8086CPU各類指令的表示、功能、特點(diǎn)及其應(yīng)用 常用的DOS和BIOS中斷調(diào)用簡(jiǎn)介 Pentium微處理器新增指令和尋址方式介紹,第3章,尋址方式和指令系統(tǒng),2,本章教學(xué)目的及要求 通過(guò)學(xué)習(xí),使學(xué)生掌握指令的尋址方式、指令系統(tǒng)及其應(yīng)用;學(xué)會(huì)程序設(shè)計(jì)的基本方法;掌握程序設(shè)計(jì)的技巧,保證程序設(shè)計(jì)的質(zhì)量。,第3章,尋址方式和指令系統(tǒng),3,第3章,3.1 指令格式及尋址 1. 指令系統(tǒng)與指令格式 在計(jì)算機(jī)中要執(zhí)行的各種操作命令稱為指令。計(jì)算機(jī)所能執(zhí)行的全部命令的集合即為該計(jì)算機(jī)的指令系統(tǒng)。 計(jì)算機(jī)指令以二進(jìn)制編

2、碼的形式存放在存儲(chǔ)器中,用二進(jìn)制編碼形式表示的指令稱為機(jī)器指令,CPU可以直接識(shí)別機(jī)器指令。人們采用一些助記符通常是指令功能的英文單詞的縮寫(xiě),如數(shù)據(jù)傳送指令用助記符MOV(MOVE的縮寫(xiě)),這樣表示的指令稱為符號(hào)指令,也稱為匯編指令。匯編指令具有直觀、易理解、好記憶的特點(diǎn)。,尋址方式和指令系統(tǒng),4,第3章,尋址方式和指令系統(tǒng),計(jì)算機(jī)中的匯編指令由操作碼字段和操作數(shù)字段兩部分組成。 (1)操作碼字段:操作碼表示計(jì)算機(jī)要執(zhí)行的某種指令功能,由它來(lái)規(guī)定指令的操作類型,說(shuō)明計(jì)算機(jī)要執(zhí)行的具體操作,例如傳送、運(yùn)算、移位、跳轉(zhuǎn)等操作。同時(shí)還指出操作數(shù)的類型、操作數(shù)的傳送方向、寄存器編碼或符號(hào)擴(kuò)展等,是指令

3、中必不可少的組成部分。 (2)操作數(shù)字段:操作數(shù)表示計(jì)算機(jī)在操作中所需要的數(shù)據(jù),或者所需數(shù)據(jù)的存放位置(也稱為地址碼),還可以是指向操作數(shù)的地址指針或其它有關(guān)操作數(shù)據(jù)的信息。,5,8086的指令格式如圖3-1所示,指令的長(zhǎng)度范圍是16個(gè)字節(jié)。其中,操作碼字段為12個(gè)字節(jié)(B1、B2),操作數(shù)字段為04個(gè)字節(jié)(B3B6)。每條具體指令的長(zhǎng)度將根據(jù)指令的操作功能和操作數(shù)的形式而定。 圖3-1 8086的指令格式,第3章,尋址方式和指令系統(tǒng),6,第3章,尋址方式和指令系統(tǒng),2. 尋址及尋址方式的概念 計(jì)算機(jī)的指令中通常要指定操作數(shù)的位置,即給出操作數(shù)的地址信息,在執(zhí)行時(shí)需要根據(jù)這個(gè)地址信息找到需要的

4、操作數(shù),這種尋找操作數(shù)的過(guò)程稱為尋址。尋址方式就是尋找操作數(shù)或操作數(shù)地址的方式。 不同機(jī)器的指令系統(tǒng)都規(guī)定了一些尋址方式以供編程時(shí)選擇使用,根據(jù)給定的尋址方式,就可以方便地訪問(wèn)各類操作數(shù)。,7,第3章,尋址方式和指令系統(tǒng),8086指令中的操作數(shù)有三種可能的存放位置: (1)操作數(shù)直接在指令中,即跟隨在指令操作碼之后,指令的操作數(shù)部分就是操作數(shù)本身,這種操作數(shù)叫立即操作數(shù)。 (2)操作數(shù)存放在CPU的某個(gè)內(nèi)部寄存器中,這時(shí)指令的操作數(shù)部分是CPU內(nèi)部寄存器的一個(gè)編碼,稱為寄存器操作數(shù)。 (3)操作數(shù)存放在內(nèi)存儲(chǔ)器的數(shù)據(jù)區(qū)中,這時(shí)指令的操作數(shù)部分包含此操作數(shù)所在的內(nèi)存地址,稱為存儲(chǔ)器操作數(shù)。,8,

5、第3章,尋址方式和指令系統(tǒng),3.2 8086 CPU的尋址方式 3.2.1 與操作數(shù)有關(guān)的尋址方式 1.立即數(shù)尋址方式 立即數(shù)尋址方式是指操作數(shù)直接存放在給定的指令中,緊跟在操作碼之后。 立即數(shù)可以是8位或16位二進(jìn)制數(shù)。例如,給定如下指令,采用立即數(shù)尋址: MOV AL, 10 ; 十進(jìn)制數(shù)() MOV AL, 00100101B ; 二進(jìn)制數(shù)() MOV AX, 263AH ; 十六進(jìn)制數(shù)(),9,例:MOV AL, 80H MOV AX, 1234H, 立即操作數(shù)可以是8、16、32位, 若是16或32位的,則存放時(shí)必須滿足低對(duì)低,高對(duì)高的原則。 此指令中的立即數(shù)只能是源,不能是目的。

6、常用于給Reg.賦初值。,第3章,尋址方式和指令系統(tǒng),10,第3章,尋址方式和指令系統(tǒng),2. 寄存器尋址方式 寄存器尋址方式是在指令中直接給出寄存器名,寄存器中的內(nèi)容即為所需操作數(shù)。在寄存器尋址方式下,操作數(shù)存在于指令規(guī)定的8位、16位寄存器中。寄存器可用來(lái)存放源操作數(shù),也可用來(lái)存放目的操作數(shù)。 寄存器尋址方式是CPU內(nèi)部的操作,不需要訪問(wèn)總線周期,因此指令的執(zhí)行速度比較快。 對(duì)于16位操作數(shù),寄存器可以是AX、BX、CX、DX、SI、DI、SP、BP等。 對(duì)于8位操作數(shù),寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL等。,11,例:INCSI MOVAX,BX, Reg是任何CP

7、U中的通用Reg AX,BX,CXBP AH,AL 等 操作數(shù)在Reg中,無(wú)需訪問(wèn)存貯器,執(zhí)行速度快。 若選用AX,執(zhí)行指令時(shí)間更短。,指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)為源的內(nèi)容。,12,第3章,尋址方式和指令系統(tǒng),3. 存儲(chǔ)器尋址方式 計(jì)算機(jī)中訪問(wèn)內(nèi)存的尋址方式有多種,不管哪一種尋址方式,最終都將得到存放操作數(shù)的物理地址。采用存儲(chǔ)器尋址時(shí),指令中需要給出操作數(shù)的地址信息。 存儲(chǔ)器操作數(shù)的有效地址EA的計(jì)算方法和尋址方式有著密切地聯(lián)系,而操作數(shù)物理地址PA的計(jì)算則和操作數(shù)的具體存放位置有關(guān)。,13,第3章,尋址方式和指令系統(tǒng),(1)直接尋址方式 直接尋址方式是一種針對(duì)內(nèi)存的尋址方式。在這種

8、尋址方式下,指令中給出的地址碼即為操作數(shù)的有效地址EA,它是一個(gè)8位或16位的位移量。在默認(rèn)方式下,操作數(shù)存放在數(shù)據(jù)段DS中,如果要對(duì)除DS段之外的其他段如CS、ES、SS中的數(shù)據(jù)尋址,應(yīng)在指令中增加前綴,指出段寄存器名,這稱為段跨越。 在直接尋址方式的指令中,操作數(shù)的有效地址EA已經(jīng)給出,那么操作數(shù)的物理地址為:PA(DS)10HEA。,14,將ES段中2000H、2001H單元內(nèi)容分別送AL,AH(低對(duì)低,高對(duì)高) 不管數(shù)據(jù)在那個(gè)段內(nèi)存放,只要不是DS,一定要加段超越前綴。, 允許段超越 例:MOV AX,ES:2000H (或 ES:MOV AX,2000H),例:MOVAL,2000H

9、; 將DS段中2000H單元的內(nèi)容送AL 若DS4000H,則物理地址為: 4000H16+2000H42000H。見(jiàn)右圖., 直接尋址中EA可以以變量名的形式給出。 例:VALUE DB 12H MOV AL,VALUE 或 MOV AL,VALUE ;VALUE又稱為符號(hào)地址,15,第3章,尋址方式和指令系統(tǒng),(2)寄存器間接尋址方式 寄存器間接尋址方式是指操作數(shù)的有效地址EA在指定的寄存器中,這種尋址方式是在指令中給出寄存器,寄存器中的內(nèi)容為操作數(shù)的有效地址。,Reg使用規(guī)定如下: 16位尋址時(shí),EA在DI、SI、BP、BX中, 這時(shí): 若以DI、SI、BX間接尋址,則默認(rèn)操作數(shù)在數(shù)據(jù)段

10、中. 操作數(shù)物理地址DS16BX(或SI、DI) 若以BP間接尋址,則默認(rèn)操作數(shù)在堆棧段內(nèi). 操作數(shù)物理地址SS16BP 若操作數(shù)不在以上規(guī)定段內(nèi),則必須在指令中加上段超越前綴。,16,寄存器間接尋址示意圖,例:MOV AX, BX 設(shè)DS4000H, BX=0100H 寄存器間接尋址示意 圖如左。,例:MOV AX,SI ;將DS段SISI1的內(nèi)容送AL,AH MOV BH,BP ;將SS段BP的內(nèi)容送BH MOV CX,ES:BX ;將ES段BXBX1內(nèi)容送CL,CH,17,第3章,尋址方式和指令系統(tǒng),(3)寄存器相對(duì)尋址方式 這種尋址方式是在指令中給定一個(gè)基址寄存器或變址寄存器和一個(gè)8位

11、或16位的相對(duì)偏移量,兩者之和作為操作數(shù)的有效地址。當(dāng)選擇間址寄存器BX、SI、DI時(shí),指示的是數(shù)據(jù)段中的數(shù)據(jù),選擇BP作間址寄存器時(shí),指示的是堆棧段中的數(shù)據(jù)。 有效地址計(jì)算為:EA(reg)8位或16位偏移量;其中reg為給定寄存器。 物理地址計(jì)算為: PA(DS)10HEA (使用BX、SI、DI間址寄存器) PA(SS)10HEA (使用BP作為間址寄存器) 例子 P53 MOV AX,BX+10H EA=(BX)+10H PA=(DS) 10H+EA,18,第3章,尋址方式和指令系統(tǒng),(4)基址變址尋址方式 在基址變址尋址方式中,有效地址EA是基址寄存器加變址寄存器,即兩個(gè)寄存器的內(nèi)容

12、之和為操作數(shù)的有效地址。在該尋址方式中,當(dāng)基址寄存器和變址寄存器的默認(rèn)段寄存器不同時(shí),一般由基址寄存器來(lái)決定默認(rèn)用哪一個(gè)段寄存器作為段基址指針。若在指令中規(guī)定了段跨越,則可以用其他寄存器作為段基地址。 基址變址尋址方式的物理地址計(jì)算公式為: 物理地址PA(DS)10H(BX)(SI) 物理地址PA(SS)10H(BP)(DI) 例子 P53 MOV AX,BX+SI EA=(BX)+(SI) PA=(DS) 10H+EA,19,第3章,尋址方式和指令系統(tǒng),(5)相對(duì)基址變址尋址方式 這種尋址方式是在指令中給出一個(gè)基址寄存器、一個(gè)變址寄存器和8位或16位的偏移量,三者之和作為操作數(shù)的有效地址。

13、基址寄存器可取BX或BP,變址寄存器可取SI或DI。 如果基址寄存器采用BX,則段寄存器使用DS; 如果基址寄存器采用BP,則段寄存器使用SS。 其物理地址計(jì)算為: PA(DS)10H(BX)(SI)或(DI)偏移量 PA(SS)10H(BP)(SI)或(DI)偏移量,20,第3章,尋址方式和指令系統(tǒng),3.2.2 與I/O端口有關(guān)的尋址方式 由于8086CPU的I/O端口采用獨(dú)立編址方式,可有64K個(gè)字節(jié)端口或32K個(gè)字端口。指令系統(tǒng)中設(shè)有專門的輸入指令I(lǐng)N和輸出指令OUT來(lái)進(jìn)行訪問(wèn),I/O端口的尋址方式有直接端口尋址和寄存器間接端口尋址兩種。,21,第3章,尋址方式和指令系統(tǒng),1直接端口尋址

14、 直接端口尋址是在指令中直接給出要訪問(wèn)的端口地址,一般采用2位十六進(jìn)制數(shù)表示,可訪問(wèn)的端口數(shù)為0255個(gè)。 例如:IN例如:IN AL,30H ;表示從I/O端口地址為30H的端口中取出字節(jié)數(shù)據(jù)送到8位寄存器AL中。 IN AX,50H ;表示從I/O端口地址為50H和51H的兩個(gè)相鄰端口中取出字?jǐn)?shù)據(jù)送到16位寄存器AX中。,22,第3章,尋址方式和指令系統(tǒng),2間接端口尋址 當(dāng)訪問(wèn)的端口地址數(shù)256時(shí),直接端口尋址不能滿足要求,要采用I/O端口的間接尋址方式。它是把I/O端口的地址先送到寄存器DX中,用16位的DX作為間接尋址寄存器。此種方式可訪問(wèn)的端口數(shù)為065535個(gè)。 例如:MOV DX

15、,283H ;將端口地址283H送到DX寄存器。 OUT DX,AL ;將AL中的內(nèi)容輸出到DX所指定的端口中。,23,第3章,尋址方式和指令系統(tǒng),3.3 8086 CPU的指令系統(tǒng) 8086指令系統(tǒng)是80X86/Pentium微處理器的基本指令集。指令的操作數(shù)可以是8位或16位,偏移地址是16位。按功能可將指令分成六大類,即:數(shù)據(jù)傳送類指令、算術(shù)運(yùn)算類指令、邏輯運(yùn)算與移位類指令、串操作類指令、控制轉(zhuǎn)移類指令和處理器控制類指令。,24,第3章,尋址方式和指令系統(tǒng),3.3.1 數(shù)據(jù)傳送類指令 數(shù)據(jù)傳送類指令的基本功能是把操作數(shù)或操作數(shù)的地址傳送到指定的寄存器或存儲(chǔ)單元中。數(shù)據(jù)傳送類指令共有14條

16、,根據(jù)傳送的內(nèi)容可分成以下4組: (1)通用數(shù)據(jù)傳送指令; (2)累加器專用傳送指令; (3)地址傳送指令; (4)標(biāo)志寄存器傳送指令。,25,第3章,尋址方式和指令系統(tǒng),1. 通用數(shù)據(jù)傳送指令 (1)傳送指令MOV 格式:MOV dst,src MOV 指令的功能是把源操作數(shù)src傳送至目的操作數(shù)dst,執(zhí)行后源操作數(shù)內(nèi)容不變, 目的操作數(shù)內(nèi)容與源操作數(shù)內(nèi)容相同。 源操作數(shù)可以是通用寄存器、段寄存器、存儲(chǔ)器以及立即數(shù),目標(biāo)操作數(shù)可以是通用寄存器、段寄存器(CS除外)或存儲(chǔ)器。,26,數(shù)據(jù)之間的傳送關(guān)系如圖3-5所示。,圖3-5 數(shù)據(jù)之間的傳送關(guān)系,27,第3章,尋址方式和指令系統(tǒng),使用MOV

17、指令進(jìn)行數(shù)據(jù)傳送時(shí)要注意以下幾點(diǎn): (1) 段寄存器CS及立即數(shù)不能作為目標(biāo)操作數(shù); (2) 兩個(gè)存儲(chǔ)單元之間不允許直接傳送數(shù)據(jù); (3)立即數(shù)不能直接傳送到段寄存器; (4)兩個(gè)段寄存器之間不能直接傳送數(shù)據(jù); (5)傳送數(shù)據(jù)的類型必須匹配; (6)MOV指令不影響標(biāo)志位。,28,例: MOVAL,CH ;通用寄存器之間傳送字節(jié)數(shù)據(jù) MOVDS,AX ;通用寄存器段寄存器(CS不能是目標(biāo)) MOVAX,0FF3BH ;立即數(shù)通用寄存器 MOVAL,BUFFER ;存儲(chǔ)器通用寄存器 MOVDATBP+DI,ES ;段寄存器存儲(chǔ)器 MOV1000H,25H ;立即數(shù)存儲(chǔ)器 MOVCX, 1000H

18、 ;存儲(chǔ)器通用寄存器,29,第3章,尋址方式和指令系統(tǒng),(2)堆棧操作指令PUSH/POP 進(jìn)棧指令:PUSH opr ;SPSP2,將源操作數(shù)opr壓入堆棧 出棧指令:POP opr ;棧頂彈出字?jǐn)?shù)據(jù)到目標(biāo)操作數(shù)opr,SPSP+2 堆棧是存儲(chǔ)器中的一個(gè)特殊區(qū)域,主要用于存入和取出數(shù)據(jù),堆棧是以“先進(jìn)后出”的方式進(jìn)行數(shù)據(jù)操作的。在8086的堆棧組織中,堆棧從高地址向低地址方向生長(zhǎng),它只有一個(gè)出入口,堆棧指針寄存器SP始終指向堆棧的棧頂單元,30,具體的入/出棧指令如下: PUSH reg16;POPreg16 PUSH Sreg ;POPSreg PUSH mem16;POPmem16,注:

19、1. 程序中有一個(gè)PUSH,必有一個(gè)對(duì)應(yīng)的POP。 2. 遵循后進(jìn)先出原則。 3. 按字進(jìn)行操作(PUSH AH ; POP BL (錯(cuò)誤) 4. PUSH CS ; POP CS (可以) (錯(cuò)誤),指令PUSH AX 的執(zhí)行情況,31,第3章,尋址方式和指令系統(tǒng),(3)XCHG 交換指令 XCHG指令用來(lái)將源操作數(shù)和目的操作數(shù)的內(nèi)容進(jìn)行交換。它可以實(shí)現(xiàn)字節(jié)數(shù)據(jù)交換,也可以實(shí)現(xiàn)字?jǐn)?shù)據(jù)交換。 該指令的操作數(shù)必須有一個(gè)是在寄存器中,即可以在兩個(gè)通用寄存器之間或寄存器與存儲(chǔ)器之間交換數(shù)據(jù),但不能在兩個(gè)存儲(chǔ)器之間交換數(shù)據(jù)。指令執(zhí)行結(jié)果不影響標(biāo)志位。,例: XCHG AX,BX XCHG 2530H,

20、CX,注:1. 兩個(gè)存儲(chǔ)器操作數(shù)之間不能實(shí)現(xiàn)直接交換。 2. 段Reg和立即數(shù)不能作為操作數(shù)。,32,第3章,尋址方式和指令系統(tǒng),2. 累加器專用傳送指令 8086指令系統(tǒng)中將累加器AX作為數(shù)據(jù)傳輸?shù)暮诵?,系統(tǒng)的輸入/輸出指令I(lǐng)N/OUT和換碼指令XLAT就是專門通過(guò)累加器來(lái)執(zhí)行的,稱之為累加器專用傳送指令。,CPU用16根I/O地址線形成64K個(gè)8位數(shù)據(jù)傳送端口地址。 當(dāng)傳送16位數(shù)據(jù)時(shí),則從偶地址傳送數(shù)據(jù),形成32K個(gè)16位端口地址。,當(dāng)端口地址256(8根地址線)時(shí),該地址直接出現(xiàn)在指令中。 當(dāng)端口地址256(816根地址線)時(shí),該地址置于DX并將DX放在 指令中。,33,指令格式: I

21、N 累加器, 外設(shè)口地址 OUT 外設(shè)口地址, 累加器,具體指令有: INAL,imm8 OUTimm8,AL INAX,imm8 OUTimm8,AX INAL,DX OUTDX, AL INAX,DX OUTDX, AX,注: 1. 所有I/O指令只能用累加器,不能用其他Reg. 2. IN/OUT指令有字/字節(jié)兩種方式,選用那一種則取決于外設(shè)端口寬度。,34,第3章,3. 地址傳送指令 8086的地址傳送指令用于控制尋址機(jī)構(gòu),它可將存儲(chǔ)器操作數(shù)的地址傳送到16位目標(biāo)寄存器中。這類指令有以下3種形式: (1)有效地址送寄存器指令:LEA reg,src LEA指令功能是將存儲(chǔ)器操作數(shù)src

22、的有效地址傳送到16位的通用寄存器reg。,例:LEA AX,2728H ;AX=2728H LEA BX,BP+SI ;BX=BP+SI的值。 LEA SP ,0482H ;SP=0482H,注:MOV指令與LEA的不同: 前者傳送操作數(shù)的內(nèi)容,后者傳送操作數(shù)的地址。,例:MOV DI ,TABLE ;DI TABLE LEA DI ,TABLE ; DI TABLE所在單元的EA,35,例:比較 LEA BX,BUFFER MOV BX, BUFFER 兩指令的不同,存儲(chǔ)單元內(nèi)容如右圖所示。 DS:093AH,BUFFER 物理地址 093C3H 則 LEA BX,BUFFER后,BX=0

23、023H MOV BX,BUFFER后,BX=0045H,36,(2)地址指針?biāo)图拇嫫骱虳S指令:LDS reg,src 該指令完成一個(gè)32位的地址指針傳送,地址指針包括段地址和偏移地址兩部分。 (3)地址指針?biāo)图拇嫫骱虴S指令:LES reg,src LES指令執(zhí)行的操作與LDS指令相似,不同之處是以ES代替DS。,例1:LDS DI,2130H EA=2130H 2130H,2131H DI 2132H,2133H DS,例2:LDS SI,10H 設(shè)指令執(zhí)行前, DS=C000H,C0010H=0180H,C0012H=2000H 則執(zhí)行后,SI=0180H,DS=2000H,例3:LD

24、S BX,DI+1008H 程序執(zhí)行前, DS=2500H,DI=2400H, 28408H=3344H, 2840AH=1122H 執(zhí)行后,BX=3344H,DS=1122H,37,第3章,尋址方式和指令系統(tǒng),4. 標(biāo)志寄存器傳送指令 8086可通過(guò)這類指令讀出當(dāng)前標(biāo)志寄存器中各標(biāo)志位的內(nèi)容,也可以重新設(shè)置各標(biāo)志位的值。標(biāo)志寄存器的傳送指令共有4條,均位單字節(jié)指令,指令的操作數(shù)以隱含形式出現(xiàn),隱含為AH寄存器。 (1)取標(biāo)志指令LAHF (2)置標(biāo)志位指令SAHF (3)標(biāo)志寄存器入棧指令PUSHF (4)標(biāo)志寄存器出棧指令POPF,在子程序調(diào)用或中斷子程序中,常用此保護(hù)和恢復(fù)需要的標(biāo)志位。

25、,38,第3章,尋址方式和指令系統(tǒng),3.3.2 算術(shù)運(yùn)算類指令 8086的算術(shù)運(yùn)算類指令包括加、減、乘、除4種基本運(yùn)算指令,以及為進(jìn)行BCD碼十進(jìn)制數(shù)運(yùn)算而設(shè)置的各種較正指令。 8086的基本算術(shù)運(yùn)算指令中,除加1和減1指令外,其余均為雙操作數(shù)指令,兩個(gè)操作數(shù)中除了源操作數(shù)可為立即數(shù)外,必須有一個(gè)操作數(shù)在寄存器中,而單操作數(shù)指令則不允許采用立即數(shù)方式。,39,第3章,尋址方式和指令系統(tǒng),加減法運(yùn)算在執(zhí)行過(guò)程中會(huì)產(chǎn)生溢出,無(wú)符號(hào)數(shù)運(yùn)算時(shí),如果加法運(yùn)算最高位向前產(chǎn)生進(jìn)位或減法運(yùn)算最高位向前有借位,則表示出現(xiàn)溢出,采用標(biāo)志位CF=1來(lái)表示;帶符號(hào)數(shù)采用補(bǔ)碼運(yùn)算時(shí),符號(hào)位也參與運(yùn)算,出現(xiàn)溢出則表示運(yùn)算

26、結(jié)果發(fā)生了錯(cuò)誤,采用標(biāo)志位OF=1來(lái)表示。,40,第3章,尋址方式和指令系統(tǒng),算術(shù)運(yùn)算指令除加1指令I(lǐng)NC不影響CF標(biāo)志外,其余指令對(duì)CF、OF、ZF、SF、PF、AF等6個(gè)標(biāo)志位均可產(chǎn)生影響,其規(guī)則如下: 無(wú)符號(hào)數(shù)運(yùn)算產(chǎn)生溢出時(shí),CF1; 帶符號(hào)數(shù)運(yùn)算產(chǎn)生溢出時(shí),OF1; 當(dāng)運(yùn)算結(jié)果為0時(shí),ZF1; 當(dāng)運(yùn)算結(jié)果為負(fù)數(shù)時(shí),SF1; 當(dāng)運(yùn)算結(jié)果中有偶數(shù)個(gè)1時(shí),PF1; 當(dāng)操作數(shù)為BCD碼,低4位出現(xiàn)進(jìn)位1時(shí),AF1。,41,第3章,尋址方式和指令系統(tǒng),1. 加法指令 (1)不帶進(jìn)位加法指令:ADD dst,src 指令功能為:(dst)(dst)+(src) (2)帶進(jìn)位的加法指令:ADC ds

27、t,src 指令功能為:(dst)(dst)+(src)+CF (3)加1指令:INC opr 指令功能為:(opr)(opr)+1,42,第3章,尋址方式和指令系統(tǒng),2. 減法指令 (1)不帶借位減法指令:SUB dst,src 指令功能為:(dst)(dst)(src) (2)帶借位的減法指令:SBB dst,src 指令功能為:(dst)(dst)(src)CF (3)減1指令:DEC opr 指令功能為:(opr)(opr)1 (4)求補(bǔ)指令:NEG opr 該指令將 opr中的內(nèi)容取2的補(bǔ)碼,相當(dāng)于將opr中的內(nèi)容按位取反后末位加1。 (5)比較指令:CMP opr1,opr2 指令

28、功能為:(opr1)(opr2),43,第3章,尋址方式和指令系統(tǒng),3. 乘法運(yùn)算指令 乘法指令包括無(wú)符號(hào)數(shù)和帶符號(hào)數(shù)相乘的指令,指令中只給出乘數(shù),被乘數(shù)隱含給出。兩個(gè)8位數(shù)相乘時(shí)被乘數(shù)放入AL中,16位數(shù)的乘積存放到AX中;兩個(gè)16位數(shù)相乘時(shí)被乘數(shù)先放入AX寄存器中,32位數(shù)的乘積放到DX和AX兩個(gè)寄存器中,規(guī)定DX中存放高16位,AX中存放低16位。,44,第3章,尋址方式和指令系統(tǒng),(1)無(wú)符號(hào)數(shù)乘法指令:MUL src 若src為字節(jié)數(shù)據(jù),執(zhí)行AX(AL)(src); 若src為字?jǐn)?shù)據(jù),執(zhí)行DX、AX(AX)(src) (2)帶符號(hào)數(shù)乘法指令:IMUL src 該指令的執(zhí)行功能與MUL

29、相同。,45,第3章,尋址方式和指令系統(tǒng),4. 除法運(yùn)算指令 除法指令可用來(lái)實(shí)現(xiàn)兩個(gè)無(wú)符號(hào)數(shù)或帶符號(hào)數(shù)的除法運(yùn)算,包括字和字節(jié)兩種操作,該指令隱含使用AX和DX作為一個(gè)操作數(shù),指令中給出的源操作數(shù)為除數(shù)。 (1)無(wú)符號(hào)數(shù)除法指令:DIV src DIV指令的被除數(shù)、除數(shù)、商和余數(shù)全部為無(wú)符號(hào)數(shù)。 (2)帶符號(hào)數(shù)除法指令:IDIV src IDIV指令的被除數(shù)、除數(shù)、商和余數(shù)均為帶符號(hào)數(shù),且余數(shù)的符號(hào)位同被除數(shù)。 兩條指令執(zhí)行的操作功能如下: 當(dāng)除數(shù)src為字節(jié)數(shù)據(jù)時(shí),用AX除以src ,得到的8位商保存在AL中,8位余數(shù)保存在AH中; 當(dāng)除數(shù)src為字?jǐn)?shù)據(jù)時(shí),用DX、AX除以src ,得到的1

30、6位商保存在AX中,16位余數(shù)保存在DX中。,例1:設(shè)AL=B4H,(無(wú)符號(hào)數(shù)180,帶符號(hào)數(shù)-76) BL=11H,(無(wú)符號(hào)數(shù)17,帶符號(hào)數(shù)17) 用 MUL BL,則AX=0BF4H(無(wú)符號(hào)數(shù)3060),CF=OF=1 而用 IMUL BL,則AX=FAF4H(帶符號(hào)數(shù)-1292),CF=OF=1,例2:完成無(wú)/有符號(hào)數(shù)除法DP1/DP2 無(wú): XOR AH,AH MOV AL,DP1 DIV DP2 ;商在AL中,余數(shù)在AH中 有: MOV AL,DP1 CBW ; 擴(kuò)展到字 IDIVDP2,例3:DP1是字型變量,DP2和DPSUM是雙字型變量,則要區(qū)分 它們是無(wú)符號(hào)數(shù)還是有符號(hào)數(shù)(求

31、和)。,符號(hào)數(shù): MOV AX,DP1 CWD ADD AX,WORD PTR DP2 MOV WORD PTR DPSUM,AX ADC DX,WORD PTR DP2+2 MOV WORD PTR DPSUM+2,DX,無(wú)符號(hào)數(shù): MOV AX,DP1 ADD AX,WORD OPTR DP2 MOV WORD PTR DPSUM,AX MOV AX,0 ADC AX,WORD PTR DP2+2 MOV WORD PTR DPSUM+2,AX,48,第3章,尋址方式和指令系統(tǒng),5. 符號(hào)擴(kuò)展指令 符號(hào)擴(kuò)展指令是指用一個(gè)操作數(shù)的符號(hào)位形成另一個(gè)操作數(shù),后一個(gè)操作數(shù)的各位是全0(正數(shù))或全1

32、(負(fù)數(shù)),符號(hào)擴(kuò)展指令雖然使數(shù)據(jù)位數(shù)加長(zhǎng),但數(shù)據(jù)的大小并沒(méi)有改變。該指令的執(zhí)行不影響標(biāo)志位。 (1)字節(jié)轉(zhuǎn)換為字指令CBW 該指令的功能是將AL中的符號(hào)位D7擴(kuò)展到AH中。 (2)字轉(zhuǎn)換為雙字指令CWD 該指令的功能是將AX中的符號(hào)位擴(kuò)展到DX中。,49,第3章,尋址方式和指令系統(tǒng),6. 十進(jìn)制調(diào)整指令 十進(jìn)制數(shù)在計(jì)算機(jī)中是采用二進(jìn)制數(shù)來(lái)表示的,這就是BCD碼,要對(duì)十進(jìn)制的BCD碼進(jìn)行算術(shù)運(yùn)算,必須對(duì)得到的結(jié)果進(jìn)行調(diào)整,否則結(jié)果無(wú)意義。 8086指令系統(tǒng)提供了以下兩類十進(jìn)制調(diào)整指令。 (1)組合BCD碼加法、減法調(diào)整指令 DAA ;組合BCD碼加法調(diào)整指令,將AL中的和調(diào)整為組合BCD碼 DA

33、S ;組合BCD碼減法調(diào)整指令,將AL中的差調(diào)整為組合BCD碼,50,第3章,尋址方式和指令系統(tǒng),(2)非組合BCD加法、減法調(diào)整指令 AAA ;非組合BCD加法調(diào)整指令,將AL中的和調(diào)整為非組合BCD碼 AAS ;非組合BCD減法調(diào)整指令,將AL中的差調(diào)整為非組合BCD碼 AAA和AAS分別用于加法指令(ADD、ADC)或減法指令(SUB、SBB)之后,執(zhí)行時(shí)對(duì)AL進(jìn)行測(cè)試,若AL中的低四位09H,或AF1,則進(jìn)行AL(AL)06H修正;AL的高4位為0,同時(shí)AH(AH)1;CFAF1。調(diào)整后的結(jié)果放在AX中,51,第3章,尋址方式和指令系統(tǒng),3.3.3 邏輯運(yùn)算與移位類指令 1. 邏輯運(yùn)算

34、指令 有以下5條邏輯運(yùn)算指令,它們可對(duì)8位或16位操作數(shù)按位進(jìn)行邏輯運(yùn)算。 (1)邏輯與指令:AND dst,src (2)邏輯或指令:OR dst,src (3)邏輯異或指令:XOR dst,src (4)邏輯非指令:NOT dst (5)測(cè)試指令:TEST dst,src 。,52,第3章,尋址方式和指令系統(tǒng),2. 移位指令 移位操作類指令可以對(duì)字節(jié)或字?jǐn)?shù)據(jù)中的各位進(jìn)行算術(shù)移位、邏輯移位或循環(huán)移位。 移位指令的格式為: SHL/SAL/SHR/SAR dst,1/ CL 循環(huán)移位指令的格式為:ROL/ ROR/ RCL/ RCR dst,1/ CL 上述指令分別對(duì)操作數(shù)進(jìn)行邏輯左移SHL、

35、算術(shù)左移SAL、邏輯右移SHR、算術(shù)右移SAR;循環(huán)左移ROL、循環(huán)右移ROR、帶進(jìn)位的循環(huán)左移RCL、帶進(jìn)位的循環(huán)右移RCR等操作。操作數(shù)可以是字節(jié)或字操作。 圖3- 7為各種移位操作的功能示意。,53,圖3-7 移位指令的操作功能示意,54,55,例:(AX)= 0012H,(BX)= 0034H,把它們裝配成(AX)= 1234H,例:(BX) = 84F0H (1) (BX) 為無(wú)符號(hào)數(shù),求 (BX) / 2 SHR BX, 1 ; (BX) = 4278H (2) (BX) 為帶符號(hào)數(shù),求 (BX) / 2 SAR BX, 1 ; (BX) = 0C278H,MOV CL, 8 RO

36、L AX, CL ADD AX, BX,56,MOV CH, 4 ; 循環(huán)次數(shù) MOV CL, 4 ; 移位次數(shù) NEXT: ROL BX, CL MOV AX, BX AND AX, 0FH PUSH AX DEC CH JNZ NEXT,(3) (BX) = 84F0H,把 (BX) 中的 16 位數(shù)每 4 位壓入堆棧,57,第3章,尋址方式和指令系統(tǒng),3.3.4 串操作類指令 數(shù)據(jù)串是存儲(chǔ)器中的一串字節(jié)或字的數(shù)據(jù)序列。8086指令系統(tǒng)中設(shè)置了串操作指令,其操作對(duì)象是內(nèi)存中地址連續(xù)的字節(jié)串或字串。在每次操作后能夠自動(dòng)修改地址指針,為下一次操作作準(zhǔn)備。 基本串操作指令有串傳送(MOVS)、串

37、比較(CMPS)、串掃描(SCAS)、串存?。↙ODS、 STOS)等。任何一個(gè)基本串操作指令的前面都可以加一個(gè)重復(fù)操作前綴,使指令操作重復(fù),這樣在處理長(zhǎng)數(shù)據(jù)串時(shí)要比用循環(huán)程序速度快得多。,58,串處理指令: 設(shè)置方向標(biāo)志指令 CLD、STD 串處理指令 串重復(fù)前綴 MOVSB / MOVSW REP STOSB / STOSW REPE / REPZ LODSB / LODSW REPNE / REPNZ CMPSB / CMPSW SCASB / SCASW,59,與 REP 配合工作的 MOVS / STOS / LODS REP MOVS / STOS / LODS 執(zhí)行操作: (1)

38、 如 (CX)=0 則退出 REP,否則轉(zhuǎn)(2) (2) (CX) (CX) -1 (3) 執(zhí)行 MOVS / STOS / LODS (4) 重復(fù) (1) (3),60,MOVS 串傳送指令: MOVS DST, SRC MOVSB (字節(jié)) MOVSW (字) 例:MOVS ES: BYTE PTR DI, DS: SI 執(zhí)行操作: (1) (DI) (SI) (2) 字節(jié)操作:(SI)(SI)1, (DI)(DI)1 字操作: (SI)(SI)2, (DI)(DI)2 方向標(biāo)志DF=0 時(shí)用 + ,DF=1 時(shí)用 - 。 REP MOVS:將數(shù)據(jù)段中的整串?dāng)?shù)據(jù)傳送到附加段中。 源串(數(shù)據(jù)

39、段) 目的串(附加段),61,執(zhí)行 REP MOVS 之前,應(yīng)先做好: (1) 源串首地址(末地址) SI (2) 目的串首地址(末地址) DI (3) 串長(zhǎng)度 CX (4) 建立方向標(biāo)志 ( CLD 使 DF=0,STD 使 DF=1 ),62,(SI) (DI),63,data segment mess1 db personal_computer data ends extra segment mess2 db 17 dup (?) extra ends code segment lea si, mess1 lea di, mess2 mov cx, 17 cld rep movsb co

40、de ends,64,65,LODS 從串取指令: LODS SRC LODSB (字節(jié)) LODSW (字) 執(zhí)行操作: 字節(jié)操作:(AL)(SI), (SI)(SI)1 字操作:(AX)(SI), (SI)(SI)2,注意: * LODS 指令一般不與 REP 聯(lián)用 * 源串一般在數(shù)據(jù)段中(允許使用段跨越前綴來(lái)修改), 目的串必須在附加段中 * 不影響條件標(biāo)志位,66,與 REPE / REPZ(REPNE / REPNZ)配合工作的 CMPS 和 SCAS REPE / REPZ (REPNE / REPNZ) CMPS / SCAS 執(zhí)行操作: (1) 如 (CX)=0 或 ZF=0

41、(ZF=1) 則退出, 否則轉(zhuǎn)(2) (2) (CX)(CX) -1 (3) 執(zhí)行 CMPS / SCAS (4) 重復(fù) (1) (3),67,CMPS 串比較指令: CMPS SRC, DST CMPSB (字節(jié)) CMPSW (字) 執(zhí)行操作: (1) (SI) - (DI) 根據(jù)比較結(jié)果置條件標(biāo)志位:相等 ZF=1 不等 ZF=0 (2) 字節(jié)操作:(SI)(SI)1, (DI)(DI)1 字操作: (SI)(SI)2, (DI)(DI)2,68,SCAS 串掃描指令: SCAS DST SCASB (字節(jié)) SCASW (字) 執(zhí)行操作: 字節(jié)操作:(AL) - (DI), (DI)(

42、DI)1 字操作:(AX) - (DI), (DI)(DI)2,69,例:從一個(gè)字符串中查找一個(gè)指定的字符 mess db COMPUTER lea di, mess mov al, T mov cx, 8 cld repne scasb,70,例:比較兩個(gè)字符串,找出它們不相匹配的位置,例:反向傳送,lea si, mess1 lea di, mess2 mov cx, 8 cld repe cmpsb,71,第3章,尋址方式和指令系統(tǒng),3.3.5 控制轉(zhuǎn)移類指令 程序的執(zhí)行一般是按指令順序逐條執(zhí)行的,但有時(shí)需要改變程序的執(zhí)行流程??刂妻D(zhuǎn)移類指令就是用來(lái)改變程序執(zhí)行的方向,也就是修改IP和C

43、S的值。通過(guò)控制轉(zhuǎn)移指令可實(shí)現(xiàn)各種結(jié)構(gòu)化程序設(shè)計(jì),如分支結(jié)構(gòu)程序、循環(huán)結(jié)構(gòu)程序等。 (1)如果指令給出改變IP中內(nèi)容的信息,轉(zhuǎn)移的目標(biāo)位置和轉(zhuǎn)移指令在同一個(gè)代碼段,則稱為段內(nèi)轉(zhuǎn)移; (2)如果指令給出改變IP中內(nèi)容的信息,又給出改變CS中內(nèi)容的信息,轉(zhuǎn)移的目標(biāo)位置和轉(zhuǎn)移指令不在同一個(gè)代碼段,則稱為段間轉(zhuǎn)移。 根據(jù)轉(zhuǎn)移指令的功能,可分為無(wú)條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、循環(huán)控制指令、子程序調(diào)用和返回指令4類。,72,控制轉(zhuǎn)移指令: 無(wú)條件轉(zhuǎn)移指令 JMP 條件轉(zhuǎn)移指令 JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、 JP / JNP、 JB / JNB、 JL /

44、JNL、 JBE / JNBE、 JLE / JNLE、 JCXZ 循環(huán)指令 LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE 子程序調(diào)用和返回指令 CALL、RET 中斷與中斷返回指令 INT、INTO、IRET,73,第3章,尋址方式和指令系統(tǒng),1. 無(wú)條件轉(zhuǎn)移指令 無(wú)條件轉(zhuǎn)移指令JMP用來(lái)控制程序轉(zhuǎn)移到指定的位置去執(zhí)行,指令中要給出轉(zhuǎn)移位置的目標(biāo)地址,通常有以下5種形式: JMP SHORT opr ;段內(nèi)直接短轉(zhuǎn)移 JMP NEAR PTR opr ;段內(nèi)直接近轉(zhuǎn)移 JMP WORD PTR opr ;段內(nèi)間接轉(zhuǎn)移 JMP FAR PTR opr ;段間直接轉(zhuǎn)移 J

45、MP DWORD PTR opr ;段間間接轉(zhuǎn)移,74,第3章,尋址方式和指令系統(tǒng),2. 條件轉(zhuǎn)移指令 條件轉(zhuǎn)移指令是根據(jù)上一條指令所設(shè)置的條件碼來(lái)測(cè)試,被測(cè)試的內(nèi)容為狀態(tài)標(biāo)志位。滿足測(cè)試條件則轉(zhuǎn)移到指令中指定的位置去執(zhí)行,如果不滿足條件則順序執(zhí)行下一條指令。 條件轉(zhuǎn)移指令根據(jù)判斷的標(biāo)志位不同,通常可以歸納為3類:即判斷單個(gè)標(biāo)志位狀態(tài)、比較無(wú)符號(hào)數(shù)高低和比較帶符號(hào)數(shù)大小。這3類指令在使用之前,應(yīng)該有比較CMP、測(cè)試TEST、加減或邏輯運(yùn)算等指令。,75,條件轉(zhuǎn)移指令: 注意:只能使用段內(nèi)直接尋址的8 位位移量 (1) 根據(jù)單個(gè)條件標(biāo)志的設(shè)置情況轉(zhuǎn)移 格式 測(cè)試條件 JZ(JE) OPR ZF

46、= 1 JNZ(JNE) OPR ZF = 0 JS OPR SF = 1 JNS OPR SF = 0 JO OPR OF = 1 JNO OPR OF = 0 JP OPR PF = 1 JNP OPR PF = 0 JC OPR CF = 1 JNC OPR CF = 0,76,(2) 比較兩個(gè)無(wú)符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移* 格式 測(cè)試條件 = JNB(JAE,JNC) OPR CF = 0 JNBE(JA) OPR CFZF = 0 * 適用于地址或雙精度數(shù)低位字的比較,77,(3) 比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移* 格式 測(cè)試條件 = JNL(JGE) OPR SFOF = 0

47、 JNLE(JG) OPR (SFOF)ZF = 0 * 適用于帶符號(hào)數(shù)的比較 (4) 測(cè)試 CX 的值為 0 則轉(zhuǎn)移 格式 測(cè)試條件 JCXZ OPR (CX)=0,78,例:如果 X50,轉(zhuǎn)到TOO_HIGH;計(jì)算 X-Y,如果溢出 轉(zhuǎn)到 OVERFLOW,否則 |X-Y| RESULT,JG JO JNS,79,例:、 是雙精度數(shù),分別存于 DX,AX 及 BX,CX 中, 時(shí)轉(zhuǎn) L1 ,否則轉(zhuǎn) L2,CMP DX, BX JG L1 JL L2 CMP AX, CX JA L1 L2: L1: ,80,第3章,尋址方式和指令系統(tǒng),3. 循環(huán)控制指令 將一段代碼程序執(zhí)行多次操作即為循環(huán),

48、采用循環(huán)控制指令實(shí)現(xiàn)。循環(huán)控制轉(zhuǎn)向的目的地址是在以當(dāng)前IP內(nèi)容為中心的128127的范圍內(nèi),指令采用CX作為計(jì)數(shù)器,每執(zhí)行一次循環(huán),CX內(nèi)容減1,直到為零后循環(huán)結(jié)束。 (1)循環(huán)控制指令LOOP (2)為零或相等時(shí)循環(huán)控制指令LOOPZ/LOOPE (3)不為零或不相等時(shí)循環(huán)控制指令LOOPNZ/LOOPNE 注意: * CX 中存放循環(huán)次數(shù) * 只能使用段內(nèi)直接尋址的8 位位移量,81,執(zhí)行步驟: (1) (CX) (CX) - 1 (2) 檢查是否滿足測(cè)試條件,如滿足則(IP) (IP) + 8位位移量,實(shí)行循環(huán);不滿足則 IP 不變,退出循環(huán)。 循環(huán)指令:LOOP OPR 測(cè)試條件:(C

49、X) 0 為零或相等時(shí)循環(huán)指令:LOOPZ(LOOPE) OPR 測(cè)試條件:ZF=1 且 (CX) 0 不為零或不相等時(shí)循環(huán)指令:LOOPNZ(LOOPNE) OPR 測(cè)試條件:ZF=0 且 (CX) 0,82,例:求首地址為 ARRAY 的 M 個(gè)字之和, 結(jié)果存入 TOTAL,MOV CX, M MOV AX, 0 MOV SI, AX AGAIN: ADD AX, ARRAYSI ADD SI, 2 LOOP AGAIN MOV TOTAL, AX,83,例:在多重循環(huán)的程序結(jié)構(gòu)中,CX 計(jì)數(shù)器的保存和恢復(fù),MOV CX, M AGAIN: PUSH CX MOV CX, N NEXT:

50、 LOOP NEXT POP CX LOOP AGAIN,MOV DI, M AGAIN: MOV CX, N NEXT: LOOP NEXT DEC DI JNZ AGAIN,84,第3章,尋址方式和指令系統(tǒng),4. 子程序調(diào)用和返回指令 (1)子程序調(diào)用指令 指令格式為:CALL NEAR PTR opr ;段內(nèi)調(diào)用 CALL FAR PTR opr ;段間調(diào)用 (2)子程序返回指令RET 指令格式: RET 或 RET 表達(dá)式,85,子程序調(diào)用和返回指令:,86,CALL 調(diào)用指令 段內(nèi)直接近調(diào)用:CALL DST 執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (

51、IP) (IP) (IP) + 16位位移量 段內(nèi)間接近調(diào)用:CALL DST 執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) (EA),87,段間直接遠(yuǎn)調(diào)用:CALL DST 執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (CS) (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) 偏移地址 (CS) 段地址 段間間接遠(yuǎn)調(diào)用:CALL DST 執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (CS) (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (

52、IP) (EA) (CS) (EA+2),88,RET 返回指令 段內(nèi)近返回:RET 執(zhí)行操作: (IP) ( (SP)+1,(SP) ) (SP) (SP) + 2 段內(nèi)帶立即數(shù)近返回:RET EXP 段間遠(yuǎn)返回:RET 執(zhí)行操作: (IP) ( (SP)+1,(SP) ) (SP) (SP) + 2 (CS) ( (SP)+1,(SP) ) (SP) (SP) + 2 段間帶立即數(shù)遠(yuǎn)返回:RET EXP,89,例:帶立即數(shù)返回,code segment main proc far push ax push bx push cx call sub ret main endp sub proc

53、 near ret 6 sub endp code ends,(SP),90,中斷指令:,91,中斷指令: INT TYPE 或 INT 執(zhí)行操作: (SP) (SP) - 2 ( (SP)+1,(SP) ) (PSW) (SP) (SP) - 2 ( (SP)+1,(SP) ) (CS) (SP) (SP) - 2 ( (SP)+1,(SP) ) (IP) (IP) (TYPE*4) (CS) (TYPE*4+2) 溢出中斷指令:INTO 執(zhí)行操作: 若OF=1, (IP) (10H) (CS) (12H),92,從中斷返回指令:IRET 執(zhí)行操作: (IP) ( (SP)+1,(SP) )

54、 (SP) (SP) + 2 (CS) ( (SP)+1,(SP) ) (SP) (SP) + 2 (PSW) ( (SP)+1,(SP) ) (SP) (SP) + 2,注意: * TYPE (0255) 是中斷類型號(hào), 隱含的類型號(hào)為3 * INT 指令還把 IF 和 TF 置0,但不影響其它標(biāo)志位 * IRET 指令執(zhí)行完,標(biāo)志位由堆棧中取出的值確定,93,第3章,尋址方式和指令系統(tǒng),3.3.6 處理器控制類指令 這類指令主要用于修改狀態(tài)標(biāo)志位、控制CPU的功能如使CPU暫停、等待、空操作等。 標(biāo)志處理指令 CLC、 STC、 CMC、 CLD、STD、 CLI、STI 其他處理機(jī)控制與

55、雜項(xiàng)操作指令 NOP、HLT、WAIT、ESC、LOCK,94,標(biāo)志處理指令: CLC CF 0 CMC CF CF STC CF 1 CLD DF 0 STD DF 1 CLI IF 0 STI IF 1 注意: * 只影響本指令指定的標(biāo)志,95,其他處理機(jī)控制與雜項(xiàng)操作指令: NOP 無(wú)操作 (機(jī)器碼占一個(gè)字節(jié)) HLT 暫停機(jī) (等待一次外中斷,之后繼續(xù)執(zhí)行程序) WAIT 等待 (等待外中斷,之后仍繼續(xù)等待) ESC 換碼 LOCK 封鎖 (維持總線的鎖存信號(hào),直到其后的指令 執(zhí)行完) 注意: * 不影響條件標(biāo)志,96,第3章,尋址方式和指令系統(tǒng),3.4 DOS功能調(diào)用和BIOS中斷調(diào)

56、用 磁盤操作系統(tǒng)DOS(Disk Operating System)是PC機(jī)上最重要的操作系統(tǒng),DOS功能調(diào)用可完成對(duì)文件、設(shè)備、內(nèi)存的管理。對(duì)用戶來(lái)說(shuō),這些功能模塊就是幾十個(gè)獨(dú)立的中斷服務(wù)程序,這些程序的入口地址已由系統(tǒng)置入中斷向量表中,在匯編語(yǔ)言程序中可用中斷指令直接調(diào)用。DOS模塊提供了更多更必要的測(cè)試,使DOS操作更簡(jiǎn)易,而且對(duì)硬件的依賴性更少。,97,第3章,尋址方式和指令系統(tǒng),8086存儲(chǔ)器系統(tǒng)8K的ROM中存放有基本輸入輸出系統(tǒng)BIOS(Basic Input/Output System,)例行程序。BIOS給PC系列的不同微處理器提供了兼容的系統(tǒng)加電自檢、引導(dǎo)裝入、主要I/O設(shè)

57、備的處理程序以及接口控制等功能模塊來(lái)處理所有的系統(tǒng)中斷。使用BIOS功能調(diào)用,給程序員編程帶來(lái)極大方便。程序員不必了解硬件的具體細(xì)節(jié),可直接使用指令設(shè)置參數(shù),并中斷調(diào)用BIOS例行程序,所以利用BIOS功能調(diào)用編寫(xiě)的程序簡(jiǎn)潔,可讀性好,而且易于移植。,98,DOS與BIOS功能都是通過(guò)軟件中斷來(lái)調(diào)用的。在中斷調(diào)用前需要把功能號(hào)裝入AH寄存器,把子功能號(hào)裝入AL寄存器,除此之外,還需要在CPU的寄存器中提供專門的調(diào)用參數(shù)。 一般來(lái)說(shuō),調(diào)用 DOS 或 BIOS 功能的基本步驟: 將調(diào)用參數(shù)裝入指定寄存器 如需功能號(hào),將它裝入 AH 如需子功能號(hào),將它裝入 AL 按中斷類型號(hào)調(diào)用 DOS 或 BIOS 中斷 檢查返回參數(shù)是否正確 DOS 功能與 BIOS 功能都通過(guò) 軟件中斷 調(diào)用。,99,3.4.1 D

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論