![第5章 匯編語言程序設(shè)計_第1頁](http://file4.renrendoc.com/view/666e05554d6b6d15a2cf8b9253b52963/666e05554d6b6d15a2cf8b9253b529631.gif)
![第5章 匯編語言程序設(shè)計_第2頁](http://file4.renrendoc.com/view/666e05554d6b6d15a2cf8b9253b52963/666e05554d6b6d15a2cf8b9253b529632.gif)
![第5章 匯編語言程序設(shè)計_第3頁](http://file4.renrendoc.com/view/666e05554d6b6d15a2cf8b9253b52963/666e05554d6b6d15a2cf8b9253b529633.gif)
![第5章 匯編語言程序設(shè)計_第4頁](http://file4.renrendoc.com/view/666e05554d6b6d15a2cf8b9253b52963/666e05554d6b6d15a2cf8b9253b529634.gif)
![第5章 匯編語言程序設(shè)計_第5頁](http://file4.renrendoc.com/view/666e05554d6b6d15a2cf8b9253b52963/666e05554d6b6d15a2cf8b9253b529635.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第5章匯編語言程序設(shè)計5.1概述5.2順序程序設(shè)計5.3分支程序設(shè)計5.4循環(huán)程序設(shè)計5.5子程序設(shè)計開始5.1概述5.1.1匯編語言程序設(shè)計的一般步驟5.1.2流程圖返回本章首頁5.1.1匯編語言程序設(shè)計的一般步驟匯編語言程序設(shè)計一般有以下幾個步驟:1.分析問題,確定算法2.繪制流程圖3.根據(jù)流程圖編制程序4.調(diào)試程序返回本節(jié)5.1.2流程圖1.流程圖的概念 流程圖是由特定的幾何圖形、指向線、文字說明來表示數(shù)據(jù)處理的步驟,形象描述邏輯控制結(jié)構(gòu)以及數(shù)據(jù)流程的示意圖。流程圖具有簡潔、明了、直觀的特點。2.流程圖符號表示(1)起止框:表示程序的開始和結(jié)束。起止框(2)判斷框
(3)處理框
(4)調(diào)用框
(5)指向線
返回本節(jié)5.2順序程序設(shè)計
一個程序通常都是從外部讀取一些數(shù)據(jù),然后進行處理,再把處理的結(jié)果送到輸出設(shè)備上.對于一些簡單的數(shù)據(jù)處理,只要把完成處理的各個步驟用匯編語言描述清楚,讓計算機按指令編寫的次序從頭到尾逐條執(zhí)行即可,這樣的程序結(jié)構(gòu)稱為順序結(jié)構(gòu)。[例1]已知X和Y是數(shù)據(jù)段中的兩個無符號字節(jié)單元,用程序完成Z=(X2+Y2)/2的計算。
DATASEGMENTXDB15YDB34ZDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XMULAL;計算X2MOVBX,AX
MOVAL,YMULAL;計算Y2ADDAX,BX;計算X2+Y2MOVCL,2;計算(X2+Y2)/2DIVCLMOVZ,ALMOVAH,4CHINT21H;返回DOSCODEENDSENDSTART
[例2]從鍵盤讀入兩個一位數(shù)(假設(shè)按下的肯定是數(shù)字鍵),編程序顯示它們的乘積。CODESEGMENTASSUMECS:CODESTART:MOVAH,1INT21HMOVBL,ALMOVAH,1INT21HSUBAL,30HSUBBL,30HMULBL;積在AX中MOVBL,10DIVBLADDAX,3030H
MOVBX,AXMOVDL,BLMOVAH,2INT21H;輸出十位數(shù)MOVDL,BHMOVAH,2INT21H;輸出個位數(shù)MOVAH,4CHINT21H;返回DOSCODEENDSENDSTART
5.3分支程序設(shè)計
計算機可根據(jù)不同條件進行邏輯判斷,通過轉(zhuǎn)移指令選擇不同的程序流向。轉(zhuǎn)移指令分為無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令。在設(shè)計分支程序前,請復(fù)習(xí)第3章有關(guān)轉(zhuǎn)移指令的內(nèi)容,尤其是條件轉(zhuǎn)移指令。能否正確使用這些轉(zhuǎn)移指令,是能否編寫好分支程序的關(guān)鍵。
分支程序設(shè)計要領(lǐng)如下:(1)首先要根據(jù)處理的問題用比較、測試等方式,或者用算術(shù)運算、邏輯運算,使標(biāo)志寄存器產(chǎn)生相應(yīng)的標(biāo)志位。(2)根據(jù)轉(zhuǎn)移條件選擇轉(zhuǎn)移指令。通常一條條件轉(zhuǎn)移指令只能產(chǎn)生兩路分支,因此要產(chǎn)生n路分支需n-1條條件轉(zhuǎn)移指令。(3)各分支之間不能產(chǎn)生干擾,如果產(chǎn)生干擾,可用無條件轉(zhuǎn)移語句JMP進行隔離。
1x>0
[例5-7]符號函數(shù)y=0x=0其中x為8位帶符號數(shù)。
-1x<0分析:設(shè)x的值(x)放在數(shù)據(jù)段XX單元中,Y的值(y)放在YY單元中。寄存器選用AL存放中間結(jié)果。程序流程圖見右圖。
DATASEGMENTXXDB45HYYDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XXCMPAl,0;置標(biāo)志位JGEBIGR;X≥O轉(zhuǎn)移MOVAl,-1;-1送YY
JMPJUS2;隔離BIGR:JGJUS1;X>0轉(zhuǎn)移MOVAL,0;0送YY
JMPJUS2;隔離JUSl:MOVAL,1;1送YYJUS2:MOVYY,ALMOVAH,4CHINT21HCODEENDSENDSTART5.4循環(huán)程序設(shè)計
一個循環(huán)程序通常由四部分組成:
1)初始化部分為循環(huán)操作做準(zhǔn)備工作,建立循環(huán)的初始值,如初始化地址指針、計數(shù)器及給變量賦初值等。
2)循環(huán)體循環(huán)體為循環(huán)的工作部分,用于完成各種具體操作,它可以是一個順序結(jié)構(gòu)、分支結(jié)構(gòu)或又一個循環(huán)結(jié)構(gòu)。若循環(huán)體內(nèi)又包含有循環(huán)程序,則稱為多重循環(huán)。
3)修改部分為執(zhí)行循環(huán)而修改某些參數(shù),如地址指針、計數(shù)器或某些變量。
4)控制部分判斷循環(huán)是否結(jié)束,通常判斷循環(huán)是否結(jié)束主要有兩種方法:(1)計數(shù)器控制循環(huán),這種方式一般用于循環(huán)次數(shù)已知的情況;(2)條件控制循環(huán),用于循環(huán)次數(shù)未知根據(jù)條件決定是否結(jié)束。循環(huán)程序的常見結(jié)構(gòu)形式如圖5.5(a)、(b)所示。圖5.5循環(huán)程序結(jié)構(gòu)圖
20
[例4]計算y=∑Ai
i=l設(shè)Al,A2,…,A20是一組無符號16位二進制數(shù)。分析:定義數(shù)組名TABL存放A1,A2,…,A20,和存放于單元YY中。中間結(jié)果存于寄存器AX中,BX寄存器為地址指針,CX寄存器作計數(shù)器。程序如右:
DATASEGMENTTABLDWA1,A2,…,A20YYDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,0MOVBX,0MOVCX,20;初始化LOP:ADDAX,TABL[BX];循環(huán)體ADDBX,2;修正LOOPLOP;控制部分MOVYY,AXMOVAH,4CHINT21HCODEENDSENDSTART[例5]現(xiàn)將以AREA1為首地址的100個字節(jié)數(shù)據(jù)搬移到以AREA2為首地址的內(nèi)存中去。DATASEGMENTAREA1DB100DUP(11H)AREA2DB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,0MOVDI,0MOVCX,100AGAIN:MOVAL,AREA1[SI]MOVAREA2[DI],AL
INCSIINCDILOOPAGAINMOVAH,4CHINT21HCODEENDSENDSTART5.5子程序設(shè)計引例:編程實現(xiàn)分四行顯示任意輸入的四個字符start:movah,01hint21h
回車換行movah,01hint21h
回車換行movah,01hint21h
回車換行movah,01hint21h回車換行相關(guān)程序段:movdl,0dhmovah,2int21hmovdl,0ahmovah,2int21h
程序設(shè)計過程中常常把多次引用的相同程序段編成一個獨立的程序段,當(dāng)需要執(zhí)行這個程序段時,可以用調(diào)用指令調(diào)用它。具有這種獨立功能的程序段稱為過程或子程序。適合編成子程序的程序有以下兩大類:
(1)程序需要反復(fù)使用,這類程序編寫成子程序可避免重復(fù)編寫程序,并節(jié)省大量存儲空間。
(2)程序具有通用性,這類程序大家都要用到,如鍵盤管理程序、磁盤讀寫程序、標(biāo)準(zhǔn)函數(shù)程序等。編成子程序后便于用戶共享。為了使用戶使用方便,子程序文件由子程序說明和子程序本身兩部分構(gòu)成。
1.過程定義偽指令
1)子程序說明部分
●子程序的名稱;●子程序的功能;●使用的寄存器和存儲單元;●子程序的人口、出口參數(shù)。下面是一個子程序說明部分的例子:;子程序DTOB;將兩位十進制數(shù)(BCD碼)轉(zhuǎn)換成二進制數(shù);寄存器BX傳遞參數(shù);入口參數(shù):AL寄存器存放十進制數(shù);出口參數(shù):CL寄存器存放轉(zhuǎn)換后的二進制數(shù)
2)子程序程序部分格式:子程序名PROC┊
RET┊子程序名ENDP
子程序從PROC語句開始,以ENDP語句結(jié)束,程序中至少應(yīng)當(dāng)包含一條RET語句用以返回主程序。
2.子程序使用中的問題1)子程序的調(diào)用和返回
CALL子程序名2)調(diào)用子程序時寄存器及所用存儲單元內(nèi)容的保護如果子程序中要用到某些寄存器或存儲單元時,為了不破壞原有的信息,要將寄存器或存儲單元的原有內(nèi)容壓棧保護,或存入子程序不用的寄存器或存儲單元中。
保護可以放在主程序中,也可以放在子程序中,但放在子程序中較好。例如:
SUBPPROCNEAR
PUSHAXPUSHBX┊
POPBXPOPAX
RETSUBPENDP
3.子程序調(diào)用時參數(shù)的傳遞方法調(diào)用程序在調(diào)用子程序時需要傳送一些參數(shù)給子程序,這些參數(shù)是子程序運算中所需要的原始數(shù)據(jù),子程序運行后要將處理結(jié)果返回調(diào)用程序。原始數(shù)據(jù)和處理結(jié)果的傳遞可以是數(shù)據(jù),也可以是地址,統(tǒng)稱為參數(shù)傳遞。
參數(shù)傳遞必須事先約定,子程序根據(jù)約定從寄存器或存儲單元取原始數(shù)據(jù)(稱入口參數(shù));進行處理后將處理結(jié)果(稱出口參數(shù))送到約定的寄存器或存儲單元,返回到調(diào)用程序。參數(shù)傳遞一般有下面三種方法。(1)用寄存器傳遞:適用于參數(shù)傳遞較少、傳遞速度快的情況:(2)用堆棧傳送:適用于參數(shù)傳遞較多、存在嵌套或遞歸的情況:(3)用存儲單元傳送:適用于參數(shù)傳遞較多時,但傳遞速度較慢。(1)用寄存器傳遞參數(shù)
采用寄存器傳遞參數(shù)是把參數(shù)存于約定的寄存器中,這種方法簡單易行,經(jīng)常采用。[例6]設(shè)ARRAY是10個元素的數(shù)組,每個元素是字節(jié)數(shù)據(jù)。試用子程序計算數(shù)組元素的校驗和,并將結(jié)果存入變量RESULT中。所謂“校驗和”,是指不記進位的累加,常用于檢查信息的正確性。分析:子程序完成元素求和,主程序需要向它提供入口參數(shù),使得子程序能夠訪問數(shù)組元素。子程序需要回送求和結(jié)果這個出口參數(shù)。在本例中采用寄存器傳遞參數(shù)。DATASEGMENTARRAYDB01H,22H,33H,14H,……,90HRESULTDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETARRAYMOVCX,10MOVAL,0
CALLCHECKSUMAMOVRESULT,ALMOVAH,4CHINT21HCODEENDSENDSTART;計算字節(jié)校驗和的通用過程;入口參數(shù):DS:BX=數(shù)組的段地址:偏移地址CX=元素個數(shù);出口參數(shù):AL=校驗和;說明:除AX/BX/CX外,不影響其他寄存器CHECKSUMAPROCSUMA:ADDAL,[BX]INCBXLOOPSUMARETCHECKSUMAENDP(2)用存儲單元傳送參數(shù)主程序與被調(diào)用過程直接用同一個變量名訪問傳遞的參數(shù),就是利用變量傳遞參數(shù)。如果調(diào)用程序與被調(diào)用程序在同一個源程序文件中,只要設(shè)置好數(shù)據(jù)段寄存器DS,則子程序與主程序訪問變量的形式相同,也就是他們共享數(shù)據(jù)段的變量。[例7]針對例6的問題,現(xiàn)在用變量傳遞參數(shù)、計算數(shù)組元素的和。DATASEGMENTARRAYDB01H,22H,33H,14H,……,90H
COUNTEQU$-ARRAYRESULTDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXCALLCHECKSUMA
MOVAH,4CHINT21HCODEENDSENDSTART;計算字節(jié)校驗和的通用過程;入口參數(shù):ARRAY=數(shù)組名,COUNT=元素個數(shù);出口參數(shù):RESULT=校驗和存放的變量名CHECKSUMAPROC
PUSHAXPUSHBXPUSHCXMOVBX,OFFSETARRAYMOVCX,10XORAL,ALSUMA:ADDAL,[BX]INCBXLOOPSUMAMOVRESULT,AL
POPCXPOPBXPOPAXRETCHECKSUMAENDPcodesegmentassumecs:codestart:movah,01hint21h
calldpcrlfmovah,01hint21h
calldpcrlfmovah,01hint21h
calldpcrlfmovah,01hint21h
movah,4chint21hdpcrlfproc
pushaxpushdxmovdl,0dhmovah,2int21hmovdl,0ahmovah,2int21h
popdxpopax
retdpcrlfendpcodeendsendstartDATASEGMENT
STRDB10DUP(‘1ASz#’)
DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX
MOVCX,50MOVSI,0MOVDL,0CMP1:CMPDL,STR[SI]JAEOUT1
MOVDL,STR[SI]OUT1:INCSILOOPCMP1MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART習(xí)題22答案(1)DATASEGMENT
STRDB10DUP(‘1ASz#’)
DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX
MOVCX,49MOVSI,1MOVDL,STRCMP1:CMPDL,STR[SI]JAEOUT1
MOVDL,STR[SI]OUT1:INCSILOOPCMP1MOVAH,2INT21HMOVAH,4CHINT21HCODEENDSENDSTART習(xí)題22答案(2)24
DATASEGMENT
DATDB45H,13H,55HDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,DATMOVBL,DAT+1MOVCL,DAT+2……………MOVAH,4CHINT21HCODEENDSENDSTARTMOVAL,DATMOVBL,DAT+1MOVCL,DAT+2
CMPAL,BLJAA1XCHGAL,BLA1:CMPAL,CLJAA2XCHGAL,CLA2:MOVDAT,AL
CMPBL,CLJAA3XCHGBL,CLA3:MOVDAT+1,BLMOVDAT+2,CL習(xí)題29答案DATASEGMENTNUMDB‘1ABaf….’DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX
MOVCX,100MOVBX,0LOOP1:CMPNUM[BX],39HJAA2
SUBNUM[BX],30HJMPOUT1A2:CMPNUM[BX],5AHJAA3SUBNUM[BX],37HJMPOUT1A3:SUBNUM[BX],57HOUT1:INCBXLOOPLOOP1MOVAH,4CHINT21HCODEENDSENDSTART習(xí)題31答案DATASEGMENTSTRDB‘1ASAB….’
NEQU$-STRRESULTDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,N-1MOVSI,0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年調(diào)脂抗動脈粥樣硬化藥項目提案報告模范
- 2025年輸注延長管項目申請報告模板
- 2025年衛(wèi)生巾供應(yīng)合同格式
- 2025年加工服務(wù)協(xié)作協(xié)議模板
- 2025年合作研發(fā)新范本協(xié)議書
- 2025年個人房產(chǎn)購買協(xié)議標(biāo)準(zhǔn)文本
- 2025年農(nóng)村住宅用地互易協(xié)議標(biāo)準(zhǔn)化
- 2025年電氣安裝工程策劃合作框架協(xié)議范本提供
- 2025年修理廠技術(shù)師傅指導(dǎo)學(xué)徒合同
- 2025年信用卡消費抵押貸款協(xié)議書
- 租房協(xié)議書 租房協(xié)議書范本
- 《電力工程電纜設(shè)計規(guī)范》高壓、超高壓電力電纜及 制造、使用和運行情況
- 內(nèi)蒙古呼和浩特市2023年中考?xì)v史試題(附真題答案)
- 急診科護理帶教經(jīng)驗
- 《預(yù)防脊柱側(cè)彎》課件
- 教師工作職責(zé)培訓(xùn)非暴力溝通與沖突解決
- 學(xué)校保密教育培訓(xùn)課件
- 關(guān)于教師誦讀技能培訓(xùn)課件
- 英語中考寫作課件(33張PPT)
- 化學(xué)品使用人員培訓(xùn)課程
- 銷售人員薪酬設(shè)計實例 薪酬制度設(shè)計 薪酬設(shè)計方案 設(shè)計案例全套
評論
0/150
提交評論