第三章 8086指令和尋址(含第五章 循環(huán)分支程序設(shè)計(jì)).ppt_第1頁(yè)
第三章 8086指令和尋址(含第五章 循環(huán)分支程序設(shè)計(jì)).ppt_第2頁(yè)
第三章 8086指令和尋址(含第五章 循環(huán)分支程序設(shè)計(jì)).ppt_第3頁(yè)
第三章 8086指令和尋址(含第五章 循環(huán)分支程序設(shè)計(jì)).ppt_第4頁(yè)
第三章 8086指令和尋址(含第五章 循環(huán)分支程序設(shè)計(jì)).ppt_第5頁(yè)
已閱讀5頁(yè),還剩95頁(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、第3章 80X86的指令系統(tǒng)和尋址方式(包含第5章循環(huán)與分支程序設(shè)計(jì)), 80X86的尋址方式 數(shù)據(jù)傳送指令、算術(shù)指令、邏輯指令 順序程序設(shè)計(jì) 轉(zhuǎn)移指令 分支程序設(shè)計(jì) 循環(huán)結(jié)構(gòu)與循環(huán)指令 循環(huán)程序設(shè)計(jì),尋找指令中所需操作數(shù)存放地址的方式或程序轉(zhuǎn)移時(shí)尋找 轉(zhuǎn)移地址的方式稱為尋址方式,因而尋址方式分為兩大類, 一類是數(shù)據(jù)尋址方式,另一類是轉(zhuǎn)移地址尋址方式。,3.1 80X86的尋址方式, 立即尋址 寄存器尋址 直接尋址 寄存器間接尋址 寄存器相對(duì)尋址 基址變址尋址 相對(duì)基址變址尋址,一、立即尋址,此尋址方式所提供的操作數(shù)直接包含在指令中,它緊跟 在指令操作碼后面,存放在存儲(chǔ)器代碼段中。立即操作 數(shù)

2、可以是8位,也可以是16位。,立即尋址方式用來(lái)表示常數(shù)且只能是整數(shù),它常用于給寄存器賦初值。需要強(qiáng)調(diào)的是,立即尋址只能用于源操作數(shù),不能用于目的操作數(shù)。 OPR DST, SRC,【例3.1】 MOV AX,1234H MOV AL, 12H,操作碼,目的操作數(shù),源操作數(shù),二、寄存器尋址,此尋址方式的操作數(shù)直接存放在由指令指明的寄存器中。在 匯編指令中直接書寫寄存器名,如16位寄存器操作數(shù)可以是 AX、BX、CX、DX、SI、DI、BP、SP、DS、ES、SS、CS等;8 位寄存器操作數(shù)可以是AH、AL、BH、BL、CH、CL、DH、DL。,【例3.2】MOV DS,AX ADD CL,AH,

3、此尋址方式由于存取操作數(shù)直接從CPU內(nèi)部寄存器中獲得,不需訪問存儲(chǔ)器,因而指令執(zhí)行的速度快。 寄存器尋址既可用于源操作數(shù),又可用于目的操作數(shù),應(yīng)用頻率高。,三、存儲(chǔ)器尋址,存儲(chǔ)器尋址方式的操作數(shù)都是存放在存儲(chǔ)器中,一般是數(shù)據(jù)段、附加 段、堆棧段中的存儲(chǔ)單元。指令中給出的是存儲(chǔ)單元的地址或產(chǎn)生存 儲(chǔ)單元地址的表達(dá)式。在匯編語(yǔ)言源程序中,存儲(chǔ)單元地址是采用邏 輯地址的形式表示的,即:段首址:段內(nèi)偏移地址。段首址存放在某 個(gè)段寄存器中,段內(nèi)偏移地址是指存放操作數(shù)的存儲(chǔ)單元與段起始地 址(段首址)之間的距離(字節(jié)數(shù)),又可稱為“有效地址”,記作EA。,有效地址EA是由3個(gè)地址分量的某種組合求得,這3個(gè)

4、地址分量是: 位移量 、基址 、變址 。 這3個(gè)地址分量的不同組合,使形成有效地址EA的方法不同,相應(yīng)有 以下5種不同的存儲(chǔ)器操作數(shù)尋址方式。,1、直接尋址,直接尋址是最簡(jiǎn)單的存儲(chǔ)器尋址,這種尋址,操作數(shù)的有效地址EA 由指令直接給出。它主要用于存取簡(jiǎn)單變量。EA可以有兩種形式提供: (a) 常量 (b)變量或含有變量的表達(dá)式,【例3.3】MOV AL, 1000H MOV VAL,BX MOV AX, VAL+2,對(duì)使用直接尋址方式需說(shuō)明以下幾點(diǎn): 操作數(shù)默認(rèn)存放在數(shù)據(jù)段中,段寄存器DS在指令格式無(wú)須指定。 若操作數(shù)在代碼段、堆棧段或附加段中,則在指令格式中必須指定相應(yīng) 的段寄存器名。在操作

5、數(shù)地址之前使用前綴指出段寄存器名,這種前綴 稱為段跨越前綴。 指令中操作數(shù)的EA即可以是一個(gè)數(shù)字,也可以是一個(gè)符號(hào)地址。當(dāng)EA是 一個(gè)數(shù)字時(shí),一定要注意立即尋址方式與直接尋址方式的區(qū)別。 直接尋址方式適合于處理存儲(chǔ)器的單個(gè)存儲(chǔ)單元。,2、寄存器間接尋址,此尋址方式中,操作數(shù)的有效地址EA存放在SI、DI、BX或BP四個(gè)寄存器 之一中,即:EA(BX)或(BP)或(SI)或(DI)。SI、DI、BX、 BP在這里叫間址寄存器。若用BX、SI或DI間址尋址時(shí),則操作數(shù)默認(rèn)在 數(shù)據(jù)段中,且用DS內(nèi)容作為段首址,操作數(shù)的物理地址為: (BX) PA(DS)16 (S I) (D I) 若指令中使用BP

6、間址尋址時(shí),則操作數(shù)默認(rèn)在堆棧段中,且用SS的內(nèi)容 作為段首址,操作數(shù)的物理地址為: PA(SS)16 (BP),【例3.4】 MOV DL, BX MOV AX, DI MOV AL, SI 【例3.5】 MOV BP ,AX MOV AL, BP ,3、寄存器相對(duì)尋址,此尋址操作數(shù)的有效地址EA是指令中指定的基址寄存器的內(nèi)容或變址寄 存器的內(nèi)容與指令中給出的位移量之和,即:EA(BX)或(BP)位移量 (SI)或(DI)位移量 物理地址為:PA (DS)16(BX)Disp (SI) (DI) (SS)16(BP)Disp,【例3.6】 MOV AX, BX+7CH MOV AX, BP+

7、COUNT MOV AX,DS: BP+COUNT 【例3.7】 MOV DX,COUNT DI MOV ES:3480H SI ,AX,4、基址變址尋址,此尋址方式中操作數(shù)的有效地址EA是指令中的基址寄存器的內(nèi)容、變址 寄存器的內(nèi)容兩個(gè)地址分量之和, 即:EA (BX)(SI)或(DI) (BP)(SI)或(DI) 操作數(shù)的物理 地址為: PA (DS)16(BX)(SI) (DI) (SS)16(BP)(SI) (DI),【例3.8】 MOV AX, BX SI MOV BX, BX DI MOV DX, BP SI MOV AX,DS: BP DI ,5、相對(duì)基址變址尋址,此尋址方式中操

8、作數(shù)的有效地址EA是指令中的基址寄存器的內(nèi)容、變址 寄存器的內(nèi)容兩個(gè)地址分量之和, 即:EA (BX)(SI)或(DI) Disp (BP)(SI)或(DI) Disp 操作數(shù)的物理 地址為: PA (DS)16(BX)(SI)Disp (DI) (SS)16(BP)(SI)Disp (DI),【例3.9】 MOV AX, BX SI COUNT MOV BX, BX DI 1234H MOV DX, BP SI +COUNT MOV AX,DS: BP DI +3456H,3.2 程序占用的時(shí)間和空間,一、程序量越大,占有的存儲(chǔ)空間越大。 二、訪問存儲(chǔ)器、運(yùn)算器執(zhí)行都需要時(shí)間。 三、完成相同

9、功能的不同程序,占用存儲(chǔ)空間的大小和執(zhí)行時(shí)間上 有很大的差別。,若對(duì)存儲(chǔ)空間或執(zhí)行時(shí)間有高要求,就要仔細(xì)斟酌程序算法、數(shù)據(jù) 結(jié)構(gòu)以及指令與尋址方式的選用。,3.3 8086指令系統(tǒng),8086指令系統(tǒng)按功能可分為六大類: (1)數(shù)據(jù)傳送類指令(2)算術(shù)運(yùn)算類指令 (3)位操作指令(4)串操作指令 (5)控制轉(zhuǎn)移指令(6)處理器控制指令 8086指令按操作數(shù)個(gè)數(shù)可劃分為三種類型: (1)雙操作數(shù)指令 (2)單操作數(shù)指令 (3)無(wú)操作數(shù)指令,學(xué)習(xí)匯編指令應(yīng)從以下幾方面著重理解掌握: (1)學(xué)習(xí)指令格式; (2)掌握指令中操作數(shù)的尋址方式及尋址方式的搭配規(guī)則; (3)掌握指令的功能及指令執(zhí)行后對(duì)條件碼

10、的影響; (4)學(xué)習(xí)如何正確運(yùn)用指令。,一、數(shù)據(jù)傳送指令,1通用數(shù)據(jù)傳送指令 (1)傳送指令MOV 格式:MOVDST,SRC 功能:把源操作數(shù)傳送到目的操作數(shù)。即:(DST)(SRC),說(shuō)明: 源操作數(shù)和目的操作數(shù)的操作類型必須明確且一致;當(dāng)指令中只 有一個(gè)操作數(shù)的類型明確時(shí),另一個(gè)操作數(shù)被視為同一類型;當(dāng) 兩操作數(shù)類型均不明確時(shí),必須用“BYTEPTR”或“WORDPTR”將 一個(gè)存儲(chǔ)器操作數(shù)定義為字節(jié)或字類型。 指令執(zhí)行后,源操作數(shù)內(nèi)容不變。 指令執(zhí)行后,對(duì)標(biāo)志寄存器各位無(wú)影響。 源操作數(shù)可以是通用寄存器、段寄存器、存儲(chǔ)器和立即數(shù);目的 操作數(shù)也可以是通用寄存器、段寄存器、存儲(chǔ)器,但立即

11、數(shù)、CS 段寄存器不能作為目的操作數(shù)。源操作數(shù)和目的操作數(shù)不能同時(shí) 為存儲(chǔ)器操作數(shù)。,(1)數(shù)據(jù)傳送指令mov,立即數(shù),存儲(chǔ)器,通用寄存器 AX,BX,CX,DX SI,DI,BP,SP,CS,段寄存器DS,ES,SS,(1)數(shù)據(jù)傳送指令mov,用一條MOV指令能實(shí)現(xiàn): (a) 立即數(shù)傳送到通用寄存器或存儲(chǔ)單元 如MOVDL,a; MOVAX,1FA4H (b) 寄存器之間的傳送 如MOVAX,BX; MOVAL,DH; MOVDS,AX (c) 寄存器與存儲(chǔ)單元之間的傳送 如MOVDL,BUFBYTE MOV WORD PTR BX+SI,AX,由于MOV指令中只允許一個(gè)操作數(shù)在存儲(chǔ)器中,因

12、此用一條MOV指令 無(wú)法完成兩個(gè)存儲(chǔ)單元之間的數(shù)據(jù)傳送,但可以用二條指令來(lái)實(shí)現(xiàn)。 【例3.10】 把BUFWORD1字單元內(nèi)容傳送到BUFWORD2字單元中,可用 以下指令完成: MOV AX,BUFWORD1 MOV BUFWORD2,AX,1通用數(shù)據(jù)傳送指令,(2) 交換指令XCHG,格式:XCHGOPR1,OPR2 功能:源操作數(shù)和目的操作數(shù)的內(nèi)容相互交換。 即:(OPR1)(OPR2),說(shuō)明:該指令與MOV指令相似,但在功能上有兩點(diǎn)區(qū)別: 其一,該指令不允許使用立即數(shù)和段寄存器作為操作數(shù); 其二,該指令改變?cè)床僮鲾?shù)的內(nèi)容。,【例3.11】將內(nèi)存中DAW1單元和DAW2單元中的字?jǐn)?shù)據(jù)交換

