分支程序設(shè)計(jì)_第1頁(yè)
分支程序設(shè)計(jì)_第2頁(yè)
分支程序設(shè)計(jì)_第3頁(yè)
分支程序設(shè)計(jì)_第4頁(yè)
分支程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

分支程序設(shè)計(jì)第1頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月4.1條件標(biāo)志位的設(shè)置規(guī)則

決定轉(zhuǎn)移的標(biāo)志位(1)進(jìn)位標(biāo)志CF 當(dāng)無(wú)符號(hào)數(shù)運(yùn)算結(jié)果的最高有效位有進(jìn)位(加法)或借位(減法)時(shí),進(jìn)位標(biāo)志置1;否則置0(2)零標(biāo)志ZF 若運(yùn)算結(jié)果為0,則ZF=1;否則ZF=0(3)符號(hào)標(biāo)志SF 運(yùn)算結(jié)果最高位為1,則SF=1;否則SF=0(4)溢出標(biāo)志OF 若無(wú)符號(hào)數(shù)運(yùn)算的結(jié)果有溢出,則OF=1;否則OF=0(5)奇偶標(biāo)志PF 當(dāng)運(yùn)算結(jié)果中“1”的個(gè)數(shù)為零或偶數(shù)時(shí),PF=1;否則PF=0第2頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月4.1條件標(biāo)志位的設(shè)置規(guī)則MOV指令不影響標(biāo)志位;加減指令影響上述所有標(biāo)志,但增1和減1指令不影響CF;乘除指令只影響CF和OF設(shè)AX=78C4H,BX=9F35H.通過(guò)示例觀察每條指令執(zhí)行后對(duì)標(biāo)志位的影響 CF SF OF ZF PFADDAX,BX 1 0 0 0 ADDAH,AL 0 1 1 0 ADDAH,BL 0 1 0 0 SUBAX,BX SUBBX,BXSUBAH,BH第3頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月4.2.1無(wú)條件轉(zhuǎn)移指令(OPD+2)→CS注意:

實(shí)際編程時(shí),匯編程序會(huì)根據(jù)目標(biāo)地址的距離,自動(dòng)處理成短轉(zhuǎn)移、近轉(zhuǎn)移或遠(yuǎn)轉(zhuǎn)移程序員可用操作符short、nearptr或farptr強(qiáng)制返回首頁(yè)JMPFARPTR標(biāo)號(hào)JMPNEARPTR標(biāo)號(hào)JMPDWORDPTROPDJMPWORDPTROPD第4頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月例請(qǐng)寫(xiě)出下列轉(zhuǎn)移指令的尋址方式,并求出執(zhí)行該轉(zhuǎn)移指令后,IP寄存器、CS寄存器的內(nèi)容是什么?TABLE是字變量,變量的值是100H;PROG是近標(biāo)號(hào),表示偏移地址200H,ECX的內(nèi)容02D37650H,段屬性值為38E0H。當(dāng)前IP的內(nèi)容是1000H,CS的內(nèi)容是38ACH,DS的內(nèi)容是28E0H,BX的內(nèi)容是10H,DI的內(nèi)容是20H。①JMPPROG②JMPWORDPTR[BX]③JMPDWORDPTRTABLE[BX]④JMPECX⑤JMPFARPTRPROG⑥JMP[BX][DI]③段間間接尋址執(zhí)行該指令后(IP)=((DS)*10H+(BX)+位移量)的低字=(28F10H)低字,(CS)=((DS)*10H+(BX)+位移量)的高字=(28F10H)高字④段間間接尋址,執(zhí)行該指令后(IP)=(ECX)低字=7650H,(CS)=(ECX)高字=02D3H⑤段間直接尋址,執(zhí)行該指令后(IP)=(PROG)偏移屬性=0200H,(CS)=(PROG)段屬性=38E0H⑥段內(nèi)間接尋址,執(zhí)行該指令后(IP)=((DS)*10H+(BX)+(DI))=(28E00H+10H+20H)=(28E30H)①段內(nèi)直接程序存儲(chǔ)器尋址執(zhí)行該指令后(IP)=(PROG)偏移屬性=0200H②段內(nèi)間接程序存儲(chǔ)器尋址執(zhí)行該指令后(IP)=((DS)*10H+(BX))=(28E00H+10H)=(28E10H)第5頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月JMP指令:段內(nèi)直接轉(zhuǎn)移第6頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月JMP指令:段內(nèi)寄存器間接轉(zhuǎn)移第7頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月JMP指令:段間直接轉(zhuǎn)移第8頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月JMP指令:段間間接轉(zhuǎn)移第9頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月4.2.2條件轉(zhuǎn)移指令1.簡(jiǎn)單條件轉(zhuǎn)移指令2.無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令3.有符號(hào)數(shù)條件轉(zhuǎn)移指令

