微機(jī)原理 第三章6_第1頁(yè)
微機(jī)原理 第三章6_第2頁(yè)
微機(jī)原理 第三章6_第3頁(yè)
微機(jī)原理 第三章6_第4頁(yè)
微機(jī)原理 第三章6_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、12022-4-293.2.5 調(diào)用調(diào)用/轉(zhuǎn)移轉(zhuǎn)移/循環(huán)控制循環(huán)控制/中斷指令中斷指令轉(zhuǎn)移可分成兩類(lèi):段內(nèi)或段間轉(zhuǎn)移。轉(zhuǎn)移可分成兩類(lèi):段內(nèi)或段間轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移:只要改變段內(nèi)轉(zhuǎn)移:只要改變IP寄存器的內(nèi)容寄存器的內(nèi)容 指在同一段的范圍之內(nèi)進(jìn)行轉(zhuǎn)移指在同一段的范圍之內(nèi)進(jìn)行轉(zhuǎn)移 即用新的轉(zhuǎn)移目標(biāo)地址代替原有的即用新的轉(zhuǎn)移目標(biāo)地址代替原有的IP值。值。段間轉(zhuǎn)移:要修改段間轉(zhuǎn)移:要修改IP、 CS寄存器的內(nèi)容寄存器的內(nèi)容 轉(zhuǎn)到另一段去執(zhí)行程序。轉(zhuǎn)到另一段去執(zhí)行程序。 即即轉(zhuǎn)移目標(biāo)地址轉(zhuǎn)移目標(biāo)地址= 新的段地址和偏移地址組成。新的段地址和偏移地址組成。目標(biāo)地址可以是:直接方式目標(biāo)地址可以是:直接方式/間接

2、方式給出。間接方式給出。代碼段代碼段代碼段代碼段代碼段代碼段代碼段代碼段第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)22022-4-291. 子程序調(diào)用和返回指令子程序調(diào)用和返回指令CALL label主程序主程序RET子程序子程序回到回到CALL指令后的指令指令后的指令處處返回地址返回地址 CALL 1000H 段內(nèi)直接段內(nèi)直接 CALLEAX 段內(nèi)間接段內(nèi)間接CALL2500H:3600H 段間直接段間直接CALLDWORD PTR DI 段間間接段間間接第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)32022-4-29放在子程序的末尾放在子程序的末尾使子程序在功能完成后返回調(diào)用程序繼續(xù)

3、執(zhí)行。使子程序在功能完成后返回調(diào)用程序繼續(xù)執(zhí)行。*為能準(zhǔn)確返回為能準(zhǔn)確返回 ,返回指令類(lèi)型與調(diào)用指令類(lèi)型相對(duì)應(yīng)。,返回指令類(lèi)型與調(diào)用指令類(lèi)型相對(duì)應(yīng)。在子程序調(diào)用時(shí),需要保存返回地址,返回地址入棧在子程序調(diào)用時(shí),需要保存返回地址,返回地址入棧在子程序返回時(shí):將返回地址出棧在子程序返回時(shí):將返回地址出棧 段內(nèi)返回段內(nèi)返回出棧偏移地址出棧偏移地址IP IPSS:SP, SPSP2 段間返回段間返回出棧偏移地址出棧偏移地址IP和段地址和段地址CS IPSS:SP,SPSP2 CSSS:SP,SPSP2返回指令返回指令 RET第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)42022-4-29RET n帶

4、參數(shù)的返回指令:帶參數(shù)的返回指令: RET指令指令可以帶有一個(gè)立即數(shù)可以帶有一個(gè)立即數(shù)i16,則堆棧指針,則堆棧指針SP將增加,即將增加,即SPSP+i16,這個(gè)特點(diǎn)使得程序可以方便地廢除若干執(zhí)行這個(gè)特點(diǎn)使得程序可以方便地廢除若干執(zhí)行CALL指令以前入棧的參數(shù)指令以前入棧的參數(shù) 段內(nèi)返回段內(nèi)返回 段間返回段間返回 段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回 段間帶立即數(shù)返回段間帶立即數(shù)返回n只能為偶數(shù)只能為偶數(shù)第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)52022-4-29(AX)(BX)(CX)(SP)code segment main proc far push ax push bx push c

