《《分支程序設(shè)計(jì)》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《分支程序設(shè)計(jì)》PPT課件.ppt(14頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、7.3 分支結(jié)構(gòu)程序設(shè)計(jì)及常用指令,7.3.1 分支程序的基本結(jié)構(gòu)形式,雙分支:if_then_else結(jié)構(gòu) if_then結(jié)構(gòu) 多分支:case結(jié)構(gòu),7.3.2 與轉(zhuǎn)移地址有關(guān)的尋址方式,Intel8086/8088CPU中,程序的執(zhí)行順序是由CS和IP確定的。通常,程序是順序執(zhí)行,當(dāng)要改變程序的流程時(shí),需要通過控制轉(zhuǎn)移指令給出目標(biāo)指令的CS和IP值,這就是與目標(biāo)地址有關(guān)的尋址方式。 尋址方式有4種:段內(nèi)直接尋址、段內(nèi)間接尋址 、段間直接尋址、段間間接尋址 段內(nèi):轉(zhuǎn)移指令與轉(zhuǎn)向的目標(biāo)指令在同一代碼段中,(CS)不變。 段間:轉(zhuǎn)移指令與轉(zhuǎn)向的目標(biāo)指令在兩個(gè)代碼段中, (CS)變化。,以無條件轉(zhuǎn)
2、移指令JMP 為例,段內(nèi)直接轉(zhuǎn)移,段內(nèi)間接轉(zhuǎn)移,段間直接轉(zhuǎn)移,段間間接轉(zhuǎn)移,例如:JMP 標(biāo)號(hào) JMP SHORT 標(biāo)號(hào) JMP NEAR PTR 標(biāo)號(hào),例如:JMP BX JMP WORD PTR SI,例如:JMP FAR PTR 標(biāo)號(hào),例如:JMP DWORD PTR BX,,,表示轉(zhuǎn)移距離(稱為位移量)的操作符: SHORT 短轉(zhuǎn)移,位移量在-128127字節(jié)之間。 NEXT PTR 近轉(zhuǎn)移,在同一段內(nèi)轉(zhuǎn)移, 位移量在-3276832767字節(jié)范圍內(nèi)。 FAR PTR 遠(yuǎn)轉(zhuǎn)移,段間的轉(zhuǎn)移,1. 段內(nèi)直接尋址,轉(zhuǎn)向的有效地址EA = (IP)當(dāng)前 + 位移量( 8bit
3、/ 16bit ) 轉(zhuǎn)向地址 = 16d * (CS) + (IP)新 例: 段內(nèi)直接尋址方式的示例 1060:000D JMP SHORT NEXT IP當(dāng)前值 1060:000F 1060:0011 1060:0013 NEXT: ADD AL,BX,2. 段內(nèi)間接尋址,轉(zhuǎn)向的有效地址EA是一個(gè)寄存器或存儲(chǔ)單元的內(nèi)容(可用除立即數(shù)以外的任何一種數(shù)據(jù)尋址方式得到)。 物理地址 = 16d * (CS) + EA 例: (BX)=1256H, (SI)=528EH ,TABLE=20A2H ,(DS)=2000H ,(232F8H)=3280H, (264
4、E4H)=2450H JMP BX ; (IP)1256H JMP WORD PTR BXSI ; (IP)2450H JMP WORD PTR TABLEBX ; (IP)3280H,3. 段間直接尋址,用指令中提供的轉(zhuǎn)向段地址和偏移地址取代CS和IP 物理地址 = 16d * (CS) + (IP) 例: code1 segment code2 segment jmp far ptr next -------- next: ... code1 ends code2 ends,,4. 段間間接尋址,用存儲(chǔ)器中的兩個(gè)相
5、繼字的內(nèi)容取代CS和IP。 (存儲(chǔ)單元的地址可用除立即數(shù)和寄存器以外的任何一種 數(shù)據(jù)尋址方式得到) 例: JMP DWORD PTR INTERS+BX,無條件轉(zhuǎn)移指令JMP,說明:,無條件轉(zhuǎn)移指令不影響狀態(tài)標(biāo)志位 段內(nèi)間接轉(zhuǎn)移尋址方式中的src為字類型寄存器或存儲(chǔ)器操作數(shù) 段間間接轉(zhuǎn)移尋址方式中的src為雙字型存儲(chǔ)器操作數(shù),條件轉(zhuǎn)移類指令,1測(cè)試單個(gè)狀態(tài)標(biāo)志位的條件轉(zhuǎn)移指令,例:判斷X的正負(fù),顯示相應(yīng)信息。如X為正數(shù),顯示“X is positive”;如X為負(fù)數(shù),顯示“X x is negative”。 提示:可以使用jz或jnz判斷X的符號(hào)位。,條件轉(zhuǎn)移類指令,2判斷兩個(gè)無符號(hào)數(shù)比較結(jié)果的條件轉(zhuǎn)移指令,例:編寫程序?qū)崿F(xiàn),X,Y為兩個(gè)16位無符號(hào)數(shù),將較大的一個(gè)送入Max存儲(chǔ)單元中,條件轉(zhuǎn)移類指令,3判斷兩個(gè)有 符號(hào)數(shù)比較結(jié)果的條件轉(zhuǎn)移指令,例:編寫程序?qū)崿F(xiàn),將3個(gè)有符號(hào)數(shù)較大的一個(gè)送入Max存儲(chǔ)單元中,條件轉(zhuǎn)移類指令,4測(cè)試CX的條件轉(zhuǎn)移指令,作業(yè),編寫程序?qū)崿F(xiàn),統(tǒng)計(jì)十個(gè)有符號(hào)數(shù)中,正數(shù)的個(gè)數(shù)。,