11第3章7控制轉移指令_第1頁
11第3章7控制轉移指令_第2頁
11第3章7控制轉移指令_第3頁
11第3章7控制轉移指令_第4頁
11第3章7控制轉移指令_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 3.2.5 控制轉移指令控制轉移指令(p130) 2注意:注意:eabc9a78561122h:1234h目的地址的偏移地址目的地址的段地址jmp指令next5678h:9abch圖 4.6 3eabc9a78561122h:1234h目的地址的偏移地址目的地址的段地址jmp指令next5678h:9abch圖 4.6 41 1、轉移指令轉移指令51)1)、jmpjmp無條件轉移指令無條件轉移指令6( (1)1)、段內(nèi)直接短轉移段內(nèi)直接短轉移 7注意:注意:例:例:源程序 :源程序 :條件轉移指令:jmp short 條件轉移指令:jmp short nextnext. next:next

2、:mov al,03hmov al,03hopop50h50h.opop03h03h.3000:1000h3000:1000h3000:1050h3000:1050h(ip)(ip)當前當前d d8 8=50h=50h=1050h-1000h=1050h-1000h(ip)=(ip)當前+d8(ip)=(ip)當前+d8內(nèi)存內(nèi)存10 源程序 : 源程序 :next :next :. -128-128.條件轉移指令:條件轉移指令:jmp short jmp short nextnext.+127+127. next:next: mov al,03hmov al,03h1112( (2)2)、段內(nèi)

3、直接段內(nèi)直接近近轉移轉移 13注意:注意:1415( (3)3)、段內(nèi)間接轉移段內(nèi)間接轉移 16例例: : 17( (4)4)、段段間間直接轉移直接轉移 18e ab c9 a7 85 61 1 2 2 h : 1 2 3 4 h目 的 地 址 的偏 移 地 址目 的 地 址 的段 地 址j m p 指 令n e x t5 6 7 8 h : 9 a b c h圖 4 . 6 1920( (5)5)、段間間接轉移段間間接轉移 21例例: : 222 2、條件轉移指令條件轉移指令 231)1)、比較轉移指令比較轉移指令 助記符助記符轉移條件轉移條件ja/jnbecfzf=0高于高于/不低于等于不

4、低于等于jae/jnb/jnccf=0 高于或等于高于或等于/不低于不低于/無進位無進位jb/jnae/jccf=1 低于低于/不高于等于不高于等于/有進位有進位jbe/jnacfzf=1 低于或等于低于或等于/不高于不高于無符號數(shù)比較的結果作為轉移條件(無符號數(shù)比較的結果作為轉移條件(p134)兩個帶符號數(shù)比較的結果作為轉移條件兩個帶符號數(shù)比較的結果作為轉移條件助記符助記符轉移條件轉移條件jg/jnle(sf of)zf=0大于大于/不小于等于不小于等于jge/jnl sf of=0 大于或等于大于或等于/不小于不小于jl/jnge sf of=1 小于小于/不大于等于不大于等于jle/jn

5、g(sf of)zf=1小于或等于小于或等于/不大于不大于2526272)2)、判位轉移指令判位轉移指令 助記符助記符轉移條轉移條件件助記符助記符轉移條件轉移條件jz/jezf=1jnz/jnezf=0jssf=1jnssf=0joof=1jnoof=0jp/jpepf=1jnp/jpopf=0jccf=1jnccf=0283)3)、判判cxcx轉移指令轉移指令 助記符助記符轉移條件轉移條件 jcxzcx=0292 2、循環(huán)控制指令循環(huán)控制指令計數(shù)器=0?圖 4.7 循環(huán)結構示意圖yn循環(huán)體計數(shù)器循環(huán)次數(shù)計數(shù)器-1計數(shù)器30 助記符助記符循環(huán)條件循環(huán)條件退出循環(huán)條件退出循環(huán)條件loopcx0c

6、x=0loopzcx0且且zf=1cx=0或或zf=0loopnzcx0且且zf=0cx=0或或zf=131 在串中查找字符,查到了,退出,在串中查找字符,查到了,退出,用用loopnz,不相等時繼續(xù)查找。,不相等時繼續(xù)查找。比較兩串時,當有字符不等,退出,兩字符串不等。比較兩串時,當有字符不等,退出,兩字符串不等??捎每捎胠oopz,當相等時繼續(xù)比較。,當相等時繼續(xù)比較。執(zhí)行完執(zhí)行完 loopnz或或loopz后,判斷后,判斷zf的值的值 對查找字符,對查找字符,zf=1,說明找到;否則沒有找到。說明找到;否則沒有找到。 對串比較,對串比較,zf=1, 說明兩串相等;否則不等。說明兩串相等;