5、x call sub retmain endpsub proc near ret 6sub endpcode ends (SP) 堆棧段堆棧段(SP)(IP)第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)62022-4-29JMP1000H ;段內(nèi)直接;段內(nèi)直接JMPCX ;段內(nèi)間接;段內(nèi)間接JMP1000H:2000H ;段間直接;段間直接JMP DWORD PTR SI ;段間間接;段間間接JMP dest ; 必須指定轉(zhuǎn)移目標(biāo)地址必須指定轉(zhuǎn)移目標(biāo)地址(或轉(zhuǎn)向地址或轉(zhuǎn)向地址)。2. 無(wú)條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令JMP/J*(其中,(其中,* 代表各種條件)代表各

6、種條件)1) 無(wú)條件轉(zhuǎn)移指令無(wú)條件轉(zhuǎn)移指令JMP例:已知例:已知(BX)=1000H,(SI)=2000H , (DS)=2000H(23000H)=0250H, (23002H)=2000HJMP DWORD PTR BXSI則:則: (BX)+(SI)=3000H (IP)=(PA)=(16d(DS)+(BX)+(SI)=(23000H)=0250H (CS)=(PA+2)=2000H第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)72022-4-29 JE/JZ JNE/JNZ JG/JNLE JNG/JLE JL/JNGE JNL/JGE JNA/JBE JB/JNAE JNB/JAE

7、JA/JNBEv JSv JNSv JOv JNOv JPv NPv JCXZv JECXZ2) 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令J*第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)82022-4-29所有條件轉(zhuǎn)移指令都是相對(duì)轉(zhuǎn)移形式所有條件轉(zhuǎn)移指令都是相對(duì)轉(zhuǎn)移形式, 段內(nèi)范圍。段內(nèi)范圍。當(dāng)需往一個(gè)較遠(yuǎn)地方進(jìn)行條件轉(zhuǎn)移時(shí),當(dāng)需往一個(gè)較遠(yuǎn)地方進(jìn)行條件轉(zhuǎn)移時(shí),選用條件轉(zhuǎn)移轉(zhuǎn)到附近一個(gè)單元,選用條件轉(zhuǎn)移轉(zhuǎn)到附近一個(gè)單元,然后,再用無(wú)條件轉(zhuǎn)移轉(zhuǎn)到較遠(yuǎn)的目的地。然后,再用無(wú)條件轉(zhuǎn)移轉(zhuǎn)到較遠(yuǎn)的目的地。條件轉(zhuǎn)移指令中,相當(dāng)一部分指令是在比較完二個(gè)條件轉(zhuǎn)移指令中,相當(dāng)一部分指令是在比較完二個(gè) 數(shù)大小后,根據(jù)結(jié)果而決定是

8、否轉(zhuǎn)移,數(shù)大小后,根據(jù)結(jié)果而決定是否轉(zhuǎn)移, 條件轉(zhuǎn)移指令不影響標(biāo)志位條件轉(zhuǎn)移指令不影響標(biāo)志位第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)92022-4-29按轉(zhuǎn)移條件不同,條件轉(zhuǎn)移指令可以分為四大類(lèi):按轉(zhuǎn)移條件不同,條件轉(zhuǎn)移指令可以分為四大類(lèi): 以單個(gè)狀態(tài)標(biāo)志作為轉(zhuǎn)移條件助記符以單個(gè)狀態(tài)標(biāo)志作為轉(zhuǎn)移條件助記符 轉(zhuǎn)移條件轉(zhuǎn)移條件 以以CX的值為的值為0作為轉(zhuǎn)移條件作為轉(zhuǎn)移條件JCXZ/JECXZ(E)CX=0第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)102022-4-29JA/JNBECFZF=0高于高于/JAE/JNB/JNCCF=0 高于或等于高于或等于/無(wú)進(jìn)位無(wú)進(jìn)位JB/JNAE/J

9、CCF=1 /不高于等于不高于等于/有進(jìn)位有進(jìn)位JBE/JNACFZF=1 /不高于不高于以?xún)蓚€(gè)無(wú)符號(hào)數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以?xún)蓚€(gè)無(wú)符號(hào)數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以?xún)蓚€(gè)帶符號(hào)數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以?xún)蓚€(gè)帶符號(hào)數(shù)比較的結(jié)果作為轉(zhuǎn)移條件JG/JNLE(SF OF)ZF=0大于大于/JGE/JNL SF OF=0 大于或等于大于或等于/JL/JNGE SF OF=1 /不大于等于不大于等于JLE/JNG(SF OF)ZF=1/不大于不大于第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)112022-4-29條件轉(zhuǎn)移指令應(yīng)用條件轉(zhuǎn)移指令應(yīng)用 例:比較二個(gè)數(shù)是否相等例:比較二個(gè)數(shù)是否相等, 如相等做動(dòng)作

