版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
§4
程序設(shè)計(jì)
匯編語言程序設(shè)計(jì)步驟:1.分析問題,確定算法
2.編制程序流程圖
3.編制程序
4.調(diào)試程序
一個(gè)源程序的基本格式如下:DATASEGMENT?DATAENDSEXTRASEGEMNT?
EXTRAENDSSTACK1SEGMENTPARASTACK?STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATAASSUMESS:STACK1,ES:EXTRA??????;存放數(shù)據(jù)項(xiàng)的數(shù)據(jù)段;存放數(shù)據(jù)項(xiàng)的附加段;堆棧段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單元中,運(yùn)算結(jié)果不超過16位。解:(1)存儲(chǔ)單元RESULT用來存放結(jié)果,VARX和VARY放
X、Y的值。寄存器DX放中間運(yùn)算結(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è)計(jì)
設(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)用于程序需要進(jìn)行分別處理的情況。主要使用轉(zhuǎn)移指令。轉(zhuǎn)移指令分為無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令。無條件轉(zhuǎn)移指令:JMP目標(biāo)在進(jìn)行分支程序設(shè)計(jì)時(shí),通常用比較、測(cè)試,或算術(shù)運(yùn)算、邏輯運(yùn)算影響標(biāo)志位,然后選擇轉(zhuǎn)移指令。分支程序結(jié)構(gòu)開始條件?A塊存結(jié)果結(jié)束成立不成立初始化開始條件?A塊B塊存結(jié)果結(jié)束成立不成立初始化例:分支程序設(shè)計(jì)
y=1x>00x=0-1x<0設(shè):x為8位有符號(hào)數(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正計(jì)數(shù)法:倒計(jì)數(shù)法:MOVCX,NMOVCX,0L:L:
DECCXINCCXJNZLCMPCX,NJNZL…………三、循環(huán)程序結(jié)構(gòu)入口初始化部分循環(huán)結(jié)束?循環(huán)體修改部分出口YN用于當(dāng)計(jì)數(shù)次數(shù)無法確定,但循環(huán)次數(shù)與某些條件有關(guān),并且條件可檢測(cè)時(shí),可采用條件控制。
先判斷,后執(zhí)行結(jié)構(gòu)
循環(huán)控制指令LOOPLOOP標(biāo)號(hào);(CX)-1CX,(CX)=0時(shí)轉(zhuǎn)標(biāo)號(hào)LOOPE/LOOPZ標(biāo)號(hào);(CX)-1CX(CX)=0且ZF=1(相同)時(shí)轉(zhuǎn)標(biāo)號(hào)LOOPNZ/LOOPNE標(biāo)號(hào);(CX)-1CX(CX)=0且ZF=0(不同)時(shí)轉(zhuǎn)標(biāo)號(hào)例如:MOVCX,10MOVCX,10
L1:……….L1:………
CMPAX,X
LOOPL1
LOOPEL1
}相同不同或全比較完ZF=0(CX)=0例1:
計(jì)算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是一組無符號(hào)十六位二進(jìn)制數(shù),并設(shè)其和不大于2個(gè)字節(jié)。定義數(shù)組名TABL存放a1~a20;和存放于單元YY中。中間結(jié)果存于寄存器AX中。BX寄存器為地址指針,CX寄存器作計(jì)數(shù)器。例2.編程統(tǒng)計(jì)數(shù)據(jù)塊中正數(shù)的個(gè)數(shù),并將其送RS單元中。解:數(shù)據(jù)塊定義為D1,RS單元存放正數(shù)的個(gè)數(shù),數(shù)據(jù)塊長(zhǎng)度用COUNT表示。BX作地址指針,CX作計(jì)數(shù)器,DX記錄正數(shù)的個(gè)數(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寄存器中有一個(gè)16位的二進(jìn)制數(shù),編程統(tǒng)計(jì)其中值為1的位的個(gè)數(shù),并將結(jié)果存于CX中。STARTCX0AX=0?AX左移CF=0?CXCX+1ENDYNYN程序段如下:
MOVCX,0LOP:ANDAX,AX
;建標(biāo)志位
JZSTOP
;AX=0停機(jī)
SALAX,1JNCNODINCCXNOD:JMPLOPSTOP:MOVAH,4CHINT21H由于AX有可能為0,若AX=0則不必再往下作統(tǒng)計(jì)工作,因此可采用先判斷,后執(zhí)行結(jié)構(gòu)。流程圖如右:(B).循環(huán)控制方式1.計(jì)數(shù)控制用于計(jì)數(shù)次數(shù)已知的情況,可采用正計(jì)數(shù)或倒計(jì)數(shù)法。如例12.條件控制當(dāng)計(jì)數(shù)次數(shù)無法確定,但循環(huán)次數(shù)與某些條件有關(guān),并且條件可檢測(cè)時(shí),可采用條件控制,例如檢測(cè),比較或判斷等形式。例4.在一串字符串中查找某一關(guān)鍵字‘#’,若查到,記下存放該關(guān)鍵字單元的偏移地址,若找不到用-1作標(biāo)記。解:設(shè)串變量名STRING,關(guān)鍵字單元CHAR,關(guān)鍵字單元的偏移地址放FLAG單元。寄存器SI為字符串的地址指針,CX為字符串長(zhǎng)度,AL用于放關(guān)鍵字‘#’。STARTSISTRING的EACX串長(zhǎng)度
AL‘#’[SI]=AL?SI=SI+1CX-1=0?FLAG-1ENDFLAGSIYNYN還可用字符串指令實(shí)現(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)體序號(hào)數(shù)8516328412345例:A數(shù)組中有N個(gè)數(shù),將它們按從大到小的順序排列。冒泡排序法
從第一個(gè)數(shù)開始依次對(duì)相鄰的兩個(gè)數(shù)進(jìn)行比較若順序正序,不交換兩數(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è)計(jì)中的問題:
子程序的調(diào)用和返回
子程序調(diào)用時(shí)參數(shù)的傳遞方法四、子程序結(jié)構(gòu)子程序名PROC[NEAR/FAR]
RET[n]子程序名ENDP……子程序的調(diào)用和返回CALL
子程序名
RET[n]斷點(diǎn)入口……….CALL
;斷點(diǎn)入棧、取子程序入口RET[n];斷點(diǎn)出棧,若帶有n,繼續(xù)彈出斷點(diǎn)以下的n個(gè)字節(jié)的數(shù)據(jù)。SPSPSP斷點(diǎn)CS斷點(diǎn)IP棧底CALL斷點(diǎn)IP斷點(diǎn)CSIPCSRET
子程序調(diào)用時(shí)參數(shù)的傳遞方法
調(diào)用程序被調(diào)用程序
參數(shù)傳遞:
(1)寄存器傳遞:參數(shù)較少(2)存儲(chǔ)單元傳遞:參數(shù)較多(3)堆棧傳遞:子程序嵌套或遞歸調(diào)用
數(shù)據(jù)結(jié)果子程序設(shè)計(jì)舉例:求十進(jìn)制數(shù)的和
1.用寄存器
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能開關(guān)課課程設(shè)計(jì)
- 電器設(shè)備廠生產(chǎn)車間管理制度質(zhì)量管理、定置管理等
- 電氣制圖與識(shí)圖十大基礎(chǔ)知識(shí)
- 電氣系統(tǒng)、給排水管道系統(tǒng)、消防管道系統(tǒng)、通風(fēng)空調(diào)系統(tǒng)施工組織方案
- 電氣規(guī)程變配電所二次系統(tǒng)與繼電保護(hù)運(yùn)行及自投裝置運(yùn)行
- 采購(gòu)優(yōu)化與成本降低方案
- 中醫(yī)館投資者教育及培訓(xùn)
- 高端商務(wù)年終總結(jié)工作匯報(bào)述職報(bào)告模板1
- 企業(yè)文化的核心價(jià)值觀建設(shè)
- 中班數(shù)學(xué)活動(dòng)彩色風(fēng)箏
- 工程項(xiàng)目復(fù)盤分析報(bào)告
- (2024年)污水處理設(shè)備培訓(xùn)方案
- 《生物質(zhì)熱電聯(lián)產(chǎn)工程設(shè)計(jì)規(guī)范》
- 牙醫(yī)診所創(chuàng)業(yè)計(jì)劃書
- 生涯規(guī)劃成為公務(wù)員
- 2023年全國(guó)《勞動(dòng)關(guān)系協(xié)調(diào)員》理論及相關(guān)法規(guī)知識(shí)考試題庫(kù)與答案
- 康復(fù)設(shè)備一覽表
- JJG 643-2024標(biāo)準(zhǔn)表法流量標(biāo)準(zhǔn)裝置
- 人教版六年級(jí)數(shù)學(xué)上冊(cè)期末復(fù)習(xí)系列之計(jì)算題每日一練3(原卷版+解析)(全國(guó)通用)
- 項(xiàng)目管理服務(wù)工作程序、方法和制度
- 壓鑄產(chǎn)品噴漆技巧培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論