




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
§4
程序設計
匯編語言程序設計步驟: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
設X,Y的值分別存放在VARX,VARY單元中,運算結(jié)果不超過16位。解:(1)存儲單元RESULT用來存放結(jié)果,VARX和VARY放
X、Y的值。寄存器DX放中間運算結(jié)果,左移1位相當于乘2,右移1位相當于除2,所以可以用左移3位得到乘以8的結(jié)果。
(2)程序流程圖和程序如下:開始預置段寄存器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
例:順序程序設計
設:在內(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目標用于程序需要進行分別處理的情況。主要使用轉(zhuǎn)移指令。轉(zhuǎn)移指令分為無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令。無條件轉(zhuǎn)移指令:JMP目標在進行分支程序設計時,通常用比較、測試,或算術運算、邏輯運算影響標志位,然后選擇轉(zhuǎn)移指令。分支程序結(jié)構(gòu)開始條件?A塊存結(jié)果結(jié)束成立不成立初始化開始條件?A塊B塊存結(jié)果結(jié)束成立不成立初始化例:分支程序設計
y=1x>00x=0-1x<0設:x為8位有符號數(shù)開始預置段RALXAL>0AL>0AL-1AL0AL1NYNYYAL結(jié)束DATASEGMENTXDBxYDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,X
CMPAL,0
;x-0建標志位
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)設:循環(huán)次數(shù)為N正計數(shù)法:倒計數(shù)法:MOVCX,NMOVCX,0L:L:
DECCXINCCXJNZLCMPCX,NJNZL…………三、循環(huán)程序結(jié)構(gòu)入口初始化部分循環(huán)結(jié)束?循環(huán)體修改部分出口YN用于當計數(shù)次數(shù)無法確定,但循環(huán)次數(shù)與某些條件有關,并且條件可檢測時,可采用條件控制。
先判斷,后執(zhí)行結(jié)構(gòu)
循環(huán)控制指令LOOPLOOP標號;(CX)-1CX,(CX)=0時轉(zhuǎn)標號LOOPE/LOOPZ標號;(CX)-1CX(CX)=0且ZF=1(相同)時轉(zhuǎn)標號LOOPNZ/LOOPNE標號;(CX)-1CX(CX)=0且ZF=0(不同)時轉(zhuǎn)標號例如: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設a1,a2,···a20是一組無符號十六位二進制數(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預置段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
;建標志位
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.條件控制當計數(shù)次數(shù)無法確定,但循環(huán)次數(shù)與某些條件有關,并且條件可檢測時,可采用條件控制,例如檢測,比較或判斷等形式。例4.在一串字符串中查找某一關鍵字‘#’,若查到,記下存放該關鍵字單元的偏移地址,若找不到用-1作標記。解:設串變量名STRING,關鍵字單元CHAR,關鍵字單元的偏移地址放FLAG單元。寄存器SI為字符串的地址指針,CX為字符串長度,AL用于放關鍵字‘#’。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交換標志=0NY交換標志=1?交換標志=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;未交換標志0LP2:MOVAX,A[BX];內(nèi)循環(huán)
CMPAX,A[BX+2]JGCONT
XCHGAX,A[BX+2]MOV[BX],AX
MOVDX,1;交換標志1CONT:ADDBX,2
DECDIJNZLP2
CMPDX,0
JZL1LOOPLP1L1:MOVAH,4CHINT21HCODEENDSENDSTART
子程序設計中的問題:
子程序的調(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ù)的和
1.用寄存器
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 頂旺新材料有限公司年產(chǎn) 氣柱袋 1000 萬件異址擴建項目環(huán)評報告表
- 2025年碳硫分析儀合作協(xié)議書
- 四川學校人造草坪施工方案
- 張家口自建輕鋼房施工方案
- 危化企業(yè)危險源辨識與控制方案
- 工程建設領域信息化與廉政風險防控策略
- 數(shù)字化轉(zhuǎn)型的關鍵技術
- 高中化學大單元教學策略的運用探討
- 污染防治違規(guī)施工方案
- 四級人力資源管理師-2019年5月四級人力資源管理師考試《理論知識》真題
- 供電公司涉外突發(fā)事件處置應急預案
- 蘇教版三年級下冊《植物的一生》
- 1.1 都勻毛尖茶概況
- 2024年中國華電科工集團限公司面向系統(tǒng)內(nèi)外招聘66人公開引進高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
- 標準預防與隔離技術教學培訓課件
- 20CJ96-1外墻內(nèi)保溫建筑構(gòu)造(一)FLL預拌無機膏狀保溫材料內(nèi)保溫構(gòu)造
- 第七屆石油工程設計大賽-單項組地面工程獲獎作品
- 《幼兒文學》課程標準
- 2024年內(nèi)蒙古醫(yī)療機構(gòu)放射工作人員放射防護培訓考試題
- 地形圖的基本知識課件
- 醫(yī)務人員手衛(wèi)生規(guī)范培訓課件預防醫(yī)院感染的手衛(wèi)生措施
評論
0/150
提交評論