7、否則不等。相當于:相當于: 修改偏址修改偏址bxcx 成績數(shù)成績數(shù)nds:bx 首地址首地址 (cx) (cx)- -1求平均值求平均值 (cx) = 0 ?結束結束清零清零dx成績累加成績累加35 例:例: 在在string字符串中查找空格字符,串長度為字符串中查找空格字符,串長度為n。修改偏址修改偏址bxynal 關鍵字關鍵字cx 串長度串長度nds:bx 串首址串首址判判bx是關鍵字?是關鍵字? (cx) (cx)- -1找到處理找到處理未找到處理未找到處理 (cx) = 0 ?yn結束出口結束出口 mov cx, n mov ax, seg string mov ds, ax lea

8、bx, string mov al,20h next: cmp al,bx jz findinc bx dec cx jnz next 未找到處理未找到處理jmp exit find: 找到處理找到處理exit: 結束出口結束出口mov cx, nmov ax, seg stringmov ds, axlea bx, string mov al,20h next: cmp al, bx inc bxloopnz nextjz find未找到處理未找到處理 jmp exit find: 找到處理找到處理exit: 結束出口結束出口39403 3、過程過程( ( 子程序子程序 ) )調(diào)用指令調(diào)用指

9、令 41 421 1)、)、 callcall調(diào)用調(diào)用 43(1 1)、)、 段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用例:例: 過程過程 code segment ;code段段 call ; d16 =subp- xxx xxx: proc near ;過程定義過程定義 ret ;返回返回 endp code ends45(2 2)、)、 段內(nèi)間接調(diào)用:段內(nèi)間接調(diào)用:47(3 3)、)、 段間直接調(diào)用段間直接調(diào)用 例例 : cseg1 segment call far ptr subp ;處的處的cs:ip入棧;轉入棧;轉subp : cseg1 endscseg2 segment subp proc re

10、t subp endpcseg2 ends49(4 4)、段間間接調(diào)用:)、段間間接調(diào)用:512 2)、)、 retret返回返回 525354段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回格式:格式:ret exp;執(zhí)行操作:執(zhí)行操作: (ip)(sp)+1,(,(sp) (sp)(sp)+2 exp是一個表達式是一個表達式計算出來的常數(shù)成為機器指令中位移量計算出來的常數(shù)成為機器指令中位移量d16,修改堆棧,修改堆棧 指針。指針。554 4、中斷和中斷返回指令中斷和中斷返回指令 562、 過程過程( 子程序子程序 )調(diào)用指令調(diào)用指令子程序子程序程序中具有獨立功能的部分編寫成獨立程序模塊。程序中具有獨立功能

11、的部分編寫成獨立程序模塊。子程序(過程)定義子程序(過程)定義格式:格式: 符號名符號名 proc 類型類型 符號名符號名 endp 子程序調(diào)用和返回指令:子程序調(diào)用和返回指令: call ret(return) 過程有兩種類型:過程有兩種類型:按過程與調(diào)用語句間的位置,過程有兩種類型。按過程與調(diào)用語句間的位置,過程有兩種類型。near類型:調(diào)用指令與過程在同一個段中類型:調(diào)用指令與過程在同一個段中far類型:調(diào)用指令與過程不在同一個段中類型:調(diào)用指令與過程不在同一個段中call指令和指令和ret指令都不影響條件碼。指令都不影響條件碼。分界57段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用格式:格式:call ds

12、t ;(sp)(sp)-2, (sp)+1,(sp)(ip); (ip) (ip)+d16 dst給出轉向地址(子程序的入口地址)。給出轉向地址(子程序的入口地址)。 d16機器指令中的位移量(轉向地址和返回地址之差)。機器指令中的位移量(轉向地址和返回地址之差)。 位移量為位移量為d16范圍范圍-32768+32767h,占有兩個字節(jié)。,占有兩個字節(jié)。58(1)、)、 call( call a procedure)調(diào)用調(diào)用 call調(diào)用指令調(diào)用指令調(diào)用地址由指令給出調(diào)用地址由指令給出call調(diào)用指令有調(diào)用指令有4 4種:種: 段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用段間直接調(diào)用段間直接調(diào)用 段內(nèi)間接調(diào)用段內(nèi)

