




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
§4
程序設(shè)計
匯編語言程序設(shè)計步驟:1.分析問題,確定算法
2.編制程序流程圖
3.編制程序
4.調(diào)試程序
一個源程序的基本格式如下:DATASEGMENT?DATAENDSEXTRASEGEMNT?
EXTRAENDSSTACK1SEGMENTPARASTACK?STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATAASSUMESS:STACK1,ES:EXTRA??????;存放數(shù)據(jù)項的數(shù)據(jù)段;存放數(shù)據(jù)項的附加段;堆棧段START:MOVAX,DATAMOVDS,AXMOVAX,EXTRAMOVES,AXMOVAH,4CHINT21HCODEENDSENDSTART??????(核心程序段);DD裝入段基址;ES裝入段基址;系統(tǒng)功能調(diào)用;返回操作系統(tǒng)(一)順序結(jié)構(gòu)程序例1編制程序,求下列公式中的Z值,并將結(jié)果存放到RESULT單元中。
=Z(X+Y)*8-X2
設(shè)X,Y的值分別存放在VARX,VARY單元中,運算結(jié)果不超過16位。解:(1)存儲單元RESULT用來存放結(jié)果,VARX和VARY放
X、Y的值。寄存器DX放中間運算結(jié)果,左移1位相當(dāng)于乘2,右移1位相當(dāng)于除2,所以可以用左移3位得到乘以8的結(jié)果。
(2)程序流程圖和程序如下:開始預(yù)置段寄存器DXXDXX+YDX右移得((X+Y)*8-X)/2RESULTDX結(jié)束DX左移3次(X+Y)*8DX(DX)-XDATASEGMENTVARXDW0006HVARYDW0007HRESULDW?DATAENDSSACK1SEGMENTPARASTACKDW100HDUP(?) SACK1ENDSCOSEGSEGMENTASSUMECS:COSEGASSUMEDS:DATAASSUMESS:STACK1START:MOVAX,DATAMOVDS,AXMOVDX,VARX;DXXADDDX,VARY;DXX+YMOVCL,3SALDX,CL;DX(X+Y)*8SUBDX,VARX;DX(X+Y)*8-XSARDX,1;DX((X+Y)*8-X)/2MOVRESULT,DXMOVAH,4CH;系統(tǒng)功能調(diào)用,返回操作系統(tǒng)
INT21HCOSEGENDSENDSTART
例:順序程序設(shè)計
設(shè):在內(nèi)存XX單元中存放數(shù)x(0<x<9的整數(shù)),查表求x的平方值,并將結(jié)果存入YY單元中。
DATASEGMENTTABDB0,1,4,9,16,25DB36,49,64,81XXDB2YYDB?DATAENDSTAB+00+11+24+981+A2+B4
CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAH,0MOVAL,XXMOVBX,OFFSETTABADDBX,AXMOVAL,[BX]MOVYY,ALMOVAH,4CHINT21HCODEENDSENDSTART}XLAT(二)、分支程序條件轉(zhuǎn)移:JX目標(biāo)用于程序需要進行分別處理的情況。主要使用轉(zhuǎn)移指令。轉(zhuǎn)移指令分為無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令。無條件轉(zhuǎn)移指令:JMP目標(biāo)在進行分支程序設(shè)計時,通常用比較、測試,或算術(shù)運算、邏輯運算影響標(biāo)志位,然后選擇轉(zhuǎn)移指令。分支程序結(jié)構(gòu)開始條件?A塊存結(jié)果結(jié)束成立不成立初始化開始條件?A塊B塊存結(jié)果結(jié)束成立不成立初始化例:分支程序設(shè)計
y=1x>00x=0-1x<0設(shè):x為8位有符號數(shù)開始預(yù)置段RALXAL>0AL>0AL-1AL0AL1NYNYYAL結(jié)束DATASEGMENTXDBxYDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,X
CMPAL,0
;x-0建標(biāo)志位
JGEBIGD
;x0轉(zhuǎn)移
MOVAL,-1;x<0
JMPJUS2BIGD:JGJUS1
;x>0轉(zhuǎn)移
MOVAL,0;x=0
JMPJUS2JUS1:MOVAL,1;x>0
JUS2:MOVY,AL
MOVAH,4CHINT21HCODEENDSENDSTART入口初始化部分循環(huán)體修改部分結(jié)束?出口YN(A).循環(huán)的基本結(jié)構(gòu)先執(zhí)行,后判斷結(jié)構(gòu)設(shè):循環(huán)次數(shù)為N正計數(shù)法:倒計數(shù)法:MOVCX,NMOVCX,0L:L:
DECCXINCCXJNZLCMPCX,NJNZL…………三、循環(huán)程序結(jié)構(gòu)入口初始化部分循環(huán)結(jié)束?循環(huán)體修改部分出口YN用于當(dāng)計數(shù)次數(shù)無法確定,但循環(huán)次數(shù)與某些條件有關(guān),并且條件可檢測時,可采用條件控制。
先判斷,后執(zhí)行結(jié)構(gòu)
循環(huán)控制指令LOOPLOOP標(biāo)號;(CX)-1CX,(CX)=0時轉(zhuǎn)標(biāo)號LOOPE/LOOPZ標(biāo)號;(CX)-1CX(CX)=0且ZF=1(相同)時轉(zhuǎn)標(biāo)號LOOPNZ/LOOPNE標(biāo)號;(CX)-1CX(CX)=0且ZF=0(不同)時轉(zhuǎn)標(biāo)號例如:MOVCX,10MOVCX,10
L1:……….L1:………
CMPAX,X
LOOPL1
LOOPEL1
}相同不同或全比較完ZF=0(CX)=0例1:
計算Y=
程序如下:DATASEGMENTTABLDWa1,a2,······,a20
YYDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA;
MOVDS,AXMOVAX,0LEABX,TABLMOVCX,20L0:ADDAX,[BX];循環(huán)體
INCBX;修改部分
INCBXLOOPL0;控制部分
MOVYY,AX
MOVAH,4CHINT21HCODEENDSENDSTART設(shè)a1,a2,···a20是一組無符號十六位二進制數(shù),并設(shè)其和不大于2個字節(jié)。定義數(shù)組名TABL存放a1~a20;和存放于單元YY中。中間結(jié)果存于寄存器AX中。BX寄存器為地址指針,CX寄存器作計數(shù)器。例2.編程統(tǒng)計數(shù)據(jù)塊中正數(shù)的個數(shù),并將其送RS單元中。解:數(shù)據(jù)塊定義為D1,RS單元存放正數(shù)的個數(shù),數(shù)據(jù)塊長度用COUNT表示。BX作地址指針,CX作計數(shù)器,DX記錄正數(shù)的個數(shù),程序流程圖如下所示:START預(yù)置段RBXD1DX0CXCOUNT[BX]>0?DXDX+1BXBX+1CXCX-1CX=0?RS(DX)ENDNYNYDATASEGMENTD1DB-1,-3,5,7,-9,···,-6RSDW?COUNTEQU$-D1DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETD1MOVCX,COUNTMOVDX,0MOVRS,DXMOVAH,4CHINT21HCODEENDSENDSTARTLOOPLOP1LOP1:MOVAL,[BX]CMPAL,0JLEJUSTIJUSTI:INCBXDECCXJNZLOP1INCDX例3:AX寄存器中有一個16位的二進制數(shù),編程統(tǒng)計其中值為1的位的個數(shù),并將結(jié)果存于CX中。STARTCX0AX=0?AX左移CF=0?CXCX+1ENDYNYN程序段如下:
MOVCX,0LOP:ANDAX,AX
;建標(biāo)志位
JZSTOP
;AX=0停機
SALAX,1JNCNODINCCXNOD:JMPLOPSTOP:MOVAH,4CHINT21H由于AX有可能為0,若AX=0則不必再往下作統(tǒng)計工作,因此可采用先判斷,后執(zhí)行結(jié)構(gòu)。流程圖如右:(B).循環(huán)控制方式1.計數(shù)控制用于計數(shù)次數(shù)已知的情況,可采用正計數(shù)或倒計數(shù)法。如例12.條件控制當(dāng)計數(shù)次數(shù)無法確定,但循環(huán)次數(shù)與某些條件有關(guān),并且條件可檢測時,可采用條件控制,例如檢測,比較或判斷等形式。例4.在一串字符串中查找某一關(guān)鍵字‘#’,若查到,記下存放該關(guān)鍵字單元的偏移地址,若找不到用-1作標(biāo)記。解:設(shè)串變量名STRING,關(guān)鍵字單元CHAR,關(guān)鍵字單元的偏移地址放FLAG單元。寄存器SI為字符串的地址指針,CX為字符串長度,AL用于放關(guān)鍵字‘#’。STARTSISTRING的EACX串長度
AL‘#’[SI]=AL?SI=SI+1CX-1=0?FLAG-1ENDFLAGSIYNYN還可用字符串指令實現(xiàn)(C)多重循環(huán)結(jié)構(gòu)
外層初始化內(nèi)層初始化循環(huán)體內(nèi)層循環(huán)參數(shù)修改控制內(nèi)層循環(huán)外層循環(huán)參數(shù)修改控制外層循環(huán)外層循環(huán)體序號數(shù)8516328412345例:A數(shù)組中有N個數(shù),將它們按從大到小的順序排列。冒泡排序法
從第一個數(shù)開始依次對相鄰的兩個數(shù)進行比較若順序正序,不交換兩數(shù)位置;若順序不正序,交換兩數(shù)位置。816328451632848532841685843216851234比較次序流程圖:STARTCXN—1DICXBX0AXA[BX]A[BX+2]A[BX]BXBX+2DIDI-1ENDAX>A[BX+2]?DI=0?CX-1=0?NYNYNY交換標(biāo)志=0NY交換標(biāo)志=1?交換標(biāo)志=1DATASEGMENTADW50DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,50DECCXLP1:MOVDI,CX;外循環(huán)
MOVBX,0LP2:MOVAX,A[BX];內(nèi)循環(huán)
CMPAX,A[BX+2]JGCONT
XCHGAX,A[BX+2]MOV[BX],AXCONT:ADDBX,2
DECDIJNZLP2
LOOPLP1MOVAH,4CHINT21HCODEENDSENDSTARTDATASEGMENTADWnDUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX
MOVCX,NDECCXLP1:MOVDI,CX;外循環(huán)
MOVBX,0
MOVDX,0;未交換標(biāo)志0LP2:MOVAX,A[BX];內(nèi)循環(huán)
CMPAX,A[BX+2]JGCONT
XCHGAX,A[BX+2]MOV[BX],AX
MOVDX,1;交換標(biāo)志1CONT:ADDBX,2
DECDIJNZLP2
CMPDX,0
JZL1LOOPLP1L1:MOVAH,4CHINT21HCODEENDSENDSTART
子程序設(shè)計中的問題:
子程序的調(diào)用和返回
子程序調(diào)用時參數(shù)的傳遞方法四、子程序結(jié)構(gòu)子程序名PROC[NEAR/FAR]
RET[n]子程序名ENDP……子程序的調(diào)用和返回CALL
子程序名
RET[n]斷點入口……….CALL
;斷點入棧、取子程序入口RET[n];斷點出棧,若帶有n,繼續(xù)彈出斷點以下的n個字節(jié)的數(shù)據(jù)。SPSPSP斷點CS斷點IP棧底CALL斷點IP斷點CSIPCSRET
子程序調(diào)用時參數(shù)的傳遞方法
調(diào)用程序被調(diào)用程序
參數(shù)傳遞:
(1)寄存器傳遞:參數(shù)較少(2)存儲單元傳遞:參數(shù)較多(3)堆棧傳遞:子程序嵌套或遞歸調(diào)用
數(shù)據(jù)結(jié)果子程序設(shè)計舉例:求十進制數(shù)的和
1.用寄存器
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程制圖補考試題及答案
- 高職語文月考試題及答案
- 高空搭設(shè)作業(yè)考試題及答案
- 行政費用預(yù)算管理工具長期財務(wù)計劃制定參考
- 專職柜員筆試題目及答案
- 高考誠信考試題及答案大全
- 高級稱職考試題及答案大全
- 農(nóng)行宿遷面試真題及答案
- 2025年山西自考語文試卷及答案
- 服務(wù)顧客滿意度承諾書(6篇)
- 懷化注意力培訓(xùn)課件
- 鄉(xiāng)鎮(zhèn)死因監(jiān)測管理制度
- ukey使用管理制度
- 《縹緗流彩》教學(xué)課件-2024-2025學(xué)年滬書畫版(五四學(xué)制)(2024)初中美術(shù)六年級上冊
- 2025年中國大唐集團置業(yè)有限公司招聘筆試沖刺題(帶答案解析)
- 《民營經(jīng)濟促進法》全文學(xué)習(xí)解讀
- 高速公路隧道工程項目施工組織設(shè)計
- 華為交付流程管理制度
- 初中數(shù)學(xué)基礎(chǔ)必刷題
- 康復(fù)醫(yī)院介紹課件教學(xué)
- 40篇英語短文搞定高考3500個單詞(全部含翻譯,重點解析)
評論
0/150
提交評論