10、如相等做動(dòng)作1 , 否則否則 做動(dòng)作做動(dòng)作2CMP AX,BXAction_2: 或或 CMP AX,BX action_1: 第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)122022-4-29例:例: X,Y放在放在X,Y單元里,單元里,(帶符號(hào)數(shù)判斷帶符號(hào)數(shù)判斷) 先判先判X 50,YES too_high, NO 做做X-Y , 溢出溢出overflow , 否則求否則求|X-Y|result程序程序: MOV AX, X CMP AX, 50 JG too_high ;大于轉(zhuǎn)大于轉(zhuǎn)too_highSUB AX, YJO overflow ;溢出轉(zhuǎn)溢出轉(zhuǎn)overflowJNS nonn

11、eg ; S=0轉(zhuǎn)轉(zhuǎn)nonneg NEG AX nonneg: MOV result , AXtoo_high:overflow:第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)132022-4-29 例例:在在M中有一個(gè)首地址為中有一個(gè)首地址為array的的N字?jǐn)?shù)組字?jǐn)?shù)組, 要求測(cè)試其中正數(shù)、要求測(cè)試其中正數(shù)、0及負(fù)及負(fù)數(shù)的個(gè)數(shù)。數(shù)的個(gè)數(shù)。 (帶符號(hào)數(shù)判斷帶符號(hào)數(shù)判斷), 正數(shù)個(gè)數(shù)放在(正數(shù)個(gè)數(shù)放在(DI)中)中, 0的個(gè)數(shù)放在(的個(gè)數(shù)放在(SI)中,負(fù)數(shù)的個(gè)數(shù)放在中,負(fù)數(shù)的個(gè)數(shù)放在 N-(DI)-(SI)送()送(AX), 如果沒(méi)有負(fù)數(shù)轉(zhuǎn)如果沒(méi)有負(fù)數(shù)轉(zhuǎn)skip, 如果有負(fù)數(shù)轉(zhuǎn)如果有負(fù)數(shù)轉(zhuǎn)ne

12、g_val程序:程序: MOV CX,N ; N字?jǐn)?shù)組字?jǐn)?shù)組 MOV BX,0 MOV DI,BX MOV SI,BX AGAIN: CMP WORD PTR ARRARYBX, 0 JLE LESS_OR_AG INC DI ;正數(shù)個(gè)數(shù)正數(shù)個(gè)數(shù) JMP SHORT NEAT LESS_OR_AG: JL NEAT INC SI ; 0的個(gè)數(shù)的個(gè)數(shù)NEAT: ADD BX, 2 DEC CX JNZ AGAIN MOV AX,N SUB AX,DI SUB AX,SI JZ SKIP ;沒(méi)有負(fù)數(shù)沒(méi)有負(fù)數(shù) JMP NEAR PTR NEG_VAL ; 負(fù)數(shù)負(fù)數(shù) SKIP: NEG_VAL: 第第

13、3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)142022-4-293. 循環(huán)控制指令循環(huán)控制指令循環(huán)控制指令用于使一些程序段反復(fù)執(zhí)行循環(huán)控制指令用于使一些程序段反復(fù)執(zhí)行 循環(huán)控制指令有三種:循環(huán)控制指令有三種: (1)、LOOP (Loop) 循環(huán)指令循環(huán)指令 (2)、LOOPE/LOOPZ 當(dāng)相等當(dāng)相等/為為“0”循環(huán)循環(huán) (3)、LOOPNE/LOOPNZ 當(dāng)不相等當(dāng)不相等/不為不為“0”循環(huán)循環(huán)注意:注意:* CX中存放循環(huán)次數(shù)中存放循環(huán)次數(shù), 只能使用段內(nèi)直接尋址的只能使用段內(nèi)直接尋址的8位位位移量位移量(-128127) * ECX 中存放循環(huán)次數(shù)中存放循環(huán)次數(shù), 只能使用段內(nèi)直接尋址

