匯編語(yǔ)言程序設(shè)計(jì)第8章80868088分支程序設(shè)計(jì).ppt_第1頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)第8章80868088分支程序設(shè)計(jì).ppt_第2頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)第8章80868088分支程序設(shè)計(jì).ppt_第3頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)第8章80868088分支程序設(shè)計(jì).ppt_第4頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)第8章80868088分支程序設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩21頁(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)介

1、2020/9/12,第8章分支程序設(shè)計(jì),1,8086/8088和ARM核匯編語(yǔ)言程序設(shè)計(jì),第8章 分支程序設(shè)計(jì),2020/9/12,第8章分支程序設(shè)計(jì),2,8.1 分支程序的結(jié)構(gòu)形式,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),第8章 分支程序設(shè)計(jì),2020/9/12,第8章分支程序設(shè)計(jì),3,掌握分支程序設(shè)計(jì)方法 熟悉常見程序設(shè)計(jì)問(wèn)題: 數(shù)據(jù)范圍判斷(09、AZ、az)、 字母大小寫轉(zhuǎn)換、 ;,教學(xué)要求,2020/9/12,第8章分支程序設(shè)計(jì),4,8.1 分支程序的結(jié)構(gòu)形式,分支程序結(jié)構(gòu)是根據(jù)條件轉(zhuǎn)向不同程序分支的結(jié)果, 有3種形式:?jiǎn)畏种?、雙分支結(jié)構(gòu)和多分支結(jié)構(gòu)。,2020/9/12,第8章分支程序設(shè)計(jì),5,

2、8.1 分支程序的結(jié)構(gòu)形式,2020/9/12,第8章分支程序設(shè)計(jì),6,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),分支程序設(shè)計(jì)首先要在分析實(shí)際問(wèn)題的基礎(chǔ)上確定若干個(gè)程序分支,然后在此基礎(chǔ)上選用條件轉(zhuǎn)移指令、或者是選用間接尋址無(wú)條件轉(zhuǎn)移來(lái)轉(zhuǎn)向不同的程序分支。前者是測(cè)試法分支程序設(shè)計(jì),后者是跳躍表法分支程序設(shè)計(jì)。,分支程序根據(jù)條件是真或假?zèng)Q定執(zhí)行與否 判斷的條件是各種指令,如CMP、TEST等執(zhí)行后形成的狀態(tài)標(biāo)志 轉(zhuǎn)移指令Jcc和JMP可以實(shí)現(xiàn)分支控制,2020/9/12,第8章分支程序設(shè)計(jì),7,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),分支結(jié)構(gòu)是有若干個(gè)條件,每一個(gè)條件對(duì)應(yīng)一個(gè)基本操作。分支程序就是判斷產(chǎn)生的條件,哪個(gè)條件成立

3、,就執(zhí)行哪個(gè)條件對(duì)應(yīng)操作的程序段。也就是說(shuō),從若干分支中選擇一個(gè)分支執(zhí)行。,8.2.1 測(cè)試法分支程序設(shè)計(jì),例8.1 已知在內(nèi)存中有一個(gè)字節(jié)單元NUM,存有帶符號(hào)數(shù)據(jù),要求計(jì)算出它的絕對(duì)值后,放入RESULT單元中。,2020/9/12,第8章分支程序設(shè)計(jì),8,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.1 測(cè)試法分支程序設(shè)計(jì),程序清單:,DATA SEGMENT X DB -25 RESULT DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOVAX, DATA MOVDS, AX ;初始化 MOVAL, X ;X取到AL中 TES

4、TAL, 80H ;測(cè)試AL正負(fù) JZNEXT ;為正,轉(zhuǎn)NEXT NEGAL ;否則AL求補(bǔ) NEXT:MOVRESULT, AL ;送結(jié)果 MOVAH, 4CH INT21H ;返回DOS CODE ENDS END START ;匯編結(jié)束,2020/9/12,第8章分支程序設(shè)計(jì),9,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.1 測(cè)試法分支程序設(shè)計(jì),例8.2 試編一程序,求三個(gè)帶符號(hào)字?jǐn)?shù)據(jù)中的最大值,并將最大值存入MAX字單元中。設(shè)三個(gè)帶符號(hào)數(shù)分別在三個(gè)字變量X、Y、Z中存儲(chǔ)。,2020/9/12,第8章分支程序設(shè)計(jì),10,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.1 測(cè)試法分支程序設(shè)計(jì),DATA SEG

