




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第5章 循環(huán)與分支程序設(shè)計(jì)Assembly Language Programming編制匯編語言程序的步驟:編制匯編語言程序的步驟:(1) 分析題意,確定算法分析題意,確定算法(2) 根據(jù)算法畫出程序框圖根據(jù)算法畫出程序框圖(3) 根據(jù)框圖編寫程序根據(jù)框圖編寫程序(4) 上機(jī)調(diào)試程序(上機(jī)調(diào)試程序(自己完成自己完成)3 順序結(jié)構(gòu)順序結(jié)構(gòu) 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu) 分支結(jié)構(gòu)分支結(jié)構(gòu) 子程序結(jié)構(gòu)子程序結(jié)構(gòu) 復(fù)合結(jié)構(gòu):復(fù)合結(jié)構(gòu):多種程序結(jié)構(gòu)的組合多種程序結(jié)構(gòu)的組合程序結(jié)構(gòu):程序結(jié)構(gòu):順序程序完全按指令書寫的前后順序執(zhí)行每一條指令,是最基本、最常見的程序結(jié)構(gòu)例例1 1Data Data segmentsegm
2、ent X X dwdw 33 33 Y Y dwdw 47 47 Z Z dwdw 65 65 W W dwdw ? ?Data Data endsendsCodeCode segmentsegment assume assume cs:codecs:codeassume assume ds:datads:dataBeginBegin:mov:mov ax,X ax,X add ax,Y add ax,Y adcadc ax,Z ax,Z movmov W,ax W,ax movmov ah,4ch ah,4ch intint 21h 21hCodeCode endsends end end
3、 BeginBegin順序程序設(shè)計(jì)順序程序設(shè)計(jì)例例2 2qvarqvar dqdq 1234567887654321h 1234567887654321hmovmov al,byte al,byte ptrptr qvar6 qvar6movmov byte byte ptrptr qvar7,al qvar7,almovmov al,byte al,byte ptrptr qvar5 qvar5movmov byte byte ptrptr qvar6,al qvar6,almovmov al,byte al,byte ptrptr qvar4 qvar4movmov byte byte p
4、trptr qvar5,al qvar5,almovmov al,byte al,byte ptrptr qvar3 qvar3movmov byte byte ptrptr qvar4,al qvar4,almovmov al,byte al,byte ptrptr qvar2 qvar2movmov byte byte ptrptr qvar3,al qvar3,almovmov al,byte al,byte ptrptr qvar1 qvar1movmov byte byte ptrptr qvar2,al qvar2,almovmov al,byte al,byte ptrptr q
5、var0 qvar0movmov byte byte ptrptr qvar1,al qvar1,almovmov byte byte ptrptr qvar0,0 qvar0,012 34 56 78 87 65 43 21h34 56 78 87 65 43 21 00h移位后圖示順序程序設(shè)計(jì)順序程序設(shè)計(jì)例例2 64位數(shù)據(jù)左移位數(shù)據(jù)左移8位的圖示位的圖示214365877856341200qvar7qvar6qvar5qvar4qvar3qvar2qvar1qvar07(1)邏輯尺控制)邏輯尺控制 (2)條件控制)條件控制(3)地址跳躍表)地址跳躍表 值與地址有對(duì)應(yīng)關(guān)系的表值與地址有對(duì)應(yīng)關(guān)
6、系的表case 1 case 2 case n?case 1 case 2 case 3 。5.1 分支程序設(shè)計(jì)分支程序設(shè)計(jì)IF-THEN-ELSE 結(jié)構(gòu)CASE 結(jié)構(gòu)8例例5.1 設(shè)有數(shù)組設(shè)有數(shù)組x(x1, , x10)和和y(y1, , y10),編編程計(jì)算程計(jì)算: z1 = x1 + y1 z2 = x2 + y2 z3 = x3 - y3 z4 = x4 - y4 z5 = x5 - y5 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 減
7、法減法 0 加法加法9x dw x1, x2, x3, x4, x5, x6, x7, x8, x9, x10y dw y1, y2, y3, y4, y5, y6, y7, y8, y9, y10z dw z1, z2, z3, z4, z5, z6, z7, z8, z9, z10logic_rule dw 00dch mov bx, 0mov cx, 10mov dx, logic_rule next: mov ax, xbxshr dx, 1jc subtractadd ax, ybxjmp short result ; 向前引用向前引用subtract: sub ax, ybx re
8、sult: mov zbx, axadd bx, 2loop next10例例5.2 根據(jù)根據(jù)AL寄存器中哪一位為寄存器中哪一位為1(從低位到高位)把程序(從低位到高位)把程序 轉(zhuǎn)移到轉(zhuǎn)移到8個(gè)不同的程序分支去個(gè)不同的程序分支去 。branch dw routine1 dw routine2 dw routine3 dw routine4 dw routine5 dw routine6 dw routine7 dw routine8 cmp al, 0 je continue lea bx, branchL: shr al, 1;邏輯右移邏輯右移 jnb add1;jnb=jnc jmp wo
9、rd ptr bx;段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移add1: add bx, type branch jmp Lcontinue: routine1: routine2: (寄存器間接尋址(寄存器間接尋址)11(基址變址尋址基址變址尋址) cmp al, 0 je continue lea bx, branch mov si, 7* type branch mov cx, 8L: shl al, 1; 邏輯左移邏輯左移 jnb sub1; jnb=jnc jmp word ptr bxsi; 段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移sub1: sub si, type branch loop Lcontinue:
10、routine1: routine2: 12(寄存器相對(duì)尋址寄存器相對(duì)尋址) cmp al, 0 je continue mov si, 0 L: shr al, 1; 邏輯右移邏輯右移 jnb add1; jnb=jnc jmp branch si ; 段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移add1: add si, type branch jmp Lcontinue: routine1: routine2: data segmentdata segment array array dwdw 1212,11,22,33,44,55,66,11,22,33,44,55,66, 77,88,99,111,22
11、2,333 77,88,99,111,222,333 number number dwdw 55 55 low_idxlow_idx dwdw ? ? high_idxhigh_idx dwdw ? ?data endsdata ends例:折半查找算法例:折半查找算法 lea lea didi, array, array movmov ax, number ax, number cmpcmp ax, di+2 ax, di+2 ; (ax); (ax)與第一個(gè)元素比較與第一個(gè)元素比較 jaja chk_lastchk_last lea lea sisi, di+2, di+2 jeje ex
12、it exit ; (ax); (ax)第一個(gè)元素第一個(gè)元素, ,找到退出找到退出 stcstc jmpjmp exit exit ; (ax); (ax); (ax)最后一個(gè)元素最后一個(gè)元素, ,未找到退未找到退出出算法算法1 1compare:compare: cmpcmp ax, ax, bx+sibx+si jeje exit exit jaja higher higher decdec cxcx movmov high_idxhigh_idx, , cxcx jmpjmp mid midhigher:higher: inc inc cxcx movmov low_idxlow_idx
13、, , cxcx jmpjmp mid midno_match:no_match: stcstcexit:exit: search:search: movmov low_idxlow_idx, 1, 1 movmov bxbx, , didi movmov high_idxhigh_idx, , bxbx movmov bxbx, , didimid:mid: movmov cxcx, , low_idxlow_idx movmov dxdx, , high_idxhigh_idx cmpcmp cxcx, , dxdx jaja no_match no_match add add cxcx,
14、 , dxdx shrshr cxcx, 1, 1 movmov sisi, , cxcx shlshl sisi, 1, 1 1212 11 11 22 22 33 33 44 44 55 55 66 66 77 77 88 88 99 99111111222222333333 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9101011111212(ax)=55low_idxlow_idx 1 1 1 1 4 4 5 5 high_idxhigh_idx 12125 55 55 5( (sisi)=0ah)=0ahCfCf=0=0(ax)=90low_idxl
15、ow_idx 1 1 7 7 7 7 8 8 9 9 high_idxhigh_idx 121212128 88 88 8( (sisi)=10h)=10hCfCf=1=1算法算法2 2idx_okidx_ok: : shrshr sisi, 1, 1 test test sisi, 1, 1 jzjz sub_idxsub_idx inc inc sisisub_idxsub_idx: : sub sub didi, , sisi jmpjmp short compare short comparehigher:higher: cmpcmp sisi, 2, 2 jeje no_match
16、no_match shrshr sisi, 1, 1 jmpjmp short short even_idxeven_idxall_done:all_done: movmov sisi, , didiexit:exit: search:search: movmov sisi, , didi even_idxeven_idx: : test test sisi, 1, 1 jzjz add_idxadd_idx inc inc sisiadd_idxadd_idx: : add add didi, , sisicompare:compare: cmpcmp ax, ax, didi jeje a
17、ll_done all_done jaja higher higher cmpcmp sisi, 2, 2 jnejne idx_okidx_okno_match:no_match: stcstc jmpjmp exit exit 1212 11 11 22 22 33 33 44 44 55 55 66 66 77 77 88 88 99 99111111222222333333 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9101011111212(ax)=55(ax)=55 didi 12 12 6 6 10 10sisi 12126 64 4( (sis
18、i)=0ah)=0ah( (didi)=0ah)=0ahCfCf=0=0(ax)=90(ax)=90 didi 12 12 18 18 14 14 16 16 sisi 12126 64 42 2( (sisi)=2)=2( (didi)=10h)=10hCfCf=1=119(1)DO-WHILE結(jié)構(gòu)結(jié)構(gòu) (2)DO-UNTIL結(jié)構(gòu)結(jié)構(gòu)控制條件控制條件初始化初始化循環(huán)體循環(huán)體YN控制條件控制條件初始化初始化循環(huán)體循環(huán)體YN設(shè)置循環(huán)的設(shè)置循環(huán)的初始狀態(tài)初始狀態(tài)循環(huán)的工作部分循環(huán)的工作部分及修改部分及修改部分計(jì)數(shù)控制計(jì)數(shù)控制特征值控制特征值控制地址邊界控制地址邊界控制5.2 循環(huán)程序設(shè)計(jì)循環(huán)程序設(shè)
19、計(jì) 初始化初始化:設(shè)置循環(huán)的初始狀態(tài):設(shè)置循環(huán)的初始狀態(tài) 循環(huán)體循環(huán)體:循環(huán)的工作部分及修改部分:循環(huán)的工作部分及修改部分 控制條件控制條件:計(jì)數(shù)控制:計(jì)數(shù)控制 特征值控制特征值控制 地址邊界控制地址邊界控制21例例5.1 把把BX中的二進(jìn)制數(shù)以十六進(jìn)制的形式顯示在屏幕上。中的二進(jìn)制數(shù)以十六進(jìn)制的形式顯示在屏幕上。 BX123422 mov ch, 4Label: mov cl, 4 rol bx, cl mov al, bl and al, 0fh add al, 30h ;0-9 ASCII 30H-39H cmp al, 3ah jl print add al, 7h ;A-F ASCI
20、I 41H-46Hprint: mov dl, al mov ah, 2 int 21h dec ch jnz Label movmov bxbx, 0, 0newcharnewchar: : movmov ah, 1 ah, 1 intint 21h 21h sub sub alal, 30h , 30h jljl exit exit ; ; 0 9 9 退出退出 cbwcbw xchgxchg ax, ax, bxbx movmov cxcx, 10, 10 mulmul cxcx xchgxchg ax, ax, bxbx add add bxbx, ax, ax jmpjmp newc
21、harnewcharexit: exit: 例:從鍵盤接收例:從鍵盤接收十進(jìn)制十進(jìn)制數(shù)并存入數(shù)并存入 BXBX movmov bxbx, 0, 0newcharnewchar: : movmov ah, 1 ah, 1 intint 21h 21h sub al, 30h sub al, 30h jljl exit exit ; ; 0 0 退出退出 cmpcmp al, 10 al, 10 jljl add_toadd_to sub al, 27h sub al, 27h ; af; af cmpcmp al, 0ah al, 0ah jljl exit exit ; ; a f f 退出退
22、出add_toadd_to: : movmov clcl, 4, 4 shlshl bxbx, , clcl movmov ah, 0 ah, 0 add add bxbx, ax, ax jmpjmp newcharnewcharexit: exit: 例:從鍵盤接收例:從鍵盤接收十六進(jìn)制十六進(jìn)制數(shù)并存入數(shù)并存入 BXBX.model small.model small.stack 256.stack 256.data.data sum sum dwdw ? ?.code.codebegin:begin: movmov ax,data ax,data movmov ds,axds,ax xo
23、rxor ax,ax ax,ax; ;被加數(shù)被加數(shù)AXAX清清0 0movmov cx, cx,100100 again: again:add add ax,cxax,cx; ;looploop again againmovmov sum,ax sum,ax; ;將累加和送入指定單元將累加和送入指定單元movmov ah,4ch ah,4ch intint 21h 21hend beginend begin例5.3 計(jì)算1100數(shù)字之和循環(huán)次數(shù)固定Begin:Begin:movmov bx,offsetbx,offset string stringagain:again:movmov al,b
24、xal,bx ; ;取一個(gè)字符取一個(gè)字符or al,alor al,al; ;是否為結(jié)尾符是否為結(jié)尾符0 0jzjz done done; ;是,退出循環(huán)是,退出循環(huán)cmpcmp al,A al,A; ;是否為大寫是否為大寫A AZ Zjbjb next nextcmpcmp al,Z al,Zjaja next nextor al,20hor al,20h; ;是,轉(zhuǎn)換為小寫字母(使是,轉(zhuǎn)換為小寫字母(使D5=1D5=1)movmov bx,albx,al; ;仍保存在原位置仍保存在原位置next:next:inc inc bxbxjmpjmp again again; ;繼續(xù)循環(huán)繼續(xù)循環(huán)d
25、one:done:movmov ah,4ch ah,4ch intint 21h 21h例5.5 大寫字母改為小寫字母循環(huán)次數(shù)不定,利用標(biāo)志退出。操作27例例5.4 將正數(shù)將正數(shù)n插入一個(gè)已整序的字?jǐn)?shù)組的正確位置。插入一個(gè)已整序的字?jǐn)?shù)組的正確位置。 x dw ? array_head dw 3,5,15,23,37,49,52,65,78,99 array_end dw 105 n dw 32 mov ax, n mov array_head-2, 0ffffh mov si, 0compare: cmp array_endsi, ax jle insert mov bx, array_end
26、si mov array_endsi+2, bx sub si, 2 jmp short compareinsert: mov array_endsi+2, ax -1 3 5 49 15 52 23 37 105 99 78 65 32xn28 a dw 100,30,78,99,15,-1,66,54,189,256 mov cx, 10 dec cxloop1: mov di, cx mov bx, 0loop2: mov ax, abx cmp ax, abx+2 jge continue xchg ax, abx+2 mov abx, axcontinue: add bx, 2 lo
27、op loop2 mov cx, di loop loop1例例5.7 將首地址為將首地址為a的字?jǐn)?shù)組從大到小排序(起泡算法,多重循環(huán))的字?jǐn)?shù)組從大到小排序(起泡算法,多重循環(huán))“冒泡法”是一種排序算法,不是最優(yōu)的算法,但它易于理解和實(shí)現(xiàn)。冒泡法從第一個(gè)元素開始,依次對(duì)相鄰的兩個(gè)元素進(jìn)行比較,使前一個(gè)元素不大于后一個(gè)元素;將所有元素比較完之后,最大的元素排到了最后;然后,除掉最后一個(gè)元素之外的元素依上述方法再進(jìn)行比較,得到次大的元素排在后面;如此重復(fù),直至完成就實(shí)現(xiàn)元素從小到大的排序。這是一個(gè)雙重循環(huán)程序結(jié)構(gòu)。外循環(huán)由于循環(huán)次數(shù)已知,可用loop指令實(shí)現(xiàn);而內(nèi)循環(huán)次數(shù)每次外循環(huán)后減少一次,我們用DX表示。內(nèi)循環(huán)體比較兩個(gè)元素大小,又是一個(gè)分支結(jié)構(gòu)。冒 泡 法例:將首地址為例:將首地址為 a a 的字?jǐn)?shù)組從大到小排序的字?jǐn)?shù)組從大到小排序 (起泡排序算法,多重循環(huán)起泡排序算法,多重循環(huán))100100 30 30 78 78 99 99 15 15 -1 -1 66 66 45 45189189256256100100 78 78 99 99 30 30 15 15 66 66 45 45189189256256
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 股份制企業(yè)合同文書編寫規(guī)范
- 初中古詩(shī)詞山水畫的教學(xué)計(jì)劃
- 三農(nóng)產(chǎn)品產(chǎn)地保護(hù)與安全管理指南
- 交通運(yùn)輸智能交通系統(tǒng)介紹
- 存單質(zhì)押借款合同
- 常州消防工程合同
- 2025年吉林貨運(yùn)從業(yè)資格證模擬考試題及答案解析
- 2025年黃石貨運(yùn)從業(yè)資格模擬考試題
- 《Poems》作業(yè)設(shè)計(jì)方案
- 2023年高考真題全國(guó)乙卷物理試卷解析版
- 骨骼肌損傷的再生修復(fù)
- 全國(guó)職業(yè)院校技能大賽高職組(建筑信息模型建模與應(yīng)用賽項(xiàng))備賽試題庫(kù)(含答案)
- 07SG111-1 建筑結(jié)構(gòu)加固施工圖設(shè)計(jì)表示方法
- 《增廣賢文》全文及解釋(珍藏版)
- 中小學(xué)美術(shù)教學(xué)論
- 新編建筑裝飾設(shè)計(jì)收費(fèi)標(biāo)準(zhǔn)
- 托班藝術(shù)活動(dòng)《小小茶樹》教案
- 中國(guó)急性缺血性卒中診治指南(2023)解讀
- 2024年萊蕪職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案解析
- 《計(jì)算機(jī)網(wǎng)絡(luò)(第8版)》 課件 第5、6章 運(yùn)輸層、應(yīng)用層
- 2023年6月福建省高中學(xué)業(yè)水平合格考英語試卷真題(含答案詳解)
評(píng)論
0/150
提交評(píng)論