格式:Jcc短標(biāo)號(hào)功能:指定的條件cc如果成立,程序轉(zhuǎn)移到由短標(biāo)號(hào)指定的目標(biāo)地址去執(zhí)行指令;條件不成立,則程序?qū)㈨樞驁?zhí)行轉(zhuǎn)移指令的下一條指令返回首頁(yè)條件標(biāo)志位的設(shè)置規(guī)則第10頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月1.簡(jiǎn)單條件轉(zhuǎn)移指令例題4.1例題4.2例題4.3例題4.4例題4.5第11頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月例4.1:JZ/JNZ指令 testal,80h ;測(cè)試最高位 jznext0 ;D7=0(ZF=1),轉(zhuǎn)移 movah,0ffh ;D7=1,順序執(zhí)行 jmpdone ;無(wú)條件轉(zhuǎn)向next0: movah,0done: ... testal,80h ;測(cè)試最高位 jnznext1 ;D7=1(ZF=0),轉(zhuǎn)移 movah,0 ;D7=0,順序執(zhí)行 jmpdone ;無(wú)條件轉(zhuǎn)向next1: movah,0ffhdone: ...第12頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月例4.2:JS/JNS指令計(jì)算|X-Y|(絕對(duì)值)。X和Y為存放于X單元和Y單元的16位操作數(shù),結(jié)果存入result。 movax,X subax,Y jnsnonneg negax ;neg是求補(bǔ)指令 andax,7fffhnonneg: movresult,ax第13頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月例4.3:JO/JNO指令計(jì)算X-Y。X和Y為存放于X單元和Y單元的16位操作數(shù),若溢出,則轉(zhuǎn)移到overflow處理。 movax,X subax,Y jooverflow ... ;無(wú)溢出,結(jié)果正確overflow: ... ;有溢出處理第14頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月例4.4:JP/JNP指令設(shè)字符的ASCII碼在AL寄存器中,將字符加上奇校驗(yàn)位,在字符ASCII碼中為“1”的個(gè)數(shù)已為奇數(shù)時(shí),則令其最高位為“0”;否則令最高位為“1” andal,7fh ;最高位置“0”,同時(shí)判斷“1”的個(gè)數(shù) jnpnext ;個(gè)數(shù)已為奇數(shù),則轉(zhuǎn)向next oral,80h ;否則,最高位置“1”next: ...第15頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月例4.5:JC/JNC指令記錄BX中1的個(gè)數(shù) xoral,al ;AL=0,CF=0again: testbx,0ffffh;等價(jià)于cmpbx,0 jenext shlbx,1 jncagain incal jmpagainnext: ... ;AL保存1的個(gè)數(shù)

xoral,al ;AL=0,CF=0again: cmpbx,0 jznext shlbx,1 ;也可使用shrbx,1 adcal,0 jmpagainnext: ... ;AL保存1的個(gè)數(shù)另一種做法第16頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月2.無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令【例】比較無(wú)符號(hào)數(shù)大小,將較大的數(shù)存放AX寄存器CMP AX,BX;(AX)-(BX)JNB NEXT ;若AX>=BX,轉(zhuǎn)移到NEXTXCHG AX,BX;若AX<BX,交換NEXT:…第17頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月3.有符號(hào)數(shù)條件轉(zhuǎn)移指令SFOF=0+SFSFSF【例】比較有符號(hào)數(shù)大小,將較大的數(shù)存放在AX寄存器CMP AX,BX ;(AX)-(BX)JNL NEXT ;若AX>=BX,轉(zhuǎn)移到NEXTXCHG AX,BX ;若AX<BX,交換NEXT:…第18頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月4.2分支結(jié)構(gòu)程序設(shè)計(jì)4.2.1匯編語(yǔ)言程序設(shè)計(jì)的一般步驟4.2.2流程圖4.2.3分支程序設(shè)計(jì)返回首頁(yè)第19頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月4.2.1匯編語(yǔ)言程序設(shè)計(jì)的一般步驟匯編語(yǔ)言程序設(shè)計(jì)一般有以下幾個(gè)步驟:1.分析問(wèn)題,確定算法2.繪制流程圖3.根據(jù)流程圖編制程序5.調(diào)試程序返回本節(jié)第20頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月4.2.2流程圖1.流程圖的概念