14、的只能使用段內(nèi)直接尋址的16位位移量(位位移量(-3276832767)助記符助記符轉(zhuǎn)移條件轉(zhuǎn)移條件不轉(zhuǎn)移條件不轉(zhuǎn)移條件LOOPCX0CX=0LOOPZCX0且且ZF=1CX=0或或ZF=0LOOPNZCX0且且ZF=0CX=0或或ZF=1第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)152022-4-29LOOPxx符號(hào)地址符號(hào)地址 執(zhí)行執(zhí)行 操作操作 : ((E)CX) ((E)CX)- 1 此此操作不影響標(biāo)志操作不影響標(biāo)志 檢查轉(zhuǎn)移條件檢查轉(zhuǎn)移條件xx,滿(mǎn)足轉(zhuǎn)向目標(biāo)地址去執(zhí)行,滿(mǎn)足轉(zhuǎn)向目標(biāo)地址去執(zhí)行; 不滿(mǎn)足執(zhí)行不滿(mǎn)足執(zhí)行LOOPxx后一條指令后一條指令與條件轉(zhuǎn)移指令不同的是:與條件轉(zhuǎn)移

15、指令不同的是:循環(huán)指令隱含循環(huán)指令隱含 ( (E)CX ) 減操作。減操作。第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)162022-4-29例例: 求首地址為求首地址為ARRAY的的M個(gè)字之和,結(jié)果存?zhèn)€字之和,結(jié)果存入入 TOTAL。 MOV CX, M MOV AX, 0 MOV SI, AXSTART_LOOP: ADD AX, ARRAYSI ADD SI, 2 LOOP START_LOOP MOV TOTAL, AX第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)172022-4-29 例:例: 在在string字符串中查找空格字符,串長(zhǎng)度為字符串中查找空格字符,串長(zhǎng)度為N。修改偏

16、址修改偏址BXYNAL 關(guān)鍵字關(guān)鍵字CX 串長(zhǎng)度串長(zhǎng)度NDS:BX 串首址串首址判判BX是關(guān)鍵字?是關(guān)鍵字? (CX) (CX)- -1找到處理找到處理未找到處理未找到處理 (CX) = 0 ?YN結(jié)束出口結(jié)束出口第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)182022-4-29用條件轉(zhuǎn)移:用條件轉(zhuǎn)移: JZ MOV CX, N MOV AX, SEG string MOV DS, AX LEA BX, string MOV AL,20H next: CMP AL,BX JZ findINC BX DEC CX JNZ next 未找到處理未找到處理JMP exit find: 找到處理找到

17、處理exit: 結(jié)束出口結(jié)束出口用循環(huán)指令用循環(huán)指令:LOOP NZ nextMOV CX, NMOV AX, SEG stringMOV DS, AXLEA BX, string MOV AL,20H next: CMP AL, BX INC BXLOOPNZ nextJZ find未找到處理未找到處理 JMP exit find: 找到處理找到處理exit: 結(jié)束出口結(jié)束出口 DEC BXnext : INC BX CMP AL,BX LOOP NZ next JZ find 未找到處理未找到處理 JMP exit find: 找到處理找到處理exit: 結(jié)束出口結(jié)束出口192022-4-

18、29思考:思考: 去掉指令去掉指令JMP exit ,程序執(zhí)行結(jié)果會(huì)怎樣?,程序執(zhí)行結(jié)果會(huì)怎樣? PUSH F、POPF可否去掉?若要去掉,程序如何修改?可否去掉?若要去掉,程序如何修改? 執(zhí)行完執(zhí)行完LOOPNZ后,可否根據(jù)后,可否根據(jù)CX=0來(lái)來(lái)判斷查找結(jié)果判斷查找結(jié)果? 有人認(rèn)為有人認(rèn)為CX=0,即,即說(shuō)明沒(méi)找到說(shuō)明沒(méi)找到,對(duì)嗎?,對(duì)嗎? 第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)202022-4-29循環(huán)指令說(shuō)明:循環(huán)指令說(shuō)明: LOOP退出循環(huán)條件是(退出循環(huán)條件是(CX)=0 LOOPZ和和LOOPNZ提供了提前結(jié)束循環(huán)的可能提供了提前結(jié)束循環(huán)的可能, 不一定要等到不一定要等到(CX)=0才退出循環(huán)。才退出循環(huán)。 在串中查找字符,查到了,就可退出,在串中查找字符,查到了

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論