第6章1分支結(jié)構(gòu)程序設(shè)計(jì)_第1頁
第6章1分支結(jié)構(gòu)程序設(shè)計(jì)_第2頁
第6章1分支結(jié)構(gòu)程序設(shè)計(jì)_第3頁
第6章1分支結(jié)構(gòu)程序設(shè)計(jì)_第4頁
第6章1分支結(jié)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第六章分支結(jié)構(gòu)程序分支程序常用的有兩種結(jié)構(gòu)形式:6.1比較/測試分支結(jié)構(gòu)6.2跳轉(zhuǎn)表多路分支結(jié)構(gòu)控制轉(zhuǎn)移類指令1無條件轉(zhuǎn)移指令2條件轉(zhuǎn)移指令3循環(huán)控制指令4子程序調(diào)用指令1無條件轉(zhuǎn)移指令JMPSTAT(段內(nèi)直接轉(zhuǎn)移)JMPBX(段內(nèi)間接轉(zhuǎn)移)JMPFARPRTADD2(段間直接轉(zhuǎn)移)JMPDWODPTR[BX+ADDR3](段間間接轉(zhuǎn)移)2條件轉(zhuǎn)移指令(1)簡單條件轉(zhuǎn)移指令(2)無符號數(shù)條件轉(zhuǎn)移指令(3)有符號數(shù)條件轉(zhuǎn)移指令它們都有通用的語句格式和功能。語句格式:[標(biāo)號:]操作符短標(biāo)號功能:如果條件滿足,則(IP)+位移量→IP。(1)簡單條件轉(zhuǎn)移指令(2)無符號數(shù)條件轉(zhuǎn)移指令(3)有符號數(shù)條件轉(zhuǎn)移指令6.1比較/測試分支結(jié)構(gòu)程序設(shè)計(jì)