流程圖是由特定的幾何圖形、指向線、文字說(shuō)明來(lái)表示數(shù)據(jù)處理的步驟,形象描述邏輯控制結(jié)構(gòu)以及數(shù)據(jù)流程的示意圖。流程圖具有簡(jiǎn)潔、明了、直觀的特點(diǎn)。2.流程圖符號(hào)表示(1)起止框:表示程序的開(kāi)始和結(jié)束。起止框(2)判斷框

(3)處理框

(4)調(diào)用框

(5)指向線

(6)連接框

返回本節(jié)第21頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月4.2.3分支程序設(shè)計(jì)一、用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序分支二、多路分支練習(xí)分支程序根據(jù)條件是真或假?zèng)Q定執(zhí)行不同的程序段判斷的條件是各種指令,如CMP、TEST等執(zhí)行后形成的狀態(tài)標(biāo)志通過(guò)轉(zhuǎn)移指令可以實(shí)現(xiàn)分支控制返回本節(jié)第22頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月一、用條件轉(zhuǎn)移指令實(shí)現(xiàn)程序分支1、單分支[例4.6]計(jì)算AX的絕對(duì)值法1:cmpax,0

jnsnonneg;分支條件:AX≥0negax;條件不滿足,求補(bǔ)nonneg:movresult,ax ;條件滿足BadAx<0?Ax求補(bǔ)n法2:cmpax,0

jlyesneg;分支條件:AX<0jmpnonnegyesneg:negax;條件不滿足,求補(bǔ)nonneg:movresult,ax;條件滿足第23頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月【例4.7】無(wú)符號(hào)數(shù)除以2

將AX中存放的無(wú)符號(hào)數(shù)除以2,如果是奇數(shù),則加1后除以2

testax,01h

;測(cè)試AX最低位

jzeven

;最低位為0:AX為偶數(shù)

addax,1 ;最低位為1:AX為奇數(shù),需要加1even:

rcrax,1 ;AX←AX÷2注意:如果采用SHR指令,則不能處理AX=FFFFH的特殊情況第24頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月2、雙分支第25頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月例、比較兩個(gè)字符串是否相等,等則顯示YES,不等時(shí)顯示NODATA SEGMENTS1DB‘1234GR9’L1 EQU$-S1S2DB‘1234GF5’L2 EQU$-S2RES1DB‘YES’,‘$’RES2DB‘NO’,‘$’DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AXMOVCX,L1CMPCX,L2JNZRESULTNST: CLD LEASI,S1 LEADI,S2 REPZCMPSB JNZRESULTN LEADX,RES1 JMPDISPRESULTN: LEADX,RES2DISP: MOVAH,9 INT21H MOVCX,4C00H INT21HCODEENDS ENDSTART第26頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月【練習(xí)】試編一程序,求三個(gè)帶符號(hào)字?jǐn)?shù)據(jù)中的最大值,并將最大值存入MAX字單元中。 設(shè)三個(gè)帶符號(hào)數(shù)分別在三個(gè)字變量X、Y、Z中存儲(chǔ)。STAC SEGMENTSTACK DB200DUP(0)STACK ENDSDATA SEGMENTX DW00ABHY DW–5Z DW200MAX DW?DATA ENDSCODE SEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOV DS,AXMOV AX,XCMP AX,Y ;X>Y?

JGLLMOV AX,Y ;Y>Z?LL:CMP AX,ZJG EXIT

MOV AX,ZEXIT:

