第3章 8088指令系統5(程序控制指令、處_免費下載.ppt_第1頁
第3章 8088指令系統5(程序控制指令、處_免費下載.ppt_第2頁
第3章 8088指令系統5(程序控制指令、處_免費下載.ppt_第3頁
第3章 8088指令系統5(程序控制指令、處_免費下載.ppt_第4頁
第3章 8088指令系統5(程序控制指令、處_免費下載.ppt_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

第3章 8088指令系統5(程序控制指令、處_免費下載.ppt.ppt 免費下載

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

文檔簡介

1、1,3.3.5 程序控制指令,控制轉移指令分為: 轉移指令 循環(huán)控制指令 調用和返回指令 中斷指令,2,表3-6 控制轉移類指令,3,續(xù)表(2),4,續(xù)表(3),5,續(xù)表(4),6,轉移指令的實質: 改變IP(或者CS和IP)的內容。 對標志位flags的影響: 所有轉移指令不會影響標志位flags。 分類: 分為無條件轉移和條件轉移兩種。,1.轉移指令,7,(1) 無條件轉移指令 JMP 本指令無條件轉移到指定的目標地址, 以執(zhí)行從該地址開始的程序段。根據設置CS、IP的方法,JMP指令可實現短近遠距離跳轉, 指令分成4種情況。 段內直接轉移: JMP disp 指令中給出的8/16位的位移

2、量加到IP, CS保持不變。 段內間接轉移: JMP reg / mem reg/mem中的16位偏移地址送IP, CS保持不變。 段間直接轉移 JMP segment : offset 指令中給出的16位的段和16位的偏移地址送到CS和IP。 段間間接轉移 JMP mem32 mem32中的16位的段和16位的偏移地址送到CS和IP。,8,轉移的目標地址由指令直接給出。指令中給出的目標地址實際上是一個相對于IP的位移量: JMP disp ; 位移量 轉移范圍 匯編語言中格式 8位 -128+127 JMP SHORT OPRD; 短距離 16位 -32768+32767 JMP NEAR

3、PTR OPRD 或 OPRD ; 近距離 注意:disp的助記符寫為新IP, 而disp的機器碼為位移量d(新IP=原IP+位移量d) 例:JMP0120H ;直接轉向0120H(缺省為NEAR) JMPSHORT LP ;轉向LP JMPNEAR PTR BBB;轉向BBB 由于是段內轉移,故轉移后CS內容保持不變, 段內直接轉移,9,無條件段內轉移,直接轉移: JMP Lable 轉移目標地址: 段基地址CS不變; 偏移地址IP=當前IP+位移量(16位),JMP Lable,Label,代碼段,位移量,近地址標號,CS : IP=,10,段內間接轉移 轉移的目標地址由寄存器或存儲單元的

4、內容給出。 例1:JMP SI ; 近距離 若(SI)=1200H,則指令執(zhí)行后,(IP)=1200H,于是轉向代碼段的偏移地址1200H處開始執(zhí)行。 注意:目標地址以段內偏移的形式給出,而不是相對于IP的位移量,所以它是一個16位的操作數。,11,無條件段內轉移,間接轉移: JMP BX JMP WORD PTRBX,JMP BX,代碼段,數據段,BX=1200,XXH,XXH,IP,指令碼,CS : IP,12,例2:JMP BX+DI 設指令執(zhí)行前: (DS)=3000H,(BX)=1300H, (DI)=1200H,(32500H)=2350H; 則指令執(zhí)行后:(IP)=2350H 在

5、匯編語言中,段內間接尋址通常寫成: JMPWORD PTRBX+DI 表示所取得的目標地址是一個字。,13,段間直接轉移 在指令中直接給出要轉移到的目的段地址和偏移地址。 例:JMP2000H:1000H ;遠距離 執(zhí)行時,(IP)1000H,(CS)2000H 注意:直接地址為符號地址時,段間直接轉移指令中的符號地址前應加操作符FAR PTR。 例:JMP FAR PTR far_label ;遠距離 其中的far_label為遠類型的標號。,14,無條件段間轉移,直接轉移: JMP FAR PTR Lable,遠地址標號,JMP,Label,代碼段1,代碼段2,XXH,XXH,XXH,XX

6、H,IP,CS,CS : IP=,15,轉移的目的地址(段和偏移)在兩個相鄰的字存儲單元中。例如: JMPDWORD PTRSI ; 遠距離 設指令執(zhí)行前:(DS)=4000H,(SI)=1212H, (41212H)=1000H,(41214H)=4A00H 則指令執(zhí)行后:(IP)=1000H,(CS)=4A00H 于是轉到4B000H處開始執(zhí)行指令。 例中的DWORD PTR表示轉移地址是一個雙字。,段間間接轉移,16,4000,1212,+),41212,DS,SI,00,10,00,4A,41212 41213 41214 41215,1000,4A00,IP,CS,段間間接轉移操作示

7、意圖,11111111,11101100,JMP DWORD PTR SI的機器碼,DS:SI,17,無條件段間轉移,間接轉移: JMP DWORD PTRBX,XXH,XXH,XXH,XXH,BX,IP,CS,JMP,指令碼,代碼段1,代碼段2,數據段,CS : IP,18,條件轉移指令可實現程序的條件分支。 條件轉移指令根據前一條指令執(zhí)行后標志位的狀態(tài)來決定是否進行分支轉移。 所有的條件轉移都是直接尋址方式的短轉移。 格式:JXX label;xx為條件名稱縮寫 指令的轉移范圍為-128+127字節(jié)(短跳轉)。 主要的條件轉移指令參見p132表3-4。,(2)條件轉移指令 JXX,19,

8、根據單個標志位設置的條件轉移指令 JB/JC ;低于,或CF=1, 則轉移 JNB/JNC/JAE ;不低于,或CF=0,高于或等于, 則轉移 JP/JPE ;奇偶標志PF=1(偶), 則轉移 JNP/JPO ;奇偶標志PF=0(奇), 則轉移 JZ/JE ;結果為零(ZF=1), 則轉移 JNZ/JNE ;結果不為零(ZF=0), 則轉移 JS ;SF=1, 則轉移 JNS ;SF=0, 則轉移 JO ;OF=1, 則轉移 JNO ;OF=0, 則轉移,20,這類指令主要用來判斷兩個數的大小。一般指令序列為: CMP dist,src ;比較 Jxx label ;根據比較結果轉移 判斷無符

9、號數的大小 JA 高于則轉移(distsrc) 轉移條件為: CF=0ZF=0 JNA/JBE 低于或等于則轉移(distsrc) 轉移條件為: CF=1ZF=1, 根據組合條件設置的條件轉移指令,21,JG ;大于則轉移(distsrc) 轉移條件為: (SFOF=0)ZF=0 JGE ;大于或等于則轉移(distsrc) 轉移條件為: (SFOF=0)ZF=1 JL ;小于則轉移(distsrc) 轉移條件為: (SFOF=1)ZF=0 JLE ;小于或等于則轉移(distsrc) 轉移條件為: (SFOF=1)ZF=1,判斷有符號數的大小,22,根據CX內容來決定是否轉移的轉移指令 JC

10、XZ label 若(CX)=0,則轉移到label處開始執(zhí)行。,23,條件轉移指令舉例:以十六進制數形式顯示BX中的內容。 MOVBX, 1234H MOVCH, 4 ; CH做循環(huán)計數器 ROT: MOVCL, 4; CL做移位計數器 ROLBX, CL; 將最高4位移到低4位 MOVAL, BL ANDAL, 0FH; 取出低4位 ADDAL, 30H; 轉換為ASCII碼 CMPAL, 39H; 與 9 比較 JBE DISP; 若(AL)9, 則轉顯示 ADDAL, 7; 若(AL)9, 再加7轉為A-F DISP: MOVDL, AL; (DL)字符 MOVAH, 2 INT21H

11、; 顯示輸出 DECCH; 4個十六進制數顯示完否? JNZROT; 沒有, 循環(huán) MOVDL, 48H; H MOVAH, 2 INT21H; 最后顯示H,24,2.循環(huán)控制指令,用在循環(huán)程序中以確定是否要繼續(xù)循環(huán)。 循環(huán)次數通常置于CX中。 轉移的目標應在距離本指令-128+127的范圍之內(短跳轉)。 循環(huán)控制指令不影響標志位。,25,(1) LOOP 格式:LOOP label 類比 串前綴REP 操作:(CX)-1CX; 若(CX)0,則轉至label處執(zhí)行; 否則退出循環(huán),執(zhí)行LOOP后面的指令。 注:LOOP指令與下面的指令段等價: DEC CX JNZ label,26,(2)

12、LOOPZ (LOOPE) 類比 串前綴REPZ/E 格式:LOOPZ label 操作:(CX)-1CX; 若(CX)0ZF=1,則轉至label處執(zhí)行; 否則退出循環(huán),執(zhí)行LOOP后面的指令。 (3)LOOPNZ (LOOPNE) 類比 串前綴REPNZ/NE 格式:LOOPNZ label 操作:(CX)-1CX; 若(CX)0ZF=0,則轉至label處執(zhí)行; 否則退出循環(huán),執(zhí)行LOOP后面的指令。,27,例1:給1A000H開始的256個內存單元均減去1,若發(fā)現某個單元減為0則立即退出循環(huán),其后的單元不再減1。程序段如下:(邏輯地址為1A00:0H) MOV AX, 1A00H MO

13、V DS, AX ; 1A00H段 MOV DI, -1 MOV CX, 256 GOON: INC DI DEC BYTE PTRDI LOOPNZ GOON HLT,28,例2:在8000H開始的長度為1000字節(jié)的字符串中查找S,若找到,把其偏移地址記錄在ADDR中,否則ADDR單元置為0FFFFH。 MOV DI, 8000H MOV CX, 1000 MOV AL, S MOV ADDR, 0FFFFH GOON: SCASB LOOPNZ GOON ; 兩條可并為REPNZ SCASB JNZ DONE DEC DI MOV ADDR,DI DONE: HLT,29,3. 過程調用

14、和返回指令,過程(子程序) 一段具有特定功能的,供其它程序調用的公用程序。 特點 調用子程序時,IP(或CS:IP)的內容被壓入堆棧棧頂。從子程序返回時,棧頂的內容又被彈出到IP(或CS:IP)。 子程序執(zhí)行結束后一般均要返回調用程序。 一次定義,多次調用; 可帶參數調用,以完成不同的功能。 優(yōu)點 程序代碼短,結構清晰,便于編程、調試、修改和閱讀。 兩條相關指令: 子程序調用指令 CALL 子程序返回指令 RET,30,斷點,入口地址,用于調用一個子過程; 調用前須保護斷點地址(斷點=CALL的下一條指令地址CS:IP);再跳轉到子程序入口地址(子程序入口地址=子程序的第一條指令地址CS:IP

15、或CS:IP); 子過程執(zhí)行結束后要返回原調用處繼續(xù)執(zhí)行原程序 斷點恢復(RET指令)。,調用指令CALL與轉移指令JMP的比較,RET,CALL,CALL 子程序入口地址 = JMP 子程序入口地址 + PUSH CALL的下一條指令地址,CALL指令功能:,31,主程序調用子程序的執(zhí)行過程:,將調用指令的下一條指令的地址(斷點)壓入堆棧 (CALL指令); -相當于 PUSH 下一條指令的地址(IP或 CS:IP) 獲取子過程的入口地址(子過程第1條指令的偏移地址) (CALL指令) ; -相當于JMP入口地址(CS:IP或CS:IP) 執(zhí)行子過程,含相應參數的保存及恢復(其它指令); 將

16、斷點偏移地址由堆棧彈出,返回原程序(RET指令)。 -相當于 POP IP或 CS:IP,32,一般格式:CALL sub ;sub為子程序的入口 根據子程序入口的尋址方式,子程序調用有4類。 段內直接調用 子程序的偏移地址直接由CALL指令給出。 格式:CALL near_proc ;近調用 CALL執(zhí)行時,它首先將IP內容壓棧,然后把指令中給出的位移量加到IP上得到新IP跳轉到子程序入口地址。 注意:匯編以后的調用地址是相對于CALL的下一條指令的位移量。 例:CALL 0120H ;子程序偏移地址由指令給出,(1)調用指令 CALL,33,位移量由匯編程序在匯編時進行計算,如下例: CS

17、:0102CALL 0120H;3字節(jié) CS:0105 則位移量為: 0120-0105H=001BH 于是CALL0120H的機器碼為E8 1B 00 CS:0102E8 CS:01031B CALL 0120H CS:010400 CS:0105 ,34,子程序的偏移地址在寄存器或存儲器中。 格式:CALL mem16/reg16 ;近調用 CALL執(zhí)行時,它首先將IP內容壓棧,然后把指定的寄存器/存儲器的內容送入IP得到新IP跳轉。 例: CALLBX ;子程序地址由BX給出 CALLWORD PTRSI ;子程序地址在存儲器中,段內間接調用,35,IPH IPL,代碼段,數據段,CALL WORD PTR SI指令的操作圖示: 假定:(DS) = 8000H,(SI) = 1200H,81200H,81201H,36,子程序的段地址和偏移地址直接由CALL指令給出。 格式:CALL far_proc ;far_proc為遠過程的地址 ;遠調用 指令的操作為: CS內容壓棧 IP內容壓棧 CS段地址 IP偏移地址 例:CALL 2000H:1000H CALL TIMER ;TIMER為遠過程,段間直接調用,保護斷點,跳轉,

溫馨提示

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

最新文檔

評論

0/150

提交評論