




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第5章循環(huán)程序設(shè)計5.1簡單循環(huán)程序5.2多重循環(huán)程序5.1簡單循環(huán)程序在匯編語言中,實現(xiàn)循環(huán)的指令有兩種,一種是LOOP指令,它適用于循環(huán)次數(shù)已知的情況,用CX寄存器保存循環(huán)次數(shù);另一種是JMP指令,它根據(jù)當前的條件判斷可以跳轉(zhuǎn)到不同的地方繼續(xù)執(zhí)行程序,適用于根據(jù)循環(huán)條件執(zhí)行循環(huán)的情況。例5.1
判斷一個數(shù)是否為素數(shù)。在數(shù)據(jù)段中存有一個字數(shù)據(jù)m,判斷m是否是素數(shù)并輸出判斷的結(jié)果。題目分析:判定數(shù)m是否為素數(shù),用m除以i,i從2到m-1,如果所有余數(shù)都不為0,則m為素數(shù),若任何一步中的余數(shù)為0,都可以立即中止循環(huán),而斷定m不是素數(shù)。datasegmentmdw4mess1db'Itisaprime!',13,10,'$'mess2db'Itisnotaprime!',13,10,'$'dataendsstacksegmentdw100hstackendscodesegmentmainprocfarassumecs:code,ds:data,ss:stackstart:pushdssubax,axpushaxmovax,datamovds,axmovax,stackmovss,axmovcx,2decd:leasi,mmovax,ds:[si]cwddivcxcmpdx,0jzbreakinccxcmpcx,[si]jldecdyes:leadx,mess1jmpdispbreak:leadx,mess2disp:movah,09int21hexit:movax,4c00hint21hmainendpcodeendsendstart在匯編程序中,要注意,各個指令的默認條件。如本題中,指令divcx執(zhí)行之前,要先把數(shù)據(jù)m存入寄存器ax,因為DIVcx指令的執(zhí)行為:(dx,ax)/(cx),商→(ax),余數(shù)→(dx),所以,div指令執(zhí)行之前先進行符號擴展。同時注意,div指令執(zhí)行之后,ax寄存器的內(nèi)容不再是m了,而變成了除法得到的商,所以,下一次的循環(huán)體執(zhí)行時,不僅讓除數(shù)cx增加1,還要注意恢復ax的值,重新存入m的值。因此,循環(huán)體從decd:leasi,mmovax,ds:[si]cwddivcx開始,而不是僅僅從cwddivcx開始。例5.2在未排序的數(shù)組中查找并刪除某數(shù)。在附加段中存放一個未排序的字數(shù)組list,第一個字中存放數(shù)組長度。從鍵盤輸入一個數(shù)字,放在ax寄存器中,在數(shù)組list中查找是否存在該數(shù)字。如果存在,則把它從數(shù)組中刪除,否則,輸出未找到該數(shù)的信息題目分析:先從鍵盤輸入一個數(shù)字字符,轉(zhuǎn)化為數(shù)字存入ax中。然后,依次與數(shù)組list中的各個數(shù)字比較,查找是否存在該數(shù),如果存在,則把數(shù)組中后面的元素依次向左移動一個位置,實現(xiàn)刪除該數(shù)的目的,同時修改數(shù)組長度。若查找的數(shù)字正好位于數(shù)組末尾,則直接修改數(shù)組長度。查找的過程,利用比較指令即可;刪除的部分,利用循環(huán)指令把[di]←[di+2]。查找結(jié)束時di指針指向的就是要刪除的元素的位置,也即實現(xiàn)[di]←[di+2]的di初始值datasegmentlistdw10,2,34,0,1,56,90,32,-8,0,12dataendsstacksegmentdw100hstackendscodesegmentmainprocfarassumecs:code,es:data,ss:stackstart:pushdssubax,axpushaxmovax,datamoves,axmovds,axmovax,stackmovss,axmovah,01int21hsubal,30hcbwleadi,listcldpushdimovcx,es:[di]cmpdig:adddi,2cmpax,es:[di]jedeltloopcmpdigpopdijmpshortexitdelt:jcxzdec_cntnext:movbx,es:[di+2]moves:[di],bxadddi,2loopnextdec_cnt:popdidecwordptres:[di]exit:ret例5.3
在一個已經(jīng)排序的數(shù)組中插入一個數(shù)據(jù),使數(shù)組保持原有的排序順序。假定數(shù)組的首地址和末地址分別存放在arrhd和arrend中,數(shù)組元素均為正數(shù)。題目分析:數(shù)組的首末地址已知,所以可以確定數(shù)組的長度。本題要插入一個數(shù)據(jù)n,先確定插入位置si,然后把位于si右邊的數(shù)據(jù)向右移動一個位置,騰出插入位置,最后把n放置在si的位置即可關(guān)鍵是確定插入位置si,從數(shù)組的尾部向頭部查找,逐字取出元素值k與n比較,如果k>n,繼續(xù)向頭部查找,同時把si位置的元素向右移動一個位置,騰出位置等待插入數(shù)據(jù);否則,即k<=n,元素值k的下一個位置si+2就是插入位置,把數(shù)據(jù)n插入si+2位置就可以了。注意邊界情況。如果n大于所有元素,則直接插入arrend的下一個位置;如果n小于所有元素,則算法從尾部一直比較查找到首部,同時所有元素都向右移動了一個位置,所以把n插入arrhd的位置,關(guān)鍵是循環(huán)的結(jié)束條件,為了統(tǒng)一使用一個循環(huán)條件,可以在arrhd的左邊位置arrhd-2插入一個負數(shù)-1,這樣n一定大于-1,可以及時結(jié)束循環(huán)datasegmentarrhddw3,5,7,8,12,14,23,56arrenddw62ndw1dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdssubax,axpushaxmovax,datamovds,axmovax,nmovarrhd-2,0ffffhmovsi,0compare:cmparrend[si],axjleinsertmovbx,arrend[si]movarrend[si+2],bx
subsi,2jmpshortcompareinsert:movarrend[si+2],ax
exit:movax,4c00hint21hmainendpcodeendsendstart例5.4
計算數(shù)據(jù)Y中1的個數(shù)并存入存儲單元中題目分析:先測試數(shù)據(jù)本身是否為0,若為0,直接結(jié)束;若不為0,則先判斷最高位是否為1,若為1(sf=1),在計數(shù)器加1,若不為1(sf=0),則準備下一次測試:數(shù)據(jù)邏輯左移1位,把次高位左移到最高位,再判斷最高位是否為1datasegmentYdw1001011000110101Bcountdw?dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdssubax,axpushaxmovax,datamovds,ax
movax,ymovcx,0repeat:testax,0ffffhjzexitjnsshiftinccxshift:shlax,1jmprepeat例5.5
求n!,并把運算結(jié)果存入存儲單元
題目分析:n!=n*(n-1)*(n-2)**2*1。利用LOOP指令的特性,每執(zhí)行一次,計數(shù)器CX自動減少1,當CX值為0時停止,所以,初始值(CX)←n,(AX)=1,執(zhí)行循環(huán)體(DX,AX)←(AX)*(CX)datasegmentndw5resultdw?dataendsstacksegmentdw100hstackendscodesegmentmainprocfarassumecs:code,ds:data,ss:stackstart:pushdssubax,axpushaxmovax,datamovds,axmovax,stackmovss,axmovcx,nmovax,1cwdL1:mulcxloopL1movresult,axmovresult+2,dxexit:ret例5.6數(shù)據(jù)段中有一個字數(shù)組M,求數(shù)組中絕對值最大的元素,把絕對值最大的數(shù)存放在存儲單元max中,并把位置存入max+2存儲單元中。題目分析:由于絕對值都是非負數(shù),所以,先把最大值cx初始化為0。然后判斷各個元素的正負,對于正數(shù),直接與cx進行比較大??;對于負數(shù),先取相反數(shù),然后與cx進行大小比較。求得最大值后,再把當前的最大值的位置si-2存入存儲單元中datasegsegmentMdw0,2,-5,9,6,3,-18,-4,1,-7maxdw?,?datasegendsprognamsegmentmainprocfarassumecs:prognam,ds:datasegstart:pushdssubax,axpushaxmovax,datasegmovds,axmoval,11movcx,0leasi,Mnext:decaljzexitmovbl,[si]movbh,[si+1]testbh,80hjzBJnegbxBJ:addsi,2cmpcx,bxjnbnextxchgcx,bxpushsisubsi,2movdx,simov[max+2],dxpopsijmpnextexit:movmax,cxretmainendpprognamendsendstart5.2多重循環(huán)程序例5.7
冒泡法排序,把數(shù)組中的元素按照從小到大的順序排序。數(shù)組的長度存放在n單元中。題目分析:冒泡排序的思想,對相鄰的兩個數(shù)進行比較,把較小的元素向左移動,較大的元素向右移動。經(jīng)過第一趟的n-1次比較,最大的元素排到了最右邊。第二趟的比較,從第一個比較到n-1個,共比較n-2次。共進行n-1趟比較datasegmentadw2,34,0,1,56,90,0,-8,0,12ndw10dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdssubax,axpushaxmovax,datamovds,ax
movcx,ndeccxloop1:movdi,cxmovbx,0loop2:movax,a[bx]cmpax,a[bx+2]jlecontinuexchgax,a[bx+2]mova[bx],axcontinue:addbx,2looploop2movcx,dilooploop1exit:movax,4c00hint21hmainendpcodeendsendstart例5.8已知數(shù)據(jù)段中有兩個長度為8的字數(shù)組X和Y,其元素值分別為X1,X2,…,X10;Y1,Y2,…,Y10。變成實現(xiàn)如下計算并把結(jié)果存入數(shù)組ZZ1=X1+Y1Z2=X2+Y2Z3=X3-Y3Z4=X4-Y4Z5=X5-Y5Z6=X6+Y6Z7=X7-Y7Z8=X8-Y8Z9=X9+Y9Z10=X10+Y10題目分析:本題進行10次計算,可以用循環(huán)次數(shù)已知的循環(huán)指令loop實現(xiàn)。但是每次執(zhí)行的循環(huán)體有加減兩種運算,為了區(qū)別每次執(zhí)行加法還是減法運算,可
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 桶裝水合作合同
- 加油站場地租賃合同
- 股權(quán)轉(zhuǎn)讓合同擔保合同
- 建設(shè)工程合同款支付保證保險條款
- 材料運輸買賣合同
- 專業(yè)檔案管理與咨詢服務合同
- 聘任常年法律顧問合同
- 與供應商的合同評審流程指南
- 湖南人文科技學院《現(xiàn)代教育技術(shù)在中小學教學中的應用》2023-2024學年第二學期期末試卷
- 荊州學院《機能實驗學》2023-2024學年第二學期期末試卷
- 全廠接地裝置安裝施工方案(銅覆鋼、銅包鋼施工方案)
- 民事二審再審改判案例:訴訟過程與爭點剖析
- 腫瘤患者特殊醫(yī)學用途配方食品使用指南
- 幼兒看圖填數(shù)
- 酒店項目精裝修工程施工組織設(shè)計
- 小學生研學旅行展示ppt模板
- 《思想道德與法治》第一章
- 新概念英語第2冊課文word版
- 大學生職業(yè)生涯規(guī)劃(高職)PPT完整全套教學課件
- 微信小程序開發(fā)實戰(zhàn)(第2版)全套PPT完整教學課件
- 部編版語文四年級下冊全冊大單元整體作業(yè)設(shè)計
評論
0/150
提交評論