MOV MAX,AXMOV AX,4C00HINT21HCODE ENDSEND START返回第27頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月二、多分支程序設(shè)計(jì)1)由多個(gè)雙分支構(gòu)成多分支2)地址法表實(shí)現(xiàn)多分支3)轉(zhuǎn)移法表實(shí)現(xiàn)多分支4)邏輯分解法實(shí)現(xiàn)多分支返回第28頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月1)由多個(gè)雙分支構(gòu)成多分支1 X>0Y=0 X=0-1 X設(shè)輸入數(shù)據(jù)為X、輸出數(shù)據(jù)Y,且皆為字節(jié)變量。DATA SEGMENTX DB-10Y DB?DATA ENDSSTACK SEGMENTSTACK DB200DUP(0)STACK ENDSCODE SEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:

MOV AX,DATAMOV DS,AX CMP X,0 ;與0進(jìn)行比較

JS A2 JNS A1 ;X≥0轉(zhuǎn)A1 MOV Y,0 JMP EXITA1:

MOVY,1 JMP EXITA2:

MOV Y,-1 EXIT:

MOV AX,4C00H INT 21HCODEENDS END START返回本節(jié)Y=1Y=-1Y=0X<0X>0第29頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月2)地址法表實(shí)現(xiàn)多分支將各分支程序段的入口地址依次存入數(shù)據(jù)段的一個(gè)表中,形成地址表。取各分支程序段的編號(hào)作為各分支入口地址的表地址的位移量。某程序段入口地址的表地址為: 表地址=編號(hào)*2+入口地址首地址例如:從低到高逐位檢查一個(gè)字節(jié)數(shù)據(jù),找出第一個(gè)非0位的數(shù),并顯示其位置DATA SEGMENTNUM DB 78HADDR Dw AD0,AD1,AD2,AD3,AD4,AD5,AD6,AD7DATA ENDS右移1位顯示?=0?顯示相應(yīng)位數(shù)CF=0?取數(shù)第30頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月CODE SEGMENTASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX MOVAL,NUM MOV DL,’?’ CMPAL,0 JZ EXIT MOVBX,0AGAIN:SHR AL,1 JC NEXT INC BX JMP AGAINNEXT: SHL BX,1

JMP ADDR[BX]AD0: MOV DL,30H JMP EXITAD1: MOV DL,31H JMP EXITAD2: MOV DL,32H JMP EXITAD3: MOV DL,33H JMP EXITAD4: MOV DL,34H JMP EXITAD5: MOV DL,35H JMP EXITAD6: MOV DL,36H JMP EXITAD7: MOV DL,37HEXIT: MOV AH,2 INT 21H MOV AX,4C00H INT 21HCODEENDS ENDSTART返回本節(jié)右移1位顯示?=0?顯示相應(yīng)位數(shù)CF=0?取數(shù)第31頁(yè),課件共34頁(yè),創(chuàng)作于2023年2月3)轉(zhuǎn)移法表實(shí)現(xiàn)多分支【例4.9】設(shè)某程序有8路分支,試根據(jù)給定的N值(1~8),將程序的執(zhí)行轉(zhuǎn)移到其中的一路分支。

多個(gè)條件對(duì)應(yīng)各自的分支語(yǔ)句體,哪個(gè)條件成立就轉(zhuǎn)入相應(yīng)分支體執(zhí)行。多分支可以化解為雙分支或單分支結(jié)構(gòu)的組合DATA SEGMENTTAB DWP1,P2,P3,P4,P5,P6,P7,P8NDB5DATA ENDSSTACK SEGMENT DB200DUP(0)STACK ENDSCODE SEGMENT

ASSUMEDS:DATA,SS:STACK,CS:CODE

START:

MOV AX,DATA MOV DS,AX

┆ MOV AL,N DEL AL ADD AL,AL MOV BL,AL MOV BH,0 JMP TAB[BX]P1:

……

┆ JMP EXITP2:

……

┆ JMP EXITP2:

……

┆ JMP EXITP3:

……

┆ JMP EXIT

┆P8:

……

┆EXIT:

MOV AX,4C00H INT 21HCODE ENDS END START返回本節(jié)無(wú)條件轉(zhuǎn)移指令的轉(zhuǎn)移地址采用的是變址尋址。若轉(zhuǎn)移地址用寄存器間接尋址或基址加變址尋址則應(yīng)如何修改程序? MOV AL,N DEL AL ADD AL,AL MOV BL,AL MOV BH,0 JMP TAB[BX]P1:

……

┆ JMP EXITP

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論