13、。 MOV AX ,DAW1 XCHG DAW2 , AX MOV DAW1 , AX,(3)查表轉(zhuǎn)換指令XLAT 格式:XLAT或XLATOPR 功能:將(BX)為首址(AL)為位移量的字節(jié)存儲(chǔ)單元中 的數(shù)據(jù)傳送到AL中。 即:AL(BXAL)字節(jié),1通用數(shù)據(jù)傳送指令,【例3.12】將十進(jìn)制數(shù)09翻譯成7段顯示器的譯碼表如下(共陽(yáng)極)如下表,設(shè)其首地址為0200H,編程取3和7對(duì)應(yīng)的7段值,并存入DATA開始的單元。,DATAS SEGMENT ORG 0200H ARRAY DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H DATA DB ?,? DAT

14、AS ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV BX,0200H MOV AL,3 XLAT MOV DATA,AL MOV AL,7 XLAT MOV DATA+1,AL MOV AH,4CH INT 21H CODE ENDS END START,編輯程序如下:,2累加器專用傳送指令,這組指令只限于使用累加器(ac:AX 或AL)傳送信息。,3地址傳送指令,地址傳送指令主要用于將存儲(chǔ)器操作數(shù)地址(偏移地址、段地 址)傳送給指定的寄存器。它包括3條指令:LEA、LDS和LES。,(1

15、)傳送有效地址指令LEA 格式:LEAREG16,SRC 功能:將源操作數(shù)的有效地址EA傳送給目的操作數(shù)指定的16 位通用寄存器。(通常使用BX,BP,SI,DI),說(shuō)明: 源操作數(shù)必須是存儲(chǔ)器操作數(shù),即SRC采用存儲(chǔ)器尋址; 目的操作數(shù)必須是一個(gè)16位通用寄存器。 本指令對(duì)標(biāo)志位無(wú)影響。 該指令通常用來(lái)建立內(nèi)存儲(chǔ)器的寄存器指針。,注:該指令完成的功能也可用下面指令完成。 MOV BX , OFFSET ARRAY LEA BX , ARRAY,(2)傳送偏移地址及數(shù)據(jù)段首址指令LDS 格式:LDSREG16,SRC 功能:將由源操作數(shù)確定的雙字存儲(chǔ)單元的內(nèi)容傳送給DS及目的 操作數(shù)指定的16