5、MENT X DW -0ABH Y DW 205 Z DW 200 MAX DW ? DATA ENDS,CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX, DATA MOV DS, AX MOV AX, X CMP AX, Y JGE L1 MOV AX, Y L1: CMP AX, Z JGE EXIT MOV AX, Z EXIT: MOV MAX, AX MOV AH, 4CH INT 21H CODE ENDS END START,2020/9/12,第8章分支程序設(shè)計(jì),11,第十五講,1、閱讀下列程序段,程序執(zhí)行到HLT時(shí), (AX

6、)=( ),(BX)=( )。(4分) xor ax, ax mov bx, 1 mov cx, 5 lop: add ax, bx inc bx loop lop hlt,0FH或15,6,2020/9/12,第8章分支程序設(shè)計(jì),12,2、試分析下列程序段,程序執(zhí)行后,num2字節(jié)單元的內(nèi)容是什么?如果num1字節(jié)單元的值為39h,運(yùn)行后,num2字節(jié)單元的內(nèi)容又是什么?由此說(shuō)明程序完成了什么操作。(6分) data segment num1 db 41h num2 db ? data ends Code segment assume cs:code, ds:data start: mov

7、ax, data mov ds, ax mov ah, num1,cmp ah, 39h Jbe next sub ah, 7 next: sub ah, 30h mov num2, ah mov ah, 4ch int 21h code ends end start,0AH,09H, 此程序可將num1字節(jié)單元中的ascii字符09,AF轉(zhuǎn)換成十六進(jìn)制數(shù)09,AF,2020/9/12,第8章分支程序設(shè)計(jì),13,3、下列程序完成將BX寄存器的數(shù)值以十六進(jìn)制顯示輸出,完成程序填空。(6分) code segment assume (1) start: mov bx, 0DA12H mov ch,

8、 4 rotate: mov cl, 4 ;設(shè)置移位指令的移位次數(shù) rol bx, cl mov al, bl and al, 0FH ;取BX寄存器的高四位 add al, (2) ;將十六進(jìn)制數(shù)值轉(zhuǎn)換成對(duì)應(yīng)的ASCII碼 cmp al, 3ah jl printit add al, (3) ;處理十六進(jìn)制數(shù)A-F,printit:mov DL , al ;調(diào)用系統(tǒng)功能,顯示一位十六進(jìn)制數(shù)對(duì)應(yīng)的字符 Mov ah, (4) int 21h dec ch ;循環(huán)次數(shù)-1 jnz rotate ;處理BX后續(xù)四位二進(jìn)制位 mov ah, 4CH int (5) code ends end (6)

9、,cs: code,30H,07H,02,21H,start,2020/9/12,第8章分支程序設(shè)計(jì),14,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.2 跳躍表法,例8.3 設(shè)某程序有8路分支,試根據(jù)給定的N值(18),將程序的執(zhí)行轉(zhuǎn)移到其中的一路分支。,2020/9/12,第8章分支程序設(shè)計(jì),15,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.2 跳躍表法,DATA SEGMENT TAB DW P1,P2,P3,P4,P5,P6,P7,P8 N DB 5 DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX, DATA MOV DS, AX M

10、OV AL, N DEC AL ADD AL, AL MOV BL, AL MOV BH, 0 JMP TABBX,P1: JMP EXIT P2: JMP EXIT P8: EXIT: MOV AH,4CH INT 21H CODE ENDS END START,2020/9/12,第8章分支程序設(shè)計(jì),16,例:根據(jù) AL 寄存器中哪一位為 1(從低位到高位), 把程序轉(zhuǎn)移到 8 個(gè)不同的程序分支,branch_table dw routine1 dw routine2 dw routine3 dw routine4 dw routine5 dw routine6 dw routine7 d

11、w routine8,跳躍表法,2020/9/12,第8章分支程序設(shè)計(jì),17, cmp al, 0 ;AL為邏輯尺 je continue lea bx, branch_table L: shr al, 1 ;邏輯右移 jnc add1 jmp word ptrbx ;段內(nèi)間接轉(zhuǎn)移 add1: add bx, type branch_table ;add bx,2 jmp L continue: routine1: routine2: ,(寄存器間接尋址),2020/9/12,第8章分支程序設(shè)計(jì),18,(寄存器相對(duì)尋址), cmp al, 0 je continue mov si, 0 L:

12、shr al, 1 ;邏輯右移 jnc add1 jmp branch_tablesi ;段內(nèi)間接轉(zhuǎn)移 add1: add si, type branch_table jmp L continue: routine1: routine2: ,2020/9/12,第8章分支程序設(shè)計(jì),19,(基址變址尋址), cmp al, 0 je continue lea bx, branch_table mov si, 7 * type branch_table mov cx, 8 L: shl al, 1 ;邏輯左移 jnc sub1 jmp word ptr bxsi ;段內(nèi)間接轉(zhuǎn)移 sub1: sub

13、 si, type branch_table ;(si)-2 loop L continue: routine1: routine2: ,2020/9/12,第8章分支程序設(shè)計(jì),20,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.3舉例,例8.4 在附加段中,有一個(gè)按從小到大順序排列的無(wú)符號(hào)字節(jié)數(shù)組ARRAY,要求在數(shù)組中查找字節(jié)X,若找到則使CF=0,并在ADDR中給出該元素在數(shù)組中的偏移地址;如未找到則使CF=1。,算法分析: 折半查找法是先取有序數(shù)組的中間元素與查找值相比較,如相等則查找成功;如查找值大于中間元素,則再取高半部的中間元素與查找值相比較;如查找值小于中間元素,則再取低半部的中間元素與查

14、找值相比較;如此重復(fù)直到查找成功或者最終未找到該數(shù)(查找不成功)為止。對(duì)于長(zhǎng)度為N的表格,折半查找法的平均比較次數(shù)為log2N,而順序查找法平均要作N/2次比較。,2020/9/12,第8章分支程序設(shè)計(jì),21,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.3舉例,2020/9/12,第8章分支程序設(shè)計(jì),22,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.3舉例,DSEG SEGMENT ARRAYDW 114H,128H,256H,259H,325H,14ADH, 34DEH,4D34H,5FDAH XDW 256H ADDR DW ? LOW1 DW ? HIGH1DW ? LEN1=(X-ARRAY)/2 DSE

15、G ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,ES:DSEG START:PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV ES,AX MOV AX,X,2020/9/12,第8章分支程序設(shè)計(jì),23,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.3舉例,LEA DI,ARRAY CMP AX,ES:DI JA LAB1;大于最小數(shù) LEA SI ,ES:DI JE EXIT;找到,結(jié)束 STC;未找到 JMP EXIT1 LAB1: MOV SI,LEN1-1 SHL SI,1 ADD SI,DI;使SI指向最后

16、一個(gè)元素 CMP AX,ES:SI JB LAB2;小于最大數(shù),則轉(zhuǎn)去查詢 JE EXIT STC JMP EXIT1 LAB2:MOV LOW1,1 MOV BX,LEN1 MOV HIGH1,BX MOV BX,DI,2020/9/12,第8章分支程序設(shè)計(jì),24,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.3舉例,LABM:MOV CX,LOW1 MOV DX,HIGH1 CMP CX,DX JA NOFOUND ADD CX,DX SHR CX,1 MOV SI,CX SHL SI,1 COMP: CMP AX,ES:BX+SI JE EXIT JA LABH DEC CX MOV HIGH1,C

17、X JMP LABM LABH: INC CX MOV LOW1,CX JMP LABM NOFOUND:STC JMP EXIT1 EXIT: MOV ADDR,SI EXIT1: RET CSEG ENDS END START,2020/9/12,第8章分支程序設(shè)計(jì),25,8.2 分支結(jié)構(gòu)程序設(shè)計(jì),8.2.3舉例,需要注意的是: 用測(cè)試法進(jìn)行多分支程序設(shè)計(jì)時(shí),流程圖中對(duì)各個(gè)條件的測(cè)試的先后次序應(yīng)盡量和所涉及的具體問(wèn)題的提出次序相符;編程中為形成多分支而使用的轉(zhuǎn)移指令的先后次序也應(yīng)盡量與流程圖一致。這樣可以使得編程思路更清晰,易于閱讀和修改。 要根據(jù)題意為每個(gè)程序分支安排出口,避免某個(gè)程序分支錯(cuò)誤地順序進(jìn)入另一個(gè)程序分支,

溫馨提示

  • 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)論