P={先要對處理的問題進(jìn)行比較、測試或者進(jìn)行算術(shù)運(yùn)算、邏輯運(yùn)算,以產(chǎn)生有效的狀態(tài)標(biāo)志。然后選擇條件轉(zhuǎn)移指令產(chǎn)生分支轉(zhuǎn)移。通常一條條件轉(zhuǎn)移指令只能產(chǎn)生兩路分支。若要實(shí)現(xiàn)多路分支,必須使用多條轉(zhuǎn)移指令。n條條件轉(zhuǎn)移指令可以產(chǎn)生n+l路分支。圖6.1比較/測試分支結(jié)構(gòu)的兩種程序流程(a)相當(dāng)于高級語言中的IF—THEN—ELSE語句,根據(jù)條件成立與否,分兩種情況分別處理。(b)相當(dāng)于高級語言中的IF—THEN語句,僅當(dāng)某種條件成立才執(zhí)行一段程序,否則跳過它。例6.1內(nèi)存ADR單元開始存放兩個(gè)帶符號字?jǐn)?shù)據(jù),編制程序,若兩數(shù)同號將FLAG單元置0,否則置全1。問題分析:判斷兩數(shù)是否同號,即判斷兩個(gè)數(shù)的最高位是否相同,若相同即為同號。判斷的方法有兩種:第一種方法:先取出一個(gè)數(shù),判斷符號是否為正,若為正,再判斷另一個(gè)數(shù)的符號是否正,也為正,則兩數(shù)同號,否則為異號;若第一個(gè)數(shù)的符號為負(fù),判斷另一個(gè)數(shù)的符號是否為負(fù),也為負(fù),則兩數(shù)同號,否則為異號。圖6.2測試兩數(shù)符號程序流程圖DSEGSEGMENT ADRDW73A5H,924BH FLAGDB?DSEGENDSCSEGSEGMENT ASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,ADRANDAX,AX;置標(biāo)志JNSPLUS;正轉(zhuǎn)MOVAX,ADR+2ANDAX,AX;第二個(gè)數(shù)置標(biāo)志JSSAME;同為負(fù)UNSAME:MOVAL,0FFH;異號標(biāo)志JMPLOADPLUS:TESTADR+2,8000H;第二個(gè)數(shù)置標(biāo)志JSUNSAME ;異號SAME:XORAL,AL;同號標(biāo)志LOAD:MOVFLAC,AL;存標(biāo)志MOVAH,4CHINT21HCSEGENDSENDSTART第二種方法:利用XOR指令,將兩個(gè)數(shù)異或,異或結(jié)果的最高位狀態(tài)為1,則說明兩數(shù)異號,否則兩數(shù)同號。異或結(jié)果的最高位狀態(tài)反應(yīng)到符號標(biāo)志SF位上。如:0111011010011010⊕10011010⊕100101101110110000001100符號位為:1,SF=1符號位為0,SF=0DSEGSEGMENTARGDW7654H,8A32HFLAGDB?DGECENDSCSEGSEGMENTASSUMEDS:DSEC,CS:CSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,ARGX0RAX,ARG+2;兩數(shù)異或MOVAL,0;同號標(biāo)志JNSLOAD;同號DECAL;異號標(biāo)志LOAD:MOVFLAG,AL;存標(biāo)志MOVAH,4CHINT21HCSEGENDSENDSTARTEvenOdd例6.2設(shè)ASC單元存放兩個(gè)字符的ASCII碼,編制程序檢查其奇偶性,并將它們配制成奇校驗(yàn)存入原單元。問題分析:字符的ASCII碼是用七位二進(jìn)制表示的,當(dāng)用一個(gè)字節(jié)單元保存一個(gè)字符的ASCII碼時(shí),字節(jié)單元的第7位(最高位)空閑,因此,常對ASCII碼字節(jié)的空閑位作如下利用:1)作為奇偶校驗(yàn)位;2)為1,表示是擴(kuò)充ASCII碼,即128種特殊字符或圖形代碼(在西文狀態(tài)下);3)作為漢字代碼的標(biāo)志位(在中文狀態(tài)下)。本題要求將字符代碼配置為奇校驗(yàn)。方法是先檢查代碼的奇偶性,然后根據(jù)測試結(jié)果PF標(biāo)志狀態(tài)決定是否將最高位置1。在字符I/O時(shí),常把第7位做為奇偶校驗(yàn)位,其意義在于字符在傳輸過程中,可能由于某種原因,產(chǎn)生數(shù)位傳輸錯(cuò),通過設(shè)置奇偶校驗(yàn)位可以檢查字符傳輸中是否出錯(cuò)。所謂字符代碼的奇偶性系指代碼中含1的個(gè)數(shù)是奇數(shù)還是偶數(shù)。例如,字符A的ASCII碼為41H(01000001B),其中含有2個(gè)1,即為偶性,要使之為奇性,則將最高位0變?yōu)?;同理字符C的ASCII碼為43H(01000011B),其中含有3個(gè)1,即為奇性。把字符代碼配制成奇校驗(yàn),即使字符代碼連同最高位共含有奇數(shù)個(gè)1;配制成偶校驗(yàn),即使字符代碼連同最高位共含有偶數(shù)個(gè)1。圖6.3配奇校驗(yàn)位程序流程圖DSEGSEGMENTASCDB‘AC’DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGMKODD:MOVAX,DSEGMOVDS,AXMOVAX,WORDPTRASC;取兩字符ANDAL,AL;置奇偶標(biāo)志 JPONEXT;奇轉(zhuǎn)ORAL,80H;配為奇性NEXT:ANDAH,AH;置奇偶標(biāo)志JPOLOAD;奇轉(zhuǎn)ORAH,80H;配為奇性LOAD:MOVWORDPTRASC,AXMOVAH,4CHINT21HCSEGENDSENDMKODD例6.3設(shè)X為單字節(jié)帶符號整數(shù),且存于ARGX單元,計(jì)算結(jié)果Y存入RLT單元。X+10(0<X≤8)5X-2(8<X<15)|X|(其它){Y=1:;*****EXAM6.3*****2:SSEG SEGMENTSTACK3:STK DB 50DUP(0)4:SSEG ENDS5:DSEG SEGMENT6:ARGX DB -57:RLT DB ?8:DSEG ENDS9:CSEG SEGMENT10: ASSUME CS:CSEG,DS:DSEG11: ASSUME SS:SSEG12:BEGIN: MOV AX,DSEG13: MOV DS,AX14: MOV AX,SSEG15: MOV SS,AX16: MOV SP,SIZESTK17: MOV AL,ARGX ;取X值18: AND AL,AL ;置標(biāo)志位19: JS ABSL ;X<0轉(zhuǎn)20: JZ MOVE ;X=0轉(zhuǎn)21: CMP AL,8 ;X≤8?22: JLE ONE ;是,轉(zhuǎn)23: CMP AL,15 ;X≥15?24: JGE MOVE ;是,轉(zhuǎn)25: SAL AL,1 ;計(jì)算5X-226: SAL AL,127: ADD AL,ARGX28: SUB AL,229: JMP MOVE30:ONE: ADD AL,10 ;X≤8,計(jì)算X+1031: JMP MOVE32:ABSL: NEG AL ;取補(bǔ)33:MOVE:MOV RLT,AL ;保存結(jié)果34: MOV AH,4CH35: INT 21H36:CSEG ENDS37: END BEGIN例6.4設(shè)內(nèi)存中有三個(gè)互不相等的無符號字?jǐn)?shù)據(jù),分別存放在ARG開始的字單元,編制程序?qū)⑵渲凶畲笾荡嫒隡AX單元。A,B,C大大1:;*****EXAM6.5*****2:SSEG SEGMENT STACK3:STK DB 20 DUP(0)4:SSEG ENDS5:DSEG SEGMENT6:ARG DW 7138H,84A6H,29EH7:MAXDW ?8:DSEG ENDS9:CSEG SEGMENT10: ASSUME CS:CSEG,DS:DSEG11: ASSUME SS:SSEG12:FMAX:MOV AX,DSEG13: MOV DS,AX14: MOV AX,SSEG15: MOV SS,AX16: MOV SP,SIZESTK17: LEA SI,ARG ;取數(shù)據(jù)首址18: MOV AX,[SI] ;取第1個(gè)數(shù)19: MOV BX,[SI+2] ;取第2個(gè)數(shù)20: CMP AX,BX ;兩數(shù)比較21: JAE FMAX1 ;AX中的數(shù)大22: MOVAX,BX ;大數(shù)送AX23:FMAX1:CMP AX,[SI+4] ;大數(shù)與第3個(gè)數(shù)比較24: JAE FMAX2 ;AX中的數(shù)大25: MOV AX,[SI+4] ;第3個(gè)數(shù)大大值26:FMAX2:MOVMAX,AX ;保存最大值27: MOV AH,4CH28: INT 21H29:CSEGENDS30:ENDFMAX6.2多分支結(jié)構(gòu)程序設(shè)計(jì)利用計(jì)算機(jī)解決實(shí)際問題時(shí),常遇到這樣的情況:處理某個(gè)問題時(shí)有多種選擇方案,根據(jù)實(shí)際情況選擇其中一種。每種處理方案由一段程序完成,每一段程序可以看作一個(gè)分支,程序在執(zhí)行過程中根據(jù)當(dāng)前的狀況,決定下一步應(yīng)執(zhí)行哪一個(gè)分支,這就構(gòu)成了多個(gè)分支的程序。如用計(jì)算機(jī)控制一臺電動(dòng)機(jī),該電動(dòng)機(jī)有正轉(zhuǎn)、逆轉(zhuǎn),在每種轉(zhuǎn)動(dòng)方式下又有幾種轉(zhuǎn)速的檔次控制,這些控制可以通過鍵盤0~9的數(shù)字鍵進(jìn)行選擇,進(jìn)入某種檔次選擇后,執(zhí)行相應(yīng)分支程序,使電機(jī)以最佳方式由一個(gè)狀態(tài)進(jìn)入所選狀態(tài)。假設(shè)程序的十個(gè)分支的起始地址分別為ADR0,ADR1,...ADR9。1:;*****EXAM6.5.1*****2:SSEG SEGMENTSTACK3:STK DB20DUP(0)4:SSEG ENDS5:DSEG SEGMENT6:DSEG ENDS7:CSEG SEGMENT8: ASSUME CS:CSEG,DS:DSEG9: ASSUME SS:SSEG10:MOTOR:MOV AX,DSEG11: MOV DS,AX12: MOV AX,SSEG13: MOV SS,AX14: MOV SP,SIZESTK15: MOV AH,0116: INT 21H17: CMP AL,’0’18: JZ ADR019: CMP AL,’1’20: JZ ADR121: :22: CMP AL,’8’23: JZ ADR824:ADR9: :25: ::ADR0: :: ::ADR1 :: ::ADR8 ::::CSEG ENDS: END MOTOR-為了實(shí)現(xiàn)多路分支,常用跳轉(zhuǎn)表。-例如某程序需n路分支,每路程序的入口地址分別為SUB1、SUB2、……SUBn。把這些轉(zhuǎn)移的入口地址組成一個(gè)表,叫跳轉(zhuǎn)表(如圖6.4(a))。表內(nèi)每兩個(gè)字節(jié)存放一個(gè)入口地址的偏移量,跳轉(zhuǎn)表也可由若干跳轉(zhuǎn)指令組成(如圖6.4(b)),這時(shí)用無條件轉(zhuǎn)移指令,且每條指令的目標(biāo)代碼長度要一致,否則分支程序的編制非常麻煩。用跳轉(zhuǎn)表形成多路分支的程序設(shè)計(jì)圖6.4跳轉(zhuǎn)表例6.5現(xiàn)有若干個(gè)程序段,每一程序段的入口地址分別是SUB1、SUB2、……SUBn。試編制一程序,根據(jù)指定的參數(shù)轉(zhuǎn)入相應(yīng)的程序段。問題分析:首先組成由入口地址構(gòu)造的跳轉(zhuǎn)表。設(shè)指定的參數(shù)是1、2、3、……n,且當(dāng)參數(shù)為‘1’時(shí),轉(zhuǎn)移到SUB1,當(dāng)參數(shù)為‘2’轉(zhuǎn)移到SUB2,依次類推。這樣,跳轉(zhuǎn)表內(nèi)的地址按照SUB1、SUB2、……SUBn的順序排列。程序中,只需把取出的參數(shù)減‘1’乘以2,再加上跳轉(zhuǎn)表首址就可以實(shí)現(xiàn)轉(zhuǎn)移。DATASEGMENTTABLEDWSUB1,SUB2,SUB3,…SUBnPARAMDB3DAIAENDSCSEGSEGMENTASSUMECS:CSEG,DS:DATABEING:MOVAX,DATAMOVDS,AXMOVAL,PARAM圖6.4跳轉(zhuǎn)表DATASEGMENTTABLEDWSUB1,SUB2,SUB3,…SUBnPARAMDB3DATAENDSCSEGSEGMENTASSUMECS:CSEG,DS:DATABEING:MOVAX,DATAMOVDS,AXMOVAL,PARAMX0RAH,AHDECALSHLAL,1MOVBX,OFFSETTABLEADDBX,AXJMPWORDPTR「BX」SUB1:┊JMPEND0SUB2:┊JMPEND

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論