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

下載本文檔

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

文檔簡介

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

2、方式給出。間接方式給出。代碼段代碼段代碼段代碼段代碼段代碼段代碼段代碼段第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)22022-5-221. 子程序調(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-5-22放在子程序的末尾放在子程序的末尾使子程序在功能完成后返回調(diào)用程序繼續(xù)

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

4、參數(shù)的返回指令:帶參數(shù)的返回指令: RET指令指令可以帶有一個立即數(shù)可以帶有一個立即數(shù)i16,則堆棧指針,則堆棧指針SP將增加,即將增加,即SPSP+i16,這個特點使得程序可以方便地廢除若干執(zhí)行這個特點使得程序可以方便地廢除若干執(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-5-22(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-5-22JMP1000H ;段內(nèi)直接;段內(nèi)直接JMPCX ;段內(nèi)間接;段內(nèi)間接JMP1000H:2000H ;段間直接;段間直接JMP DWORD PTR SI ;段間間接;段間間接JMP dest ; 必須指定轉(zhuǎn)移目標地址必須指定轉(zhuǎn)移目標地址(或轉(zhuǎn)向地址或轉(zhuǎn)向地址)。2. 無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令JMP/J*(其中,(其中,* 代表各種條件)代表各

6、種條件)1) 無條件轉(zhuǎn)移指令無條件轉(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-5-22 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-5-22 所有條件轉(zhuǎn)移指令都是相對轉(zhuǎn)移形式所有條件轉(zhuǎn)移指令都是相對轉(zhuǎn)移形式, 段內(nèi)范圍。段內(nèi)范圍。當需往一個較遠地方進行條件轉(zhuǎn)移時,當需往一個較遠地方進行條件轉(zhuǎn)移時,選用條件轉(zhuǎn)移轉(zhuǎn)到附近一個單元,選用條件轉(zhuǎn)移轉(zhuǎn)到附近一個單元,然后,再用無條件轉(zhuǎn)移轉(zhuǎn)到較遠的目的地。然后,再用無條件轉(zhuǎn)移轉(zhuǎn)到較遠的目的地。 條件轉(zhuǎn)移指令中,相當一部分指令是在比較完二個條件轉(zhuǎn)移指令中,相當一部分指令是在比較完二個 數(shù)大小后,根據(jù)結(jié)果而決

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

9、/JCCF=1 /不高于等于不高于等于/有進位有進位JBE/JNACFZF=1 /不高于不高于以兩個無符號數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以兩個無符號數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以兩個帶符號數(shù)比較的結(jié)果作為轉(zhuǎn)移條件以兩個帶符號數(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-5-22條件轉(zhuǎn)移指令應(yīng)用條件轉(zhuǎn)移指令應(yīng)用 例:比較二個數(shù)是否相等例:比較二個數(shù)是否相等, 如相等做

10、動作如相等做動作1 , 否則否則 做動作做動作2CMP AX,BXAction_2: 或或 CMP AX,BX action_1: 第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)122022-5-22例:例: X,Y放在放在X,Y單元里,單元里,(帶符號數(shù)判斷帶符號數(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 no

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

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

13、3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)142022-5-223. 循環(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 當相等當相等/為為“0”循環(huán)循環(huán) (3)、LOOPNE/LOOPNZ 當不相等當不相等/不為不為“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-5-22LOOPxx符號地址符號地址 執(zhí)行執(zhí)行 操作操作 : ((E)CX) ((E)CX)- 1 此此操作不影響標志操作不影響標志 檢查轉(zhuǎn)移條件檢查轉(zhuǎn)移條件xx,滿足轉(zhuǎn)向目標地址去執(zhí)行滿足轉(zhuǎn)向目標地址去執(zhí)行; 不滿足執(zhí)行不滿足執(zhí)行LOOPxx后一條指令后一條指令與條件轉(zhuǎn)移指令不同的是:與條件轉(zhuǎn)移指

15、令不同的是:循環(huán)指令隱含循環(huán)指令隱含 ( (E)CX ) 減操作。減操作。第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)162022-5-22例例: 求首地址為求首地址為ARRAY的的M個字之和,結(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-5-22 例:例: 在在string字符串中查找空格字符,串長度為字符串中查找空格字符,串長度為N。修改偏址

16、修改偏址BXYNAL 關(guān)鍵字關(guān)鍵字CX 串長度串長度NDS:BX 串首址串首址判判BX是關(guān)鍵字?是關(guān)鍵字? (CX) (CX)- -1找到處理找到處理未找到處理未找到處理 (CX) = 0 ?YN結(jié)束出口結(jié)束出口第第3章章 Pentium的指令系統(tǒng)的指令系統(tǒng)182022-5-22用條件轉(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-5-2

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論