16、位通用寄存器中,其中高字單元的內(nèi)容送 給DS,低字單元的內(nèi)容送給REG16。,說(shuō)明: 源操作數(shù)必須是雙字存儲(chǔ)器操作數(shù),即:SRC采用存儲(chǔ)器尋址, 尋找到相繼4個(gè)字節(jié)的存儲(chǔ)單元,低字單元中存放偏移地址, 高字單元中存放段首地址;目的操作數(shù)必須是一個(gè)16位通用寄 存器,通常特定為SI。 本指令不影響標(biāo)志位。,SI,DS,從指令的功能上可看出,SAHF和LAHF為互逆過程。,(3)傳送偏移地址及附加段首址指令LES 格式:LESREG16,OPS 功能:將由源操作數(shù)確定的雙字存儲(chǔ)單元的內(nèi)容傳送給ES及目的 操作數(shù)指定的16位通用寄存器中,其中高字單元的內(nèi)容送 給ES,低字單元的內(nèi)容送給REG16。

17、說(shuō)明:同LDS指令。,4標(biāo)志位傳送指令 標(biāo)志位傳送指令有4條指令,即:LAHF、SAHF、PUSHF和POPF。,(2)AH標(biāo)志送指令SAHF 格式:SAHF 功能:將AH寄存器的內(nèi)容送入標(biāo)志寄存器低8位,高8位保持不變。 該指令用于設(shè)置或恢復(fù)SF、ZF、AF、PF、CF五個(gè)標(biāo)志位, 該指令的執(zhí)行只影響標(biāo)志寄存器的低8位,對(duì)高8位(即OF、 DF、IF、TF)標(biāo)志位無(wú)影響。,(1)標(biāo)志送AH指令LAHF 格式:LAHF 功能:將標(biāo)志寄存器低8位的內(nèi)容送入AH寄存器。 即:AH(FLAGS)7-0,該指令的執(zhí)行不影響標(biāo)志位。,(3)標(biāo)志進(jìn)棧指令PUSHF 格式:PUSHF 功能:將標(biāo)志寄存器的內(nèi)

18、容壓入堆棧。,(4)標(biāo)志出棧指令POPF 格式:POPF 功能:將棧頂字單元內(nèi)容彈出到標(biāo)志寄存器中。 該指令的執(zhí)行影響標(biāo)志位。,從指令的功能上可看出, PUSHF和POPF互為逆過程。,標(biāo)志位傳送指令中SAHF和POPF指令將直接影響標(biāo)志寄存器的內(nèi)容。 利用這一特性,可以方便地改變標(biāo)志寄存器中指定位的狀態(tài).,數(shù)據(jù)傳送類指令還包括輸入/ 輸出專用指令,在PC機(jī)里所有I/O端口與CPU之間的通信都由IN和OUT指令實(shí)現(xiàn),由IN指令完成從I/O端口到CPU的信息傳送,由OUT指令完成從CPU到I/O端口的信息傳送。 注意:端口0FFH 只能使用長(zhǎng)格式; 端口0-FFFFH 即可使用長(zhǎng)格式又可使用段格

19、式。,二、算術(shù)運(yùn)算指令,算術(shù)運(yùn)算指令用來(lái)執(zhí)行加、減、乘、除四則運(yùn)算。它包括無(wú)符號(hào) 數(shù)、有符號(hào)數(shù)的二進(jìn)制算術(shù)運(yùn)算指令和十進(jìn)制算術(shù)運(yùn)算調(diào)整指令。,1二進(jìn)制數(shù)算術(shù)運(yùn)算指令 (1)加法運(yùn)算指令 加法運(yùn)算指令包括ADD、ADC的INC三條指令。, 加法指令A(yù)DD 格式:ADDDST , SRC 功能:將目的操作數(shù)與源操作數(shù)相加,結(jié)果存入目的地址中,而源 操作數(shù)不變。即:(DST)(DST)(SRC)。,說(shuō)明: 該指令的源操作數(shù)或在通用寄存器或在存儲(chǔ)單元中,也可以是立即 數(shù),而目的操作數(shù)只能在通用寄存器或存儲(chǔ)單元中,不能是立即數(shù), 且兩操作數(shù)不能同時(shí)為存儲(chǔ)器操作數(shù);操作數(shù)可以是字節(jié)或字,且 兩操作數(shù)的類型

20、明確并一致。該指令相加后,根據(jù)得到的結(jié)果設(shè)置 標(biāo)志寄存器的OF、SF、ZF、CF、AF和PF標(biāo)志位。,OF: 當(dāng)兩個(gè)有符號(hào)數(shù)相加時(shí),若兩個(gè)操作數(shù)的符號(hào)相同,而結(jié)果的符號(hào) 與之相反,則OF1,否則,其余情況OF0。 當(dāng)OF1時(shí),說(shuō)明兩個(gè)有符號(hào)數(shù)相加產(chǎn)生了溢出,即和的值超出了有 符號(hào)數(shù)的有效范圍。在把操作數(shù)視為有符號(hào)數(shù)時(shí),可通過該標(biāo)志了 解加法結(jié)果是否正確。 CF: 運(yùn)算過程中當(dāng)最高位產(chǎn)生進(jìn)位時(shí),則CF1,否則,CF0。 當(dāng)CF1時(shí),說(shuō)明運(yùn)算結(jié)果超出了無(wú)符號(hào)數(shù)的表示范圍。 在把操作數(shù)視為無(wú)符號(hào)數(shù)時(shí),可通過該標(biāo)志了解加法結(jié)果是否正確。 SF: 運(yùn)算結(jié)果的最高位為1,則SF1,否則,SF0。 ZF:

21、運(yùn)算結(jié)果為零時(shí),則ZF1;否則,ZF0。,ADD指令執(zhí)行后對(duì)標(biāo)志位的影響及作用如下,這里我們只重點(diǎn)說(shuō)明 OF、CF、SF和ZF四個(gè)標(biāo)志位。, 帶進(jìn)位加法指令A(yù)DC 格式:ADCDST,SRC 功能:與ADD指令基本相同,惟一區(qū)別是將該指令執(zhí)行前的CF值加 至目的操作數(shù)中。 即:(DST) (DST)(SRC)CF,(1)加法運(yùn)算指令 加法運(yùn)算指令包括ADD、ADC的INC三條指令。,說(shuō)明:該指令與ADD指令在功能上及結(jié)果對(duì)標(biāo)志位影響上基本相同。 該指令主要用于多字節(jié)的加法運(yùn)算。, 加1指令I(lǐng)NC 格式:INCOPR 功能:將目的操作數(shù)加1后送回目的地址中,并根據(jù)執(zhí)行結(jié)果設(shè) 置標(biāo)志位OF、SF、

