匯編語(yǔ)言課件:第5章循環(huán)與分支程序設(shè)計(jì)_第1頁(yè)
匯編語(yǔ)言課件:第5章循環(huán)與分支程序設(shè)計(jì)_第2頁(yè)
匯編語(yǔ)言課件:第5章循環(huán)與分支程序設(shè)計(jì)_第3頁(yè)
匯編語(yǔ)言課件:第5章循環(huán)與分支程序設(shè)計(jì)_第4頁(yè)
匯編語(yǔ)言課件:第5章循環(huán)與分支程序設(shè)計(jì)_第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、 循環(huán)程序設(shè)計(jì) 分支程序設(shè)計(jì)第5章 循環(huán)與分支程序設(shè)計(jì)分支結(jié)構(gòu) 子程序結(jié)構(gòu)程序結(jié)構(gòu): 復(fù)合結(jié)構(gòu):多種程序結(jié)構(gòu)的組合 順序結(jié)構(gòu) 循環(huán)結(jié)構(gòu)編制匯編語(yǔ)言程序的步驟:(1) 分析題意,確定算法(2) 根據(jù)算法畫(huà)出程序框圖(3) 根據(jù)框圖編寫程序(4) 上機(jī)調(diào)試程序1. 循環(huán)程序設(shè)計(jì)DO-WHILE 結(jié)構(gòu) DO-UNTIL 結(jié)構(gòu)控制條件初始化循環(huán)體YN控制條件初始化循環(huán)體YN初始化:設(shè)置循環(huán)的初始狀態(tài)循環(huán)體:循環(huán)的工作部分及修改部分控制條件:計(jì)數(shù)控制 特征值控制 地址邊界控制 BX1234例:把 BX 中的二進(jìn)制數(shù)以十六進(jìn)制的形式顯示在屏幕上 mov ch, 4rotate: mov cl, 4 rol

2、 bx, cl mov al, bl and al, 0fh add al, 30h ; 09 ASCII 30H39H cmp al, 3ah jl printit add al, 7h ; AF ASCII 41H46Hprintit: mov dl, al mov ah, 2 int 21h dec ch jnz rotate mov bx, 0newchar: mov ah, 1 ;鍵盤輸入 int 21h sub al, 30h jl exit ; 9退出 cbw xchg ax, bx mov cx, 10 mul cx xchg ax, bx add bx, ax jmp new

3、charexit: 例:從鍵盤接收十進(jìn)制數(shù)并存入 BX( ( 010)+1 )10+2 )10+5 1 2 531 32 35 mov bx, 0newchar: mov ah, 1 ;鍵盤輸入 int 21h sub al, 30h jl exit ; 0退出 cmp al, 10 jl add_to sub al, 27h ; af cmp al, 0ah jl exit ; f退出add_to: mov cl, 4 shl bx, cl mov ah, 0 add bx, ax jmp newcharexit: 例:從鍵盤接收十六進(jìn)制數(shù)并存入 BX 1 a f31 61 66(016)+

4、1) 16+0a) 16+0fx dw ?array_head dw 3,5,15,23,37,49,52,65,78,99array_end dw 105n dw 32 例:將正數(shù) n 插入一個(gè)已整序的正數(shù)字?jǐn)?shù)組 mov ax, n mov array_head-2, 0ffffh mov si, 0compare: cmp array_end si, ax jle insert mov bx, array_end si mov array_end si+2, bx sub si, 2 jmp short compareinsert: mov array_end si+2, ax 35152

5、337495265789910532-1array_headarray_endn x 例: 將首地址為A的字?jǐn)?shù)組從小到大排序(氣泡算法,多重循環(huán)) 32,85,16,15, 8 序號(hào) 地址 數(shù)比 較 遍 數(shù)12341 A 322 A+2 853 A+4 164 A+6 155 A+8 8321615885161583285158163285815163285 mov cx, 5 ;元素個(gè)數(shù) dec cx ;比較遍數(shù)loop1: mov di, cx ;比較次數(shù) mov bx, 0loop2: mov ax, Abx ;相鄰兩數(shù) cmp ax, Abx+2 ; 比較 jle continue x