13、間接調(diào)用段間間接調(diào)用段間間接調(diào)用59段內(nèi)直接調(diào)用段內(nèi)直接調(diào)用格式:格式:call dst ;(sp)(sp)-2, (sp)+1,(sp)(ip); (ip) (ip)+d16 dst給出轉向地址(子程序的入口地址)。給出轉向地址(子程序的入口地址)。 d16機器指令中的位移量(轉向地址和返回地址之差)。機器指令中的位移量(轉向地址和返回地址之差)。 位移量為位移量為d16范圍范圍-32768+32767h,占有兩個字節(jié)。,占有兩個字節(jié)。60工作過程如下:工作過程如下:例:例: 過程過程 code segment ;code段段 call subp ;調(diào)用調(diào)用 指令指令 yyy入棧入棧 ,d1

14、6 =subp-yyy xxx: proc near ;過程定義過程定義 ret ;返回返回 subp endp code ends61例:兩個數(shù)據(jù)變量例:兩個數(shù)據(jù)變量x與與y相乘相乘,子程序可以直接訪問模子程序可以直接訪問模塊中的變量。塊中的變量。datasg segment x dw 100 y dw 10datasg endscodesg segment main proc far assume cs:codesg, ds:data sg start: call subp ret main endpsubp proc near mov ax,xmov bx,y mul bxretsubp

15、 endcodesg ends end start62 段內(nèi)間接調(diào)用:段內(nèi)間接調(diào)用:格式:格式: call dst; word ptr opr opr 為為16位寄存器,位寄存器, 或存儲器(除立即數(shù)以外的任何一種尋址方式)或存儲器(除立即數(shù)以外的任何一種尋址方式) (sp)(sp)-2 (sp)+1,(,(sp)(ip) (ip)(ea) ea由由dst尋址方式所確定的有效地址。尋址方式所確定的有效地址。63 段間直接調(diào)用:段間直接調(diào)用:格式:格式:call far ptr dst;(sp)(sp)-2(sp)(sp)-2 64例例 : cseg1 segment call far ptr

16、subp;處的處的cs:ip入棧轉入棧轉subp : cseg1 endscseg2 segment subp proc ret subp endp cseg2 ends65 段間間接調(diào)用:段間間接調(diào)用:格式:格式: call dword ptr dst執(zhí)行操作:執(zhí)行操作: (sp)(sp)-2 (sp)(sp)-2 ea由由dst的尋址方式確定的有效地址。的尋址方式確定的有效地址。66(2)、 ret( reture from procedure)返回返回 ret返回指令返回指令放在子程序的末尾放在子程序的末尾使子程序在功能完成后返回調(diào)用程序繼續(xù)執(zhí)行。使子程序在功能完成后返回調(diào)用程序繼續(xù)執(zhí)行

17、。*為能準確返回為能準確返回 ,返回指令類型與調(diào)用指令類型相對應。,返回指令類型與調(diào)用指令類型相對應。段內(nèi)返回段內(nèi)返回段間返回段間返回 段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回段間帶立即數(shù)返回段間帶立即數(shù)返回在子程序調(diào)用時,返回地址入棧在子程序調(diào)用時,返回地址入棧 返回時:將返回地址出棧返回時:將返回地址出棧 (ip)(段內(nèi)或段間)。)(段內(nèi)或段間)。 (cs)(段間)。)(段間)。67段內(nèi)返回:段內(nèi)返回:格式:格式: ret; 機器碼:機器碼: c3h或者或者c2h (ip)(sp)+1,(,(sp) (sp)(sp)+2段間返回:段間返回:格式:格式: ret; 機器碼:機器碼: cbh或或cah

18、 (ip)(sp)+1,(,(sp) (sp)(sp)+2 (cs)(sp)+1,(,(sp) (sp)(sp)+268段內(nèi)帶立即數(shù)返回段內(nèi)帶立即數(shù)返回格式:格式:ret exp;執(zhí)行操作:執(zhí)行操作: (ip)(sp)+1,(,(sp) (sp)(sp)+2 exp是一個表達式是一個表達式計算出來的常數(shù)成為機器指令中位移量計算出來的常數(shù)成為機器指令中位移量d16,修改堆棧,修改堆棧 指針。指針。69例如:例如:ret exp 堆棧使用情況堆棧使用情況: assume cs:code,ds:data main proc far start: mov ax,data mov ds,ax push bx push cx cs:xxxx mov ah,4ch int 21h main endp(bx)(bx)

溫馨提示

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

評論

0/150

提交評論