22、ZF、AF、PF,但不影響CF位。,說(shuō)明: 該指令的操作數(shù)可以是字或字節(jié)且類型必須明確。其操作數(shù)只能在 通用寄存器或存儲(chǔ)單元中,不能是立即數(shù)。該指令執(zhí)行后對(duì)OF、SF、 ZF、AF、PF標(biāo)志位的影響與ADD指令相同。 INC主要用于計(jì)數(shù)器的計(jì)數(shù)或修改地址指針。,(2)減法運(yùn)算指令 減法運(yùn)算指令包括SUB、SBB、DEC、NEG和CMP五條指令。, 減法指令SUB 格式:SUBDST,SRC 功能:目的操作數(shù)減去源操作數(shù),其差值存入目的地址,源操作 數(shù)不變,即:(DST) (DST)(SRC)。并按相減的結(jié) 果設(shè)置標(biāo)志位OF、CF、SF、ZF、AF和PF。,說(shuō)明:該指令的源操作數(shù)和目的操作數(shù)可以

23、在通用寄存器或存儲(chǔ)單 元中,但兩者不能同時(shí)在存儲(chǔ)器中,立即數(shù)可作為源操作數(shù),而不 能作為目的操作數(shù)。兩操作數(shù)可以是字節(jié)或字,且類型明確一致。,SUB指令執(zhí)行后對(duì)標(biāo)志位的影響與ADD指令類似,下面僅說(shuō)明CF和OF 兩位的設(shè)置情況及作用: OF:當(dāng)兩個(gè)有符號(hào)數(shù)相減時(shí),若兩個(gè)操作數(shù)的符號(hào)相反,而結(jié)果的 符號(hào)與減數(shù)相同,則OF1,否則,其余情況OF0。 OF1時(shí),說(shuō)明有符號(hào)數(shù)減法溢出,結(jié)果是錯(cuò)誤的。OF位可用來(lái) 判斷有符號(hào)數(shù)相減,結(jié)果是否正確。 CF:當(dāng)兩無(wú)符號(hào)數(shù)相減時(shí),若減數(shù)大于被減數(shù),則此時(shí)有借位, CF1,否則CF0,CF值反映了無(wú)符號(hào)數(shù)相減時(shí)是否有借位, 帶借位減法指令SBB 格式:SBBDS

24、T,SRC 功能:SBB與SUB指令基本相同,惟一區(qū)別是:目的操作數(shù)除減去源 操作數(shù)外,還要減去該指令執(zhí)行前的CF值。 即:(DST)(DST)-(SRC)-CF。并按相減的結(jié)果設(shè)置標(biāo) 志位OF、CF、SF、ZF、AF和PF。,說(shuō)明:該指令與SUB指令在功能上及結(jié)果對(duì)標(biāo)志位的影響上基本相同。 該指令在使用上類似于ADC指令,主要用于多字節(jié)減法運(yùn)算。 SUB和SBB指令配合可以實(shí)現(xiàn)多倍精度數(shù)減法運(yùn)算。, 減1指令DEC 格式:DECOPR 功能:將目的操作數(shù)減1后送入目的地址中,并根據(jù)執(zhí)行結(jié)果設(shè)置 標(biāo)志位OF、SF、ZF、AF和PF,但不影響CF位。 即: (OPR) (OPR)1。,說(shuō)明:該指

25、令的操作數(shù)可以是字節(jié)或字且類型必須明確;其操作數(shù)只 能在通用寄存器或存儲(chǔ)單元中,不能是立即數(shù)。該指令執(zhí)行后 對(duì)OF、SF、ZF、AF、PF的影響與SUB指令相同。, 求負(fù)數(shù)指令NEG 格式:NEGOPR 功能:用零減去目的操作數(shù),相減結(jié)果送回目的地址中。 即:(OPR)0(OPR)(OPD)即求目的操作數(shù)的相反數(shù)。,說(shuō)明: (a)該指令是單操作數(shù)指令,OPR的用法與前面講過的單操作數(shù)指 令,如INC、DEC中的目的操作數(shù)相同。 (b)NEG指令是對(duì)有符號(hào)數(shù)進(jìn)行操作的,由于機(jī)器中有符號(hào)數(shù)是用 補(bǔ)碼表示的,求一個(gè)操作數(shù)的負(fù)數(shù),就是求其補(bǔ)碼,因此, NEG又叫求補(bǔ)指令,即:OPR(OPR)1。 (c

26、)該指令執(zhí)行后影響標(biāo)志位CF、OF、SF、ZF、AF和PF。其中: OF:當(dāng)字節(jié)操作數(shù)為128(80H),字操作數(shù)為32768 (8000H),執(zhí)行NEG指令后,操作數(shù)無(wú)變化,但溢出標(biāo)志 位OF置1,其余情況OF置0。 CF:當(dāng)操作數(shù)為零時(shí),求負(fù)數(shù)的結(jié)果仍為零,CF0, 其余情況CF1, 比較指令CMP 格式:CMPDST,SRC 功能:目的操作數(shù)減去源操作數(shù),結(jié)果只影響標(biāo)志位,不送入目 的地址即:(DST)(SRC)。,說(shuō)明:CMP指令與SUB指令一樣執(zhí)行減法操作,但它不保存差值結(jié)果, DST和SRC在操作前后值不變。CMP指令功能上、使用方法上、 對(duì)標(biāo)志位的影響上均與SUB指令基本相同。,

27、CMP指令常用于比較兩個(gè)操作數(shù)的大小。執(zhí)行CMP指令后,根據(jù)標(biāo)志 位的設(shè)置情況判斷兩個(gè)數(shù)的大小關(guān)系。,若兩無(wú)符號(hào)數(shù)比較時(shí): 當(dāng)ZF0時(shí),則DSTSRC; 否則:當(dāng)CF0時(shí),則DSTSRC; 當(dāng)CF1時(shí),則DSTSRC。 若兩有符號(hào)數(shù)比較時(shí): 當(dāng)ZF0時(shí),則DSTSRC; 否則:當(dāng)OFSF時(shí),則DSTSRC; 當(dāng)OFSF時(shí),則DSTSRC。 CMP指令后面常跟著條件轉(zhuǎn)移指令,根據(jù)比較結(jié)果產(chǎn)生不同的分支。,【例3.13】試編制程序計(jì)算如下表達(dá)式:Z=3X+Y-5;設(shè)X,Y分別存放在字變量 VARX,VARY中,結(jié)果存放在VARZ中。,算法分析: (1)乘法的實(shí)現(xiàn),所有的乘法都可 轉(zhuǎn)換成加法實(shí)現(xiàn)。3

28、X=X+X+X; (2)此題中加法指令使用三次,用 ADD,還是ADC.,CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,VARX ADD AX,VARX ADC AX,VARX ADC AX,VARY SUB AX,5 MOV VARZ,AX MOV AH,4CH INT 21H CODE ENDS END START,DATA SEGMENT VARX DW 0105H VARY DW 0053H VARZ DW ? DATA ENDS,(3)乘法運(yùn)算指令 乘法指令用于實(shí)現(xiàn)兩個(gè)二進(jìn)制操作數(shù)的乘法

