匯編語言教程第5章.ppt_第1頁
匯編語言教程第5章.ppt_第2頁
匯編語言教程第5章.ppt_第3頁
匯編語言教程第5章.ppt_第4頁
匯編語言教程第5章.ppt_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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),編制匯編語言程序的步驟:,(1) 分析題意,確定算法 (2) 根據(jù)算法畫出程序框圖 (3) 根據(jù)框圖編寫程序 (4) 上機(jī)調(diào)試程序,1. 循環(huán)程序設(shè)計(jì),DO-WHILE 結(jié)構(gòu) DO-UNTIL 結(jié)構(gòu),控制條件,初始化,循環(huán)體,Y,N,控制條件,初始化,循環(huán)體,Y,N,初始化:設(shè)置循環(huán)的初始狀態(tài) 循環(huán)體:循環(huán)的工作部分及修改部分 控制條件:計(jì)數(shù)控制 特征值控制 地址邊界控制,BX,1 2 3 4,例:把 BX 中的二進(jìn)制數(shù)以十六進(jìn)制的形式顯示在屏幕上, m

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

3、 cx xchg ax, bx add bx, ax jmp newchar exit: ,例:從鍵盤接收十進(jìn)制數(shù)并存入 BX,( ( 010)+1 )10+2 )10+5, mov bx, 0 newchar: mov ah, 1 ;鍵盤輸入 int 21h sub al, 30h jl exit ; f退出 add_to: mov cl, 4 shl bx, cl mov ah, 0 add bx, ax jmp newchar exit: ,例:從鍵盤接收十六進(jìn)制數(shù)并存入 BX,1 a f 31 61 66,(016)+1) 16+0a) 16+0f,x dw ? array_head

4、dw 3,5,15,23,37,49,52,65,78,99 array_end dw 105 n dw 32,例:將正數(shù) n 插入一個(gè)已整序的正數(shù)字?jǐn)?shù)組,105,array_head,array_end,n ,x ,例: 將首地址為A的字?jǐn)?shù)組從小到大排序 (氣泡算法,多重循環(huán)) 32,85,16,15, 8,mov cx, 5 ;元素個(gè)數(shù) dec cx ;比較遍數(shù) loop1: mov di, cx ;比較次數(shù) mov bx, 0 loop2: mov ax, Abx ;相鄰兩數(shù) cmp ax, Abx+2 ; 比較 jle continue xchg ax, Abx+2 ;交換位置 mov

5、 Abx, ax continue: add bx, 2 loop loop2 mov cx, di loop loop1,2. 分支程序設(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 + y1 z2 = x2 + y2 z3 = x3 - y3 z4 = x4 - y4 z5 = x5 - y

6、5 z6 = x6 + y6 z7 = x7 - y7 z8 = x8 - y8 z9 = x9 + y9 z10= x10 + y10,邏輯尺:0 0 1 1 0 1 1 1 0 0 1 減法 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,z10 logic_rule dw 00dch ;0000,0000,1101,1100 mov bx, 0 mov cx, 10 mov dx, logic_rule next: mo

7、v ax, xbx shr dx, 1 jc subtract add ax, ybx jmp short result ; 向前引用 subtract: sub ax, ybx result: 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 99 111 222 333,0 1

8、 2 3 4 5 6 7 8 9 10 11 12,(si)=0ah Cf=0,(si)=10h Cf=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è)元素,未找到退出,算法1,compare: cmp ax, bx+si je exit ja higher dec cx mov high_idx, cx jmp mid higher: inc cx mo

9、v low_idx, cx jmp mid no_match: stc exit: ,search: mov low_idx, 1 mov bx, di ;個(gè)數(shù) mov high_idx, bx mov bx, di mid: 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 99 111 222 333,0 1 2 3 4 5 6 7 8 9 10 11 12,(si)=0ah (di)=0ah

10、 Cf=0,(si)=2 (di)=10h Cf=1,折半算法2,算法2,idx_ok: shr si, 1 test si, 1 jz sub_idx inc si sub_idx: sub di, si jmp short compare higher: cmp si, 2 je no_match shr si, 1 jmp short even_idx all_done: mov si, di exit: ,search: mov si, di even_idx: test si, 1 jz add_idx inc si add_idx: add di, si compare: cmp

11、ax, di je all_done ja higher cmp si, 2 jne idx_ok no_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 dw routine8, cmp al, 0 ;AL為邏輯尺 je continue lea bx, branch_table L: shr al, 1 ;邏輯右移 j

12、nc add1 jmp word ptrbx ;段內(nèi)間接轉(zhuǎn)移 add1: add bx, type branch_table ;add bx,2 jmp L continue: 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 L continue: routine1: routine2: ,(基址變址尋址), cmp al, 0 je continue lea bx, branch_table mov si, 7 * t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論