6、chg ax, Abx+2 ;交換位置 mov Abx, axcontinue: add bx, 2 loop loop2 mov cx, di loop loop12. 分支程序設(shè)計(jì) case 1 case 2 case n? case 1 case 2 case n CASE 結(jié)構(gòu) IF-THEN-ELSE 結(jié)構(gòu)(1) 邏輯尺控制(2) 條件控制(3) 地址跳躍表(值與地址有對(duì)應(yīng)關(guān)系的表)例:有數(shù)組 x(x1,x2,x10) 和 y(y1,y2,y10), 編程計(jì)算 z(z1,z2,z10)z1 = x1 + y1z2 = x2 + y2z3 = x3 - y3z4 = x4 - y4z5

7、 = x5 - y5z6 = x6 + y6z7 = x7 - y7z8 = x8 - y8z9 = x9 + y9z10= x10 + y10 邏輯尺:0 0 1 1 0 1 1 1 0 01 減法0 加法 x dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10logic_rule dw 00dch ;0000,0000,1101,1100 mov bx, 0 mov cx, 10 mov dx, logic_rulenext: mo

8、v ax, xbx shr dx, 1 jc subtract add ax, ybx jmp short result ; 向前引用subtract: sub ax, ybxresult: mov zbx, ax add bx, 2 loop next data segment array dw 12,11,22,33,44,55,66, 77,88,99,111,222,333 number dw 55 low_idx dw ? high_idx dw ?data ends例:折半查找算法 12 11 22 33 44 55 66 77 88 99111222333 0 1 2 3 4 5

9、 6 7 8 9101112(ax)=55low_idx 1 1 4 5 high_idx 12555(si)=0ahCf=0(ax)=90low_idx 1 7 7 8 9 high_idx 1212888(si)=10hCf=1折半算法1 lea di, array mov ax, number ;要查找數(shù) cmp ax, di+2 ; (ax)與第一個(gè)元素比較 ja chk_last lea si, di+2 je exit ; (ax)第一個(gè)元素,找到退出 stc jmp exit ; (ax)最后一個(gè)元素,未找到退出算法1compare: cmp ax, bx+si je exit

10、ja higher dec cx mov high_idx, cx jmp midhigher: inc cx mov low_idx, cx jmp midno_match: stcexit: search: mov low_idx, 1 mov bx, di ;個(gè)數(shù) mov high_idx, bx mov bx, dimid: mov cx, low_idx mov dx, high_idx cmp cx, dx ja no_match add cx, dx shr cx, 1 mov si, cx shl si, 1 12 11 22 33 44 55 66 77 88 9911122

11、2333 0 1 2 3 4 5 6 7 8 9101112(ax)=55 di 12 6 10si 1264(si)=0ah(di)=0ahCf=0(ax)=90 di 12 18 14 16 si 12642(si)=2(di)=10hCf=1折半算法2算法2idx_ok: shr si, 1 test si, 1 jz sub_idx inc sisub_idx: sub di, si jmp short comparehigher: cmp si, 2 je no_match shr si, 1 jmp short even_idxall_done: mov si, diexit: s

12、earch: mov si, dieven_idx: test si, 1 jz add_idx inc siadd_idx: add di, sicompare: cmp ax, di je all_done ja higher cmp si, 2 jne idx_okno_match: stc jmp exit例:根據(jù) AL 寄存器中哪一位為 1(從低位到高位), 把程序轉(zhuǎn)移到 8 個(gè)不同的程序分支branch_table dw routine1 dw routine2 dw routine3 dw routine4 dw routine5 dw routine6 dw routine7

13、dw routine8 cmp al, 0 ;AL為邏輯尺 je continue lea bx, branch_tableL: shr al, 1 ;邏輯右移 jnc add1 jmp word ptrbx ;段內(nèi)間接轉(zhuǎn)移add1: add bx, type branch_table ;add bx,2 jmp Lcontinue: routine1: routine2: (寄存器間接尋址)(寄存器相對(duì)尋址) cmp al, 0 je continue mov si, 0 L: shr al, 1 ;邏輯右移 jnc add1 jmp branch_tablesi ;段內(nèi)間接轉(zhuǎn)移add1: add si, type branch_table jmp Lcontinue: routine1: routine2: (基址變址尋址) cmp al, 0 je continue lea bx, br

溫馨提示

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