29、運(yùn)算,乘法指 令區(qū)別無(wú)符號(hào)數(shù)和有符號(hào)數(shù),所以它提供了兩條指令: MUL和IMUL。, 無(wú)符號(hào)數(shù)乘法指令MUL 格式:MULSRC 功能:實(shí)現(xiàn)兩個(gè)無(wú)符號(hào)數(shù)相乘。 字節(jié)乘:當(dāng)SRC為字節(jié)操作數(shù)時(shí),將(AL)乘以(SRC),得 到字乘積送入AX中, 即:(AX)(AL)(SRC)。 字 乘:當(dāng)SRC為字操作數(shù)時(shí),將(AX)乘以(SRC),得到雙字 部分送入DX中,低字部分送入AX中。 即:(DX,AX)(AX)(SRC)。,說(shuō)明: (a)MUL指令有兩種操作類型,即字節(jié)乘和字乘,MUL操作類型取 決于SRC的類型,SRC指定乘數(shù),它可以是字節(jié)或字,但類型 必須明確,乘數(shù)可以在通用寄存器或存儲(chǔ)器中,但

30、不能是立 即數(shù)。 (b)MUL指令只影響OF和CF位。 若乘積的高一半(即字節(jié)相乘時(shí)乘積中的(AH),字相乘時(shí) 乘積中的(DX)為0,則OFCF0,否則OFCF1。MUL 指令對(duì)其它標(biāo)志位不確定。當(dāng)CFOF1時(shí),說(shuō)明AH或DX中 有乘積的有效數(shù)字,CFOF0時(shí),說(shuō)明AH或DX中無(wú)乘積的有 效數(shù)字,也就是說(shuō)字節(jié)乘以字節(jié)積為字節(jié)或字乘以字積為字。 編程時(shí)我們可以利用OF和CF位的設(shè)置情況檢查字節(jié)乘時(shí)乘積 的結(jié)果是字節(jié)還是字,字乘時(shí)乘積的結(jié)果是字還是雙字。,無(wú)符號(hào)數(shù)乘法指令MUL對(duì)CF和OF的影響。, 有符號(hào)數(shù)乘法指令I(lǐng)MUL 格式:IMUL SRC 功能:實(shí)現(xiàn)了兩個(gè)有符號(hào)數(shù)相乘。其操作方法與MUL

31、指令相同。,說(shuō)明:IMUL指令也只影響OF和CF位,對(duì)其它標(biāo)志位不確定。若乘積 的高一半(即AH或DX)是低一半(即AL或AX)的符號(hào)擴(kuò)展, 則OFCF0,否則,OFCF1。 當(dāng)OFCF1亦標(biāo)志著AH或DX中放有乘積的有效值,即標(biāo)志 著(AH)和(DX)不是對(duì)應(yīng)的低半部分的符號(hào)擴(kuò)展。, 字節(jié)轉(zhuǎn)換成字指令CBW 格式:CBW 功能:將(AL)的符號(hào)位擴(kuò)展到AH中。 字轉(zhuǎn)換成雙字指令CWD 格式:CWD 功能:將(AX)的符號(hào)位擴(kuò)展到DX中。,(4)除法運(yùn)算指令 除法指令用于實(shí)現(xiàn)兩個(gè)二進(jìn)制操作數(shù)的除法運(yùn)算,包 括無(wú)符號(hào)數(shù)除法指令DIV和有符號(hào)數(shù)除法指令I(lǐng)DIV。, 無(wú)符號(hào)數(shù)除法指令DIV 格式:D

32、IVSRC 功能:實(shí)現(xiàn)兩無(wú)符號(hào)數(shù)除法運(yùn)算,商和余數(shù)均為無(wú)符號(hào)數(shù)。 字節(jié)除:當(dāng)SRC為字節(jié)操作數(shù)時(shí),則以(AX)為被除數(shù),SRC 為除數(shù),將(AX)除以(SRC),得到的商送入AL 中,余數(shù)送入AH中。 即:(AX)/(SRC)AL(商) AH(余數(shù)) 字 除:當(dāng)SRC為字操作數(shù)時(shí),則以(DX,AX)為被除數(shù), SRC為除數(shù),將(DX,AX)除以(SRC),得到的商 送入AX中,余數(shù)送入DX中。 即:(DX,AX)/(SRC) AX(商) DX(余數(shù)),說(shuō)明: (a)DIV指令有兩種操作類型,即字節(jié)除和字除,其操作類型取決 于SRC的類型,SRC指定除數(shù),它的類型必須明確,它可以在通 用寄存器或

33、存儲(chǔ)器中,但不能是立即數(shù)。DIV指令的被除數(shù)、 商和余數(shù)均采用隱含尋址方式,當(dāng)字節(jié)除時(shí),被除數(shù)隱含在 AX中,商固定存入AL中,余數(shù)固定存入AH中;當(dāng)字除時(shí),被 除數(shù)隱含在DX,AX中,商固定存入AX中,余數(shù)固定存入DX中。 (b)DIV指令執(zhí)行后,標(biāo)志寄存器中各標(biāo)志位不確定,但商可產(chǎn)生 溢出。一般情況下,當(dāng)被除數(shù)的高一半(即字節(jié)除時(shí)為(AH), 字除時(shí)為(DX)大于除數(shù)時(shí),商就會(huì)產(chǎn)生溢出。當(dāng)SRC為字節(jié) 操作數(shù)時(shí),商的范圍為0255(0FFH);當(dāng)SRC為字操作數(shù)時(shí), 商的范圍為065535(0FFFFH)。若商超出此范圍,則產(chǎn)生0號(hào) 中斷(除法出錯(cuò)中斷),轉(zhuǎn)入除法出錯(cuò)中斷處理。, 有符號(hào)數(shù)

34、除法指令I(lǐng)DIV 格式:IDIVSRC 功能:實(shí)現(xiàn)兩有符號(hào)數(shù)除法運(yùn)算,該指令中的操作數(shù)、商及余數(shù)均為 有符號(hào)數(shù)且用補(bǔ)碼表示,除此之外,其余操作與DIV完全相同。,說(shuō)明: (a)IDIV指令商的符號(hào)由被除數(shù)符號(hào)與除數(shù)符號(hào)異或運(yùn)算而得到, 余數(shù)的符號(hào)規(guī)定與被除數(shù)的符號(hào)相同。 (b)有符號(hào)數(shù)除法的商中,最大的正數(shù)商是127(7FH)或 32767(7FFFH),最小的負(fù)數(shù)商是127(81H)或 32767(8001H)。當(dāng)商超出此范圍,指令產(chǎn)生了溢出。 一般情況下,當(dāng)被除數(shù)高一半(AH或DX)的絕對(duì)值大于除數(shù) 的絕對(duì)值時(shí),則可判斷IDIV指令操作結(jié)果產(chǎn)生了溢出,即產(chǎn) 生0號(hào)中斷。,【例3.14】試編

35、制程序計(jì)算如下表達(dá)式: (V-(X*Y+Z-540)/X;其中X,Y,Z,V均為16位帶符號(hào)數(shù),已分別裝入X,Y,Z,V單元中,要求上式計(jì)算結(jié)果的商存入AX,余數(shù)存入DX寄存器。,算法分析: (1)16位帶符號(hào)數(shù)乘法運(yùn)算使用IMUL, 結(jié)果存入DX,AX;為32位的數(shù)據(jù). (2)Z,V為16位數(shù)據(jù),必須符號(hào)擴(kuò)展, CWD默認(rèn)從AX擴(kuò)展到DX,AX。 (3) (V-(X*Y+Z-540)做被除數(shù),必須放 入DX,AX中,三次使用DX,AX沖突 如何解決:備份.,CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX ,DATA MOV DS , AX

36、MOV AX , X IMUL Y MOV CX , AX MOV BX , DX MOV AX , Z CWD ADD CX , AX ADC BX , DX SUB CX , 540 SBB BX , 0 MOV AX , V CWD SUB AX , CX SBB DX , BX IDIV X MOV AH , 4CH INT 21H CODE ENDS END START,DATA SEGMENT X DW 0005 Y DW 0008 Z DW 1000 V DW 540 DATA ENDS,MOV AX,Z ADD CX,AX ADC BX,0,(DX,AX)=X*Y,(BX,CX

37、)=X*Y,(BX,CX)=X*Y+Z,(BX,CX)=X*Y+Z-540,(DX,AX)=V,(DX,AX)=V-(X*Y+Z-540),(DX,AX)=(V-(X*Y+Z-540)/X,2十進(jìn)制算術(shù)運(yùn)算調(diào)整指令 十進(jìn)制算術(shù)運(yùn)算調(diào)整指令又稱為BCD碼調(diào)整指令。當(dāng)用計(jì)算機(jī)進(jìn)行十進(jìn)制算術(shù)運(yùn)算時(shí),可以先將操作數(shù)作十二進(jìn)制轉(zhuǎn)換,然后作二進(jìn)制數(shù)算術(shù)運(yùn)算,再將結(jié)果作二十進(jìn)制轉(zhuǎn)換。為了方便十進(jìn)制數(shù)的運(yùn)算,8086系統(tǒng)提供了一組十進(jìn)制算術(shù)運(yùn)算調(diào)整指令,用于將運(yùn)算后的二進(jìn)制數(shù)調(diào)整為BCD碼。該類指令分為壓縮BCD碼調(diào)整指令和非壓縮BCD碼調(diào)整指令。 注意: 十進(jìn)制調(diào)整指令不能單獨(dú)使用,必須與加、減、乘、除二進(jìn)

38、制指令配合使用才能進(jìn)行十進(jìn)制調(diào)整,十進(jìn)制調(diào)整指令形式上均為無(wú)操作數(shù)指令,其操作對(duì)象隱含在AX中。 (1)非壓縮BCD碼調(diào)整指令 非壓縮BCD碼加法調(diào)整指令A(yù)AA。 格式:AAA 功能:將AL中的和調(diào)整為非壓縮BCD碼并送回AL。具體調(diào)整方法如下: 若二進(jìn)制相加后(AL)的低4位大于9或AF=1,則:AL(AL)+ 6; AH(AH)+ 1; AF = CF = 1 且AL高4位清零。否則:CF = AF = 0 且AL高4位清零。其他標(biāo)志位OF、PF、SF、ZF不確定。 說(shuō)明:在使用AAA指令前,必須執(zhí)行ADD、ADC或INC指令把非壓縮BCD相 加,且把和存放在AL中。, 非壓縮BCD碼減法

39、調(diào)整指令A(yù)AS。 格式:AAS 功能:將AL中的差調(diào)整為非壓縮BCD碼并送回AL,向高位的借位在AH和 CF中。具體調(diào)整方法如下: 若二進(jìn)制相減后(AL)的低4位大于9或AF=1, 則:AL(AL)- 6; AH(AH)- 1;AF = CF = 1 且AL高4位清零。 否則:CF = AF = 0且AL高4位清零。其他標(biāo)志位OF、PF、SF、ZF不確定。 說(shuō)明:在使用AAS指令前,必須執(zhí)行SUB、SBB或DEC指令把非壓縮BCD相減, 且把差存放在AL中。 非壓縮BCD碼乘法調(diào)整指令A(yù)AM。 格式:AAM 功能:將AL中的積調(diào)整為非壓縮BCD碼并送回AX。具體調(diào)整方法是: 把AL寄存器的內(nèi)容

40、除以0AH,并把商放在AH寄存器中,余數(shù)放 在AL寄存器中。 非壓縮BCD碼除法調(diào)整指令A(yù)AD。 格式:AAD 功能:除法運(yùn)算前,先調(diào)整被除數(shù)AX內(nèi)容, 使:AL(AH)* 0AH +(AL) , AH 0,(2)壓縮BCD碼調(diào)整指令 壓縮BCD碼加法調(diào)整指令DAA。 格式:DAA 功能:將AL中的和調(diào)整為壓縮BCD碼并送回AL。本指令執(zhí)行之前必須先 執(zhí)行ADD或ADC指令,把兩個(gè)壓縮BCD碼相加,且和存放在AL寄存 器中。具體調(diào)整方法是: 若(AL)的低4位大于9或AF=1,則:AL(AL)+ 06H,并使AF=1; 若(AL)的高4位大于9或CF=1,則:AL(AL)+ 60H,并使CF=

41、1; 其余情況AL內(nèi)容不變。 說(shuō)明:DAA指令影響CF、ZF、SF、AF和PF,對(duì)OF無(wú)定義。 壓縮BCD碼減法調(diào)整指令DAS。 格式:DAS 功能:將AL中的差調(diào)整為壓縮BCD碼并送回AL。本指令執(zhí)行之前必須先 執(zhí)行SUB或SBB指令,把兩個(gè)壓縮BCD碼相減,且差存放在AL寄存 器中。具體調(diào)整方法是: 若(AL)的低4位大于9或AF=1,則:AL(AL)- 06H,并使AF=1; 若(AL)的高4位大于9或CF=1,則:AL(AL)- 60H,并使CF=1; 其余情況AL內(nèi)容不變。 說(shuō)明:DAS指令影響CF、ZF、SF、AF和PF,對(duì)OF無(wú)定義。,【上機(jī)練習(xí)1】試編制程序?qū)?nèi)存單元中ARRA

42、Y開始的10個(gè)字單元的數(shù)據(jù)求 和,并將結(jié)果送人SUM單元中。(假設(shè)不溢出),考察點(diǎn)分析: (1)多個(gè)字?jǐn)?shù)據(jù)求和,加法指令使用.ADD; ADC; 內(nèi)存的訪問方法。 (2)乘法的實(shí)現(xiàn)方法;默認(rèn)寄存器DX,AX; 數(shù)據(jù)段定義的內(nèi)容。 (3) 雙字?jǐn)?shù)據(jù)操作注意事項(xiàng)。,【上機(jī)練習(xí)2 】試采用兩種不同的方法編制程序求Y=10X;,【上機(jī)練習(xí)3 】將內(nèi)存DATAX(12000009H)和DATAY(00000004H)中的兩個(gè)雙字?jǐn)?shù)據(jù)相加,結(jié)果再減去-12,結(jié)果存入DATAZ單元。,分析題意,確定算法; 根據(jù)算法畫出框圖; 根據(jù)框圖寫出程序; 上機(jī)調(diào)試。,3.3 順序程序設(shè)計(jì),一、匯編語(yǔ)言程序設(shè)計(jì)的步驟:

43、,二、匯編語(yǔ)言程序設(shè)計(jì)的基本結(jié)構(gòu),順序結(jié)構(gòu),子程序結(jié)構(gòu),循環(huán)結(jié)構(gòu),分支結(jié)構(gòu),復(fù)合結(jié)構(gòu):多種程序結(jié)構(gòu)的組合,三、順序程序設(shè)計(jì)舉例,【例3.14】試編制程序計(jì)算如下表達(dá)式: (V-(X*Y+Z-540)/X;其中X,Y,Z,V均為16位帶符號(hào)數(shù),已分別裝入X,Y,Z,V單元中,要求上式計(jì)算結(jié)果的商存入AX,余數(shù)存入DX寄存器。,DATA SEGMENT X DW 0005 Y DW 0008 Z DW 1000 V DW 540 DATA ENDS,MOV AX , X IMUL Y MOV CX , AX MOV BX , DX MOV AX , Z CWD ADD CX , AX ADC BX

44、 , DX SUB CX , 540 SBB BX , 0 MOV AX , V CWD SUB AX , CX SBB DX , BX IDIV X MOV AH , 4CH INT 21H CODE ENDS END START,CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX ,DATA MOV DS , AX,3.4 分支程序設(shè)計(jì),一、轉(zhuǎn)移指令,1無(wú)條件轉(zhuǎn)移指令 格式:JMPOPR 無(wú)條件轉(zhuǎn)移分為段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。 (1)段內(nèi)直接短轉(zhuǎn)移 格式:JMP SHORTOPR (2)段內(nèi)直接近轉(zhuǎn)移 格式:JMP NEAR PTR OPR,(3

45、)段內(nèi)間接轉(zhuǎn)移 格式:JMP WORD PTR OPR (4)段間直接遠(yuǎn)轉(zhuǎn)移 格式:JMP FAR PTR OPR (5)段間間接轉(zhuǎn)移 格式:JMP DWORD PTR OPR,1無(wú)條件轉(zhuǎn)移指令,(1)根據(jù)條件標(biāo)志位的狀態(tài)判斷的轉(zhuǎn)移指令 這組條件轉(zhuǎn)移指令共有10條。 JZ/JE 結(jié)果為零/相等則轉(zhuǎn)移。 格式:JZ/JEOPR 測(cè)試條件:ZF=1,2條件轉(zhuǎn)移指令, JNZ/JNE 結(jié)果不為零/不相等則轉(zhuǎn)移。 格式:JNZ/JNEOPR 測(cè)試條件:ZF=0 JS 結(jié)果為負(fù)則轉(zhuǎn)移。 格式:JS OPR 測(cè)試條件:SF=1 JNS 結(jié)果為正則轉(zhuǎn)移。 格式:JNSOPR 測(cè)試條件:SF=0, JO 溢出

46、則轉(zhuǎn)移。 格式:JO OPR 測(cè)試條件:OF=1 JNO 不溢出則轉(zhuǎn)移。 格式:JNOOPR 測(cè)試條件:OF=0 JP/JPE 奇偶位為1則轉(zhuǎn)移。 格式:JP/JPE OPR 測(cè)試條件:PF=1,2條件轉(zhuǎn)移指令 (1)根據(jù)條件標(biāo)志位的狀態(tài)判斷的轉(zhuǎn)移指令, JNP/JPO 奇偶位為0則轉(zhuǎn)移。 格式:JNP/JPO OPR 測(cè)試條件:PF=0 JC 進(jìn)位為1則轉(zhuǎn)移。 格式:JC OPR 測(cè)試條件:CF=1 JNC 進(jìn)位為0則轉(zhuǎn)移。 格式:JNCOPR 測(cè)試條件:CF=0,2條件轉(zhuǎn)移指令 (1)根據(jù)條件標(biāo)志位的狀態(tài)判斷的轉(zhuǎn)移指令,(2) 根據(jù)兩個(gè)無(wú)符號(hào)數(shù)的比較結(jié)果判斷的轉(zhuǎn)移指令,2條件轉(zhuǎn)移指令, J

47、B/JNAE 低于/不高于等于轉(zhuǎn)移。 格式:JB/JNAEOPR 測(cè)試條件:CF=1且ZF=0 本指令用于兩個(gè)無(wú)符號(hào)數(shù)a、b的比較。若ab,則 滿足條件,轉(zhuǎn)移。 JNB/JAE 不低于/高于等于則轉(zhuǎn)移。 格式:JNB/JAEOPR 測(cè)試條件:CF=0或ZF=1 本指令用于兩個(gè)無(wú)符號(hào)數(shù)a、b的比較。若ab,則 滿足條件,轉(zhuǎn)移。, JBE/JNA 低于等于/不高于則轉(zhuǎn)移。 格式:JBE/JNA OPR 測(cè)試條件:CF=1或ZF=1 本指令用于兩個(gè)無(wú)符號(hào)數(shù)a、b的比較。若ab,則 滿足條件,轉(zhuǎn)移。 JNBE/JA 不低于等于/高于則轉(zhuǎn)移。 格式:JNBE/JA OPR 測(cè)試條件:CF=0且ZF=0

48、本指令用于兩個(gè)無(wú)符號(hào)數(shù)a、b的比較。若ab,則 滿足條件,轉(zhuǎn)移。,2條件轉(zhuǎn)移指令,(2) 根據(jù)兩個(gè)無(wú)符號(hào)數(shù)的比較結(jié)果判斷的轉(zhuǎn)移指令,2條件轉(zhuǎn)移指令,(3)根據(jù)兩個(gè)帶符號(hào)數(shù)的比較結(jié)果判斷的轉(zhuǎn)移指令, JL/JNGE 小于/不大于等于則轉(zhuǎn)移。 格式:JL/JNGE OPR 測(cè)試條件:SFOF且ZF=0 本指令用于兩個(gè)有符號(hào)數(shù)a、b的比較。若ab,則 滿足條件,轉(zhuǎn)移。 JNL/JGE 不小于/大于等于則轉(zhuǎn)移。 格式:JNL/JGE OPR 測(cè)試條件:SF=OF或ZF=1 本指令用于兩個(gè)有符號(hào)數(shù)a、b的比較。若ab,則 滿足條件,轉(zhuǎn)移。,2條件轉(zhuǎn)移指令,(3)根據(jù)兩個(gè)帶符號(hào)數(shù)的比較結(jié)果判斷的轉(zhuǎn)移指令,

49、 JLE/JNG 小于等于/不大于則轉(zhuǎn)移。 格式:JLE/JNG OPR 測(cè)試條件:SFOF或ZF=1 本指令用于兩個(gè)有符號(hào)數(shù)a、b的比較。若ab,則 滿足條件,轉(zhuǎn)移。 JG/JNLE 大于/不小于等于則轉(zhuǎn)移。 格式:JG/JNLE OPR 測(cè)試條件:SF=OF且ZF=0 本指令用于兩個(gè)有符號(hào)數(shù)a、b的比較。若ab,則 滿足條件,轉(zhuǎn)移。,2條件轉(zhuǎn)移指令,(4)測(cè)試CX內(nèi)容為零則轉(zhuǎn)移指令,JCXZCX寄存器的內(nèi)容為零則轉(zhuǎn)移 格式:JCXZ OPR 測(cè)試條件:(CX)=0,二、分支程序設(shè)計(jì),1利用比較(或測(cè)試)轉(zhuǎn)移指令實(shí)現(xiàn) 分支程序設(shè)計(jì) 2利用跳轉(zhuǎn)表實(shí)現(xiàn)分支程序設(shè)計(jì) (1)根據(jù)表內(nèi)地址分支 (2)

50、根據(jù)表內(nèi)指令分支 (3)根據(jù)表內(nèi)關(guān)鍵字分支,【例3.15】已知(BX)=84F0H,試編制程序把(BX)中的16位數(shù)每4位壓入堆棧(高位先壓入)。,0000000000001000H,0000000000000000H,0000000000001111H,0000000000000100H,CODE SEGMENT ASSUME CS:CODE,SS:SSTACK START: 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 MOV AH,4CH INT 21H

51、 CODE ENDS END START,分析: (1)入棧四次,循環(huán)完成。 未學(xué)循環(huán)指令,如何解 決:設(shè)置計(jì)數(shù)器,判斷 計(jì)數(shù)器是否為0實(shí)現(xiàn)。 (2)每次入棧四位,如何從 16位中提取四位:移位 和邏輯操作完成(注意 原數(shù)據(jù)的保留) (3)注意每次入棧的數(shù)據(jù)是 16位,SSTACK SEGMENT PARA STACK DW 80 DUP (0) SSTACK ENDS,3.5 循環(huán)程序結(jié)構(gòu)與設(shè)計(jì),一、循環(huán)程序的組成與結(jié)構(gòu),1循環(huán)程序的組成 一個(gè)循環(huán)程序通常由以下5個(gè)部分組成: (1)初始化部分 (2)工作部分 (3)修改部分 (4)控制部分 (5)結(jié)束處理部分,(設(shè)置循環(huán)的初始狀態(tài)),循環(huán)體

52、,2、循環(huán)程序的結(jié)構(gòu)形式,循環(huán)程序有兩種結(jié)構(gòu)形式: (1)“先執(zhí)行,后判斷”結(jié)構(gòu) (2)“先判斷,后執(zhí)行”結(jié)構(gòu),初始化,循環(huán)體,N,Y,DO-UNTIL 結(jié)構(gòu),初始化,循環(huán)體,循環(huán)控制 條件,Y,N,DO-WHILE 結(jié)構(gòu),二、循環(huán)指令,循環(huán)指令 OPCODE OPR LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE,注意: 使用CX寄存器做循環(huán)計(jì)數(shù); OPR必須指定一個(gè)表示轉(zhuǎn)向地址的標(biāo)號(hào)(符號(hào)地址),而在機(jī)器 指令里則用8位位移量來(lái)表示轉(zhuǎn)向地址與當(dāng)前IP值之差。即只能使 用段內(nèi)直接短轉(zhuǎn)移的尋址方式; 循環(huán)指令的執(zhí)行不影響標(biāo)志位。,執(zhí)行的步驟: (1)(CX) (CX)-1 (2)

53、檢查是否滿足測(cè)試條件,如滿足就轉(zhuǎn)向由OPR指定的轉(zhuǎn)向地址去執(zhí) 行,即實(shí)行循環(huán);如不滿足則IP不變,退出循環(huán),程序繼續(xù)執(zhí)行。,指令格式: LOOP OPR 測(cè)試條件:(CX)0,執(zhí)行的步驟: (1)(CX) (CX)-1 (2)檢查是否滿足cx0,如滿足則轉(zhuǎn)向有OPR指定的轉(zhuǎn)向地址去執(zhí) 行,即實(shí)行循環(huán); 如不滿足則IP不變,退出循環(huán),程序繼續(xù)執(zhí)行。,1、循環(huán)指令LOOP,LOOP指令的程序結(jié)構(gòu)和框圖:,MOV CX,N AGAIN: LOOP AGAIN,(CX) 循環(huán)次數(shù),循環(huán)體,(CX) (CX)-1,(CX) 0?,N,Y,循環(huán)體,【例3.16】有一個(gè)首地址為ARRAY的M字?jǐn)?shù)組,試編程求

54、出該數(shù)組的 內(nèi)容之和(不考慮溢出),并把結(jié)果存入TOTAL中。,分析: 多字?jǐn)?shù)組求和,要多次使用加法指令,可用循環(huán)實(shí)現(xiàn); 循環(huán)次數(shù)的確定,一般求和可確定和初值為0,進(jìn)而與數(shù)組內(nèi)容求和,因而循環(huán)次數(shù)為數(shù)組元素的個(gè)數(shù)M; 循環(huán)體的內(nèi)容: 加法指令 修改地址指針,MOV CX,M MOV AX,0 MOV SI,AX AGAIN: ADD AX,ARRAYSI ADD SI,2 LOOP AGAIN MOV TOTAL,AX,LOOP指令應(yīng)用舉例,LOOP AGAIN,DEC CX JNZ AGAIN,DEC BX JNZ AGAIN,多重循環(huán)中CX的保留和恢復(fù),MOV CX,M AGAIN: .

55、PUSH CX MOV CX,N NEXT: . LOOP NEXT . POP CX LOOP AGAIN,MOV BX,M AGAIN: . MOV CX,N NEXT: . LOOP NEXT . DEC BX JNZ AGAIN, 指令格式:LOOPZ/LOOPE OPR 測(cè)試條件:ZF=1且(CX)0,執(zhí)行的步驟: (1)(CX) (CX)-1 (2)檢查是否滿足ZF=1且cx0 ,如滿足則轉(zhuǎn)向由OPR指定的轉(zhuǎn)向地 址去執(zhí)行,即實(shí)行循環(huán); 如不滿足則IP不變,退出循環(huán),程序繼續(xù)執(zhí)行。,2、當(dāng)為零或相等時(shí)循環(huán)指令LOOPZ/LOOPE,注意:對(duì)于LOOPZ/LOOPE指令而言,有兩種退

56、出情況: (1)(CX)=0時(shí),正常退出; (2)當(dāng)ZF=0時(shí),無(wú)論(CX)為何值,均提前退出循環(huán)。,循環(huán)體,(CX)=0?,N,N,ZF=0?,Y,Y,LOOPZ/LOOPE指令框圖:,提前退出,正常退出,3、當(dāng)不為零或不相等時(shí)循環(huán)LOOPNZ/LOOPNE 指令格式:LOOPNZ/LOOPNE OPR 測(cè)試條件:ZF=0且(CX)0,執(zhí)行的步驟: (1)(CX) (CX)-1 (2)檢查是否滿足ZF=0且cx0 ,如滿足則轉(zhuǎn)向由OPR指定的轉(zhuǎn)向地 址去執(zhí)行,即實(shí)行循環(huán); 如不滿足則IP不變,退出循環(huán),程序繼續(xù)執(zhí)行。,注意:對(duì)于LOOPNZ/LOOPNE指令而言,有兩種退出情況: (1)(CX)=0時(shí),正常退出; (2)當(dāng)ZF=1時(shí),無(wú)論(CX)

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論