版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第5章
匯編語言程序設(shè)計(jì)匯編語言程序的步驟:明確任務(wù),確定算法。繪流程圖。根據(jù)流程圖編寫匯編語言程序。上機(jī)調(diào)試程序?;蚧蚱鹗伎驁?zhí)行框判斷框終止框連接框圖5-1
標(biāo)準(zhǔn)流程圖符號5.1
匯編語言程序的上機(jī)過程1、源文件的建立和匯編
(1)建立源程序文件(2)匯編源程序文件匯編程序主要功能:·檢查源程序中的語法錯(cuò)誤并給出出錯(cuò)信息?!ぎa(chǎn)生目標(biāo)文件,列表文件和對照文件?!ふ归_宏指令。匯編操作過程:設(shè)在當(dāng)前C盤上已經(jīng)建立了一個(gè)擴(kuò)展名為ASM的源程序文件MYASM,匯編時(shí)發(fā)出如下命令:C:>MASM
MYASM
↙(或MASM
MYASM.ASM↙)具體的三個(gè)輸入提示行顯示如下:Object
Filename
[MYASM.OBJ]:↙Source
Listing
[NUL.LST]:(可打入源文件名或省略)↙Cross
Reference
[NUL.CRF]:(可打入源文件名或省略)↙匯編程序?qū)υ次募M(jìn)行匯編,若無錯(cuò)誤信息則顯示如下結(jié)果:0
Warning
Errors0
Severe
Errors2.目標(biāo)文件的鏈接連接軟件LINK的功能:①
找到要連接的所有目標(biāo)文件;②
確定所有段的地址值;③
確定所有浮動(dòng)地址和外部符號所對應(yīng)的存儲地址;④
生成.EXE可執(zhí)行文件。連接軟件為LINK.EXE,其過程如下:設(shè)源文件MYASM.ASM已經(jīng)由匯編軟件匯編后生成MYASM.OBJ,其連接命令為:C:>LINK
MYASM
或LINKMYASM.OBJ則在屏幕上顯示連接軟件的版本號和三個(gè)輸入提示行,三個(gè)輸入提示行顯示如下:Run
File[MYASM.EXE]:List
File
[NUL.MAP]:Libraries
[.LIB]:3.執(zhí)行文件的調(diào)試5.2
順序結(jié)構(gòu)程序設(shè)計(jì)開始語句1語句2語句3結(jié)束圖5-2順序結(jié)構(gòu)流程例5-1用8086CPU的指令實(shí)現(xiàn)Y=(X1+X2)/2的程序設(shè)計(jì)明確任務(wù),確定算法。繪流程圖(圖5-3)圖5-3例5-1流程圖開始取變量X1送AL取變量X2送AL計(jì)算X1+X2送AX計(jì)算AX/2結(jié)果送Y結(jié)束(3)根據(jù)流程圖編寫匯編語言程序1
DATASEGMENT2
X1DB?3
X2DB?4
YDW?DATACODE7ENDSSEGMENTASSUME
CS:CODE,
DS:DATA,MAINSTART:10;設(shè)置遠(yuǎn)程調(diào)用子程序;將DS:0壓入堆棧PROC
FARPUSH
DSMOV
AX,
0PUSH
AXMOV
AX,
DATAMOV
DS,
AXMOV
AL,
X1MOV
BL,
X2ADD
AL,
BLADC
AH,
0SAR
AX,
1MOV
[Y],
AXRETMAIN
ENDPCODE
ENDSEND;為DS設(shè)置段值;取變量X1送AL;取變量X2送BL;X1+X2+進(jìn)位送AX;結(jié)果送YSTART例5-2
將一位十六進(jìn)制數(shù)轉(zhuǎn)換成與它相應(yīng)的ASCⅡ碼。(1)明確任務(wù),確定算法。(2)繪流程圖(圖5-4)圖5-4例5-2流程BX←表起始地址開始AL←HEXAL←((BX)+(AL))ASCI←AL結(jié)束(3)根據(jù)流程圖編寫匯編語言程序DATATABLEDB
?SEGMENTDB
30H,31H,32H,33H,34H,35H,36H,37HDB
38H,39H,41H,42H,43H,44H,45H,46HHEX
DB
8ASCDATACOSEGENDSSEGMENTASSUME
CS:COSEG,DS:DATABEING:
MOVMOVAX,DATADS,AXASC,ALAH,4CH21HMOV
BX,
OFFSET
TABMOV
AL,HEXXLATMOVMOVINTCOSEG
ENDSENDBEING5.3
分支結(jié)構(gòu)程序設(shè)計(jì)判定條件S1S2S1判定條件S2Sn(b)(a)圖5-5
分支程序的結(jié)構(gòu)形式(a)二分支結(jié)構(gòu)
(b)多分支結(jié)構(gòu)5.3.1
二分支結(jié)構(gòu)例5-3
要求對不足250個(gè)的學(xué)生成績進(jìn)行統(tǒng)計(jì)分析,統(tǒng)計(jì)出優(yōu)秀、及格和不及格的人數(shù)。(1)明確任務(wù),確定算法。(2)繪流程圖結(jié)束開始SI←BUF首址取總學(xué)生數(shù)CH←[SI]BX←0,
SI←SI+1取學(xué)生成績AH←[SI]AH<90?AH<60H?
BH←BH+1
BL←BL+1SI←SI+1CH←CH-1SI←存儲區(qū)首址[SI]←BH[SI+1]←BL[SI+2]←CLCH=0?YYYNNNCL←CL+1圖5-6例5-3流程圖(3)根據(jù)流程圖編寫匯編語言程序DATABUFSEGMENTDBDBNN
DUP(?)NUMDATACODEMAINDB 3
DUP(?)ENDSSEGMENTPROCASSUMEFARCS:CODE,DS:DATADSAX,AXAXAX,DATADS,AXSI,OFFSET
BUFSTART:
PUSHSUBPUSHMOVMOVMOVMOVMOVCH,[SI]CL,0;學(xué)生個(gè)數(shù)N→CH;CL存不及格人數(shù)MOVBX,0;BH存優(yōu)秀人數(shù),BL存及格人數(shù)INCSILP:MOVAH,
[SI];取學(xué)生成績CMPAH,90JBBLOW90;小于90轉(zhuǎn)INCBH;優(yōu)秀人數(shù)加1JMPABOV60BLOW90:CMPAH,60JBBLOW60;小于60轉(zhuǎn)ABOV60:INCBL ;及格人數(shù)加1JMPNEXTBLOW60:INCCL;不及格人數(shù)加1NEXT:INC
SI;數(shù)組地址加1DECCH;計(jì)數(shù)減1JNZLPMOVSI,OFFSET
NUMMOV[SI],BH;優(yōu)秀人數(shù)送入內(nèi)存單元MOV[SI+1],BL;及格人數(shù)送入內(nèi)存單元MOV[SI+2],CL ;不及格人數(shù)送入內(nèi)存單元RETMAINENDPCODEENDSENDSTART5.3.2
多分支結(jié)構(gòu)1.條件逐次測試法例5-4編程實(shí)現(xiàn)使鍵盤上A、B、C、D六個(gè)字母鍵成為4條輸入命令,使之分別對應(yīng)不同算法的控制子程序。明確任務(wù),確定算法。繪流程圖略(3)匯編語言程序MOVAH,lINT21H;1號功能調(diào)用,鍵盤接收CMPAL,‘A’;鍵值為A,轉(zhuǎn)PA子程序JEPACMPAL,‘B’;鍵值為B,轉(zhuǎn)PB子程序JEPBCMPAL,‘C’;鍵值為C,轉(zhuǎn)PC子程序JEPCCMPAL,‘D’;鍵值為D,轉(zhuǎn)PD子程序JEPDHLTPA:
…PB:
…PC:
…PD:
…;鍵值非A、B、C、D,停止;A號控制子程序入口;B號控制子程序入口;C號控制子程序入口;D號控制子程序入口2.列表跳轉(zhuǎn)法例5-5
利用表內(nèi)地址跳轉(zhuǎn)法來實(shí)現(xiàn)例5.4的要求(1)明確任務(wù),確定算法。數(shù)據(jù)段┇┇
PA
PB
┇PDBASEBASE+2┇┇操作碼┇代碼段┇PA
操作碼PBPA為首址的程序段PB為首址的程序段圖5-7地址跳轉(zhuǎn)表(2)繪流程圖(圖5-8)Y開始AL←鍵盤輸入字符AL<41H?NAL>44H?NAL←AL-41HBX←取地址跳轉(zhuǎn)表首址AH←0AL←計(jì)算表內(nèi)地址計(jì)算表地址BX←BX+AX根據(jù)地址轉(zhuǎn)向相應(yīng)分支結(jié)束Y圖5-8例5-5流程圖(3)根據(jù)流程圖編寫匯編語言程序ADATABASEKEYADATAASTACKDWTOPASTACKACODESEGMENTDW
PA,PB,PC,PDDB
?ENDSSEGMENTPARA
STACK
‘STACK’100
DUP(?)LABELENDSSEGMENTWORDASSUME
CS:ACODE,DS:ADATA,SS:ASTACKSTART:MOVMOVMOVAX,ASTACKSS,AXSP,
OFFSET
TOPMOV
AX,
ADATAMOV
DS,
AXLOP:
MOV
AH,1INT
21HCMP
AL,41HJB
LOPCMP
AL,44HJA
LOPSUB
AL,41HMOV
BX,OFFSET
BASEMOV
AH,0ADD
AL,ALADD
BX,AXJMP
WORD
PTR[BX]ACODE
ENDSENDSTART5.4
循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.4.1
循環(huán)程序的組成與結(jié)構(gòu)形式兩種循環(huán)程序結(jié)構(gòu):WHILE_DO結(jié)構(gòu)和DO_UNTIL結(jié)構(gòu)循環(huán)初始狀態(tài)Y循環(huán)體N圖5-9WHILE—DO結(jié)構(gòu)循環(huán)控制條件循環(huán)初始狀態(tài)循環(huán)體YN圖5-10DO—UNTIL結(jié)構(gòu)循環(huán)控制條件例5-6試編寫一程序統(tǒng)計(jì)出某一內(nèi)存單元中‘1’的個(gè)數(shù).明確任務(wù),確定算法。繪流程圖(圖5-11)N結(jié)束CL←0開始AX←XDAAX為零?CONT←CLYNAX邏輯左移一位CF=1?YCL←CL+1圖5-11例5-6
流程圖(3)根據(jù)流程圖編寫匯編語言程序3AD8H?DATA
SEGMENTXDA
DWCONT
DBDATA
ENDSCODESEGMENTASSUMECS:CODE,DS:DATAAX,DATADS,AXCL,0AX,XDASTART:
MOVMOVMOVMOVLOP:
CMPJZSHLJNCINCNEXT:JMPEXIT:
MOVINTCODE
ENDSENDAX,0EXITAX,1NEXTCL
LOPCONT,CL20HSTART5.4.2
循環(huán)程序的控制方法計(jì)數(shù)法計(jì)數(shù)法分為正計(jì)數(shù)法和倒計(jì)數(shù)法。例5-7
編制程序?qū)蓚€(gè)n字節(jié)的無符號數(shù)相加,結(jié)果存入SUM開始的n+1字節(jié)存儲區(qū)中。明確任務(wù),確定算法。繪流程圖略(3)根據(jù)流程圖編寫匯編語言程序SEGMENTN
DUP(?)
N
DUP(?)N+1
DUP(?)DATA
DATA1
DBDATA2
DBSUM
DBDATA
ENDSCSEGSEGMENTASSUMECS:CSEG,DS:DATAAX,DATADS,AXBX,OFFSET
DATA1SI,OFFSET
DATA2DI,SUMCX,NSTART:MOVMOVMOVMOVLEAMOVCLCLOP:
MOV
AL,[SI]ADC
AL,[BX]MOV
[DI],ALINC
BXINC
SIINC
DILOOP
LOPADC
BYTE
PTR
[DI],0MOV
AH,
4CHINT
21HCSEG
ENDSENDSTART(2)條件控制法條件控制法——利用已知的條件對循環(huán)進(jìn)行控制的方法。分兩種情況:如循環(huán)最大次數(shù)已知,但有可能使用一些特征或條件使循環(huán)提前結(jié)束。循環(huán)次數(shù)未知,利用條件中的特征結(jié)束循環(huán)。例5-8
編制程序用單字符輸出的DOS功能調(diào)用向屏幕輸出以“%”結(jié)束的字符串。(1)明確任務(wù),確定算法。(2)繪流程圖(圖5-12)
開始SI←DATA首址DL←[SI]DL=’%Y’?N顯示字符SI←SI+1結(jié)束例5-8流程圖圖5-12(3)根據(jù)流程圖編寫匯編語言程序DSEGDATADSEGCSEGSEGMENTDB
‘HOW
ARE
YOU?%’ENDSSEGMENTASSUME
CS:CSEG,DS:DSEGSTART:
MOVMOVLEAAX,DSEGDS,AXSI,DATAAGAIN:
MOVCMPJZMOVINTINCJMPENDOUT:INTDL,[SI]DL,‘%’ENDOUTAH,221HSIAGAIN20HCSEGENDSEND
START(3)邏輯尺控制法例5-9
設(shè)有16個(gè)內(nèi)存單元需要修改,修改規(guī)律是:第1、3、6、9、12號單元均加5,其余單元均加10,試用循環(huán)結(jié)構(gòu)編程實(shí)現(xiàn)。(1)明確任務(wù),確定算法。(2)繪流程圖(3)根據(jù)流程圖編寫匯編語言程序圖5-13
例5-9流程圖開始指針BX←0計(jì)數(shù)初值CX←16邏輯尺DX←0A490HAX←XDA[BX]DX邏輯左移一位CF=1?YNAX←AX+10XDA[BX]←AXBX←BX+1CX←CX-1NCX=0?Y結(jié)束AX←AX+5SEGMENTDB
16
DUP(?)DW
0A490HENDSDATAXDALRULERDATACODEMAINSEGMENTPROC
FARASSUME
CS:CODE,DS:DATASTART:
PUSHXORPUSHMOVMOVMOVMOVDSAX,AXAXAX,DATADS,AXBX,0CX,10HMOVAGAIN:
MOVSHLJCADDJMPDX,LRULERAX,XDA[BX]DX,1ADD5AX,10SHORT
RESULTAX,5XDA[BX],AXBXAGAINADD5:
ADDRESULT:MOVINCLOOPRETMAINCODEENDPENDSEND
START多重循環(huán)程序設(shè)計(jì)注意以下幾點(diǎn):設(shè)置好各重循環(huán)的初始狀態(tài),確保各重循環(huán)的正常運(yùn)行。注意內(nèi)外循環(huán)嵌套。防止死循環(huán)現(xiàn)象。例5-10設(shè)某一數(shù)組的長度為N,各元素均為字?jǐn)?shù)據(jù),試編制一個(gè)程序使該數(shù)組中的數(shù)據(jù)按照從小到大的次序排列。(1)明確任務(wù),確定算法。(2)繪流程圖(3)根據(jù)流程圖編寫匯編語言程序圖5-14例5-10流程圖開始
BX←0內(nèi)循環(huán)次數(shù)CX←N-1外循環(huán)次數(shù)DX←CXAX←DATA[BX]DATA[BX]←AXBX←BX+2CX←CX-1CX=0?CX=0?Y結(jié)束YAX≤DATA[BX+2]?N交換AX,DATA[BX+2]Y外循環(huán)次數(shù)CX←DXBX←0CX←CX-1NNADATADATAADATAACODESEGMENTDW N
DUP(?)ENDSSEGMENTASSUMECS:ACODE,DS:ADATASTART:
MOVMOVMOVMOVDEC;設(shè)計(jì)數(shù)器CX,內(nèi)循環(huán)次數(shù);設(shè)計(jì)數(shù)器DX,外循環(huán)次數(shù)LOP1:LOP2:;取相鄰兩數(shù);若次序符合,則不交換AX,ADATADS,AXBX,0CX,NCXMOV
DX,CXMOVCMPJBEAX,DATA[BX]AX,DATA[BX+2]CONTIXCHGAX,DATA[BX+2]
;否則兩數(shù)交換MOVDATA[BX],AXCONTI:ADDBX,2LOOPLOP2
;內(nèi)循環(huán)MOVCX,DX
;外循環(huán)次數(shù)→CXMOVBX,0
;地址返回第一個(gè)數(shù)據(jù)LOOPLOP1
;外循環(huán)MOVAH,4CH
;返回DOSINT21HACODEENDSENDSTART子程序結(jié)構(gòu)程序設(shè)計(jì)子程序——是匯編語言中多次使用的一個(gè)相對獨(dú)立的程序段。子程序結(jié)構(gòu)程序設(shè)計(jì)主要包括三個(gè)方面,即:子程序的定義與調(diào)用子程序的參數(shù)傳送子程序嵌套與遞歸調(diào)用子程序的定義與調(diào)用1、子程序的定義子程序說明包括四個(gè)方面:描述該子程序模塊的名稱、功能及性能說明子程序中用到的寄存器和存儲單元指出子程序的入口參數(shù)和出口參數(shù)子程序中調(diào)用其它子程序的名稱例5-11定義一個(gè)顯示兩位十六進(jìn)制數(shù)的子程序程序說明:;名稱:DISPP;功能:顯示兩位十六進(jìn)制數(shù);所用寄存器CX,DX;人口參數(shù):AL存放兩位十六進(jìn)制數(shù);出口參數(shù):無;調(diào)其它子程序:DISP1子程序;DISPPPROCNEARPUSHDXPUSHCXMOVDL,
ALMOVCL,
4ROLDL,
CLANDDL,
0FHCALLDISP1MOVDL,
ALANDDL,
0FHCALLDISP1POPCXPOPDXRETDISPPENDP2、子程序的調(diào)用和返回例5-12
編制顯示四位十六進(jìn)制數(shù)的子程序明確任務(wù),確定算法。繪流程圖根據(jù)流程圖編寫匯編語言程序DISP4
PROC
NEARPUSH
BXPUSH
CXPUSH
DXPUSH
AXMOV AL,
AHCALL
DISP2POP
AXCALL
DISP2POP
DXPOP
CXPOP
BXRETDISP4
ENDPDISP2
PROC
NEARMOV
BL,
ALMOV DL,
ALMOV
CL,
4ROLANDCALLMOV
ANDCALLRETDISP2
ENDPDISP1
PROCOR
CMPJBADDDDD:
MOVINTRETDISP1
ENDPDL,CLDL,0FHDISP1DL,BLDL,0FHDISP1DL,30HDL,3AHDDDDL,07HAH,221H5.5.2
子程序的參數(shù)傳送實(shí)現(xiàn)參數(shù)傳送分為四種:寄存器傳送、固定緩沖區(qū)傳送、地址表傳送和堆棧傳送。1、寄存器傳送寄存器傳送是一種最常用、最簡單的參數(shù)傳送實(shí)現(xiàn)方法。2、固定緩沖區(qū)傳送固定緩沖區(qū)傳送方法是采用存儲器來實(shí)現(xiàn)參數(shù)傳送的,它與寄存器傳送類似。例5-13
已知數(shù)組由100個(gè)字?jǐn)?shù)據(jù)組成,試編程求出這個(gè)數(shù)組元素之和。(1)明確任務(wù),確定算法。(2)繪流程圖(圖5-16)返回開始保護(hù)現(xiàn)場恢復(fù)現(xiàn)場NBX←ARY首地址CX←100AX、DX清零
AX←AX+[BX]NCF=1?YDX←DX+1BX←BX+2CX←CX-1CX=0?Y保存結(jié)果圖5-16
例5-13求和子程序流程圖(3)根據(jù)流程圖編寫匯編語言程序DATA
SEGMENTARY
DW
100
DUP(?)SUMDATACODEDW
?ENDSSEGMENTASSUME
CS:CODE,DS:DATASTART:
MOV
AX,DATAMOV
DS,AXCALL
RADD
MOV
AH,4CHINT
21H;求和子程序RADDPROCNEARPUSH
AXPUSH
BXPUSH
CXPUSH
DXLEABX,ARYMOVCX,100XORAX,AXMOVDX,AXCL1:ADDAX,[BX]JNCCL2INCDXCL2:ADDBX,2LOOPCL1MOVSUM,AXMOVSUM+2,
DXPOPDXPOPCXPOPBXPOPAXRETRADDENDPCODEENDSENDSTART3、地址表傳送地址表傳送--是采用存儲器來實(shí)現(xiàn)參數(shù)傳送的。例5-14
已知數(shù)組A由100個(gè)字?jǐn)?shù)據(jù)組成,數(shù)組B由50個(gè)字?jǐn)?shù)據(jù)組成,試編程分別求出這兩個(gè)數(shù)組元素之和。(1)明確任務(wù),確定算法。(2)繪流程圖(圖5-17)(3)根據(jù)流程圖編寫匯編語言程序結(jié)束開始TAB←CA首址TAB
[2]←ARA首址TAB[4]←SA首址SI←取TAB首址調(diào)用求和子程序RADDTAB←CB首址TAB[2]←ARB首址TAB[4]←SB首址SI←取TAB首址調(diào)用求和子程序RADD開始返回保護(hù)現(xiàn)場BX←[SI]
CX←[BX]BX←[SI+2]
DI←[SI+4]AX、DX清零AX←AX+[BX]BX←BX+2
CX←CX-1NNCX=0?Y保存結(jié)果并恢復(fù)現(xiàn)場CF=1?YDX←DX+1圖5-17例5-14流程圖DATASEGMENTCADW100ARADW100
DUP(?)SADD?CBDW50ARBDW50
DUP(?)SBDD?TABDW3
DUP(?)DATACODEENDSSEGMENTASSUME
CS:CODE,DS:DATASTART:
MOVMOV
MOV
MOV
MOV
MOVAX,DATADS,AXAX,OFFSET
CATAB,AXAX,OFFSET
ARATAB[2],AXMOVAX,OFFSET
SAMOVTAB
[4],AXMOVSI,OFFSET
TABCALLRADDMOVAX,OFFSET
CBMOVTAB,AXMOVAX,OFFSET
ARBMOVTAB[2],AXMOVAX,OFFSET
SBMOVTAB
[4],AXMOVSI,OFFSET
TABCALLRADDMOVAH,4CHINT21HRADD
PROCNEARMOVBX,[SI]MOVCX,[BX]MOVBX,[SI+2]MOVDI,[SI+4]XORAX,AXMOVDX,AXCL1:ADDAX,[BX]JNCCL2INCDXCL2:ADDBX,2LOOPCL1MOV[DI],AXMOV[DI+2],
DXRETRADDENDPCODEENDSENDSTART4、堆棧傳送堆棧傳送--是采用存儲器來實(shí)現(xiàn)參數(shù)傳送的。例5-15已知數(shù)組A由100個(gè)字?jǐn)?shù)據(jù)組成,數(shù)組B由50個(gè)字?jǐn)?shù)據(jù)組成,要求用堆棧傳送參數(shù)的子程序結(jié)構(gòu)編程,試分別求出這兩個(gè)數(shù)組元素之和。明確任務(wù),確定算法。繪流程圖(圖5-18)根據(jù)流程圖編寫匯編語言程序結(jié)束數(shù)組A起始地址壓入堆棧開始存放數(shù)組A長度起始地址壓入堆棧存放數(shù)組A和起始地址壓入堆棧數(shù)組B起始地址壓入堆棧存放數(shù)組B長度起始地址壓入堆棧存放數(shù)組B和起始地址壓入堆棧調(diào)用求和子程序RADD調(diào)用求和子程序RADD開始返回BP值壓入堆棧BP←SP保護(hù)現(xiàn)場恢復(fù)現(xiàn)場SI←[SP+8]DI←[SP+6]CX←[DI]DI←[SP+4]AX、DX清零AX←AX+[SI]CF=0?NDX←DX+1SI←SI+2CX=0?Y[DI]←AXCX←CX-1[DI+2]←DX11恢復(fù)BP值YN圖5-18例5-15流程圖DATASEGMENTCNTADW100ARYADW100
DUP(?)SUMADD?CNTBDW50ARYBDW50
DUP(?)SUMBDD?DATACSEGENDSSEGMENTASSUME
CS:CSEG,DS:DATASTART:
MOVMOV
MOVPUSHMOVAX,DATADS,AXAX,OFFSET
ARYAAXAX,OFFSET
CNTAPUSH
AXMOV
AX,OFFSET
SUMAPUSH
AXCALL
NEAR
PTR
RADD
MOV
AX,OFFSET
ARYBPUSH
AXMOV
AX,OFFSET
CNTBPUSH
AXMOV
AX,OFFSET
SUMBPUSH
AXCALL
NEAR
PTR
RADD
MOV
AH,4CHINT
21HPROC
NEARPUSH
BPRADDMOV
BP,SPPUSH
AXPUSH
DXPUSH
CXPUSH
SIPUSH
DIMOV
SI,[BP+8]MOV
DI,[BP+6]MOV
CX,[DI]MOV
DI,[BP+4]XOR
AX,AXMOV
DX,AXADD
AX,[SI]JNC
NOCAYINC
DXNEXT:NOCAY:
ADD
SI,2LOOP
NEXTMOV
[DI],AXMOV
[DI+2],DXPOP
DIPOP
SIPOP
CXPOP
DXPOP
AXPOP
BPRET
6RADD
ENDPCSEG
ENDSENDSTART(DI)(SI)(IP)SUMCNTARY(IP)SUMCNTARYSUMCNTARYSPSPSP(CX)(DX)(AX)原(BP)SP(a)(b)
(c)用堆棧傳送參數(shù)時(shí)堆棧內(nèi)容的變化情況(d)圖5-195.5.3
子程序嵌套與遞歸調(diào)用調(diào)用子程序Ⅰ調(diào)用子程序Ⅰ返回返回1、子程序嵌套子程序嵌套--是指一個(gè)子程序的內(nèi)部再調(diào)用其他子程序。主程序子程序Ⅰ子程序II調(diào)用子程序Ⅱ圖5-20子程序嵌套2、遞歸子程序遞歸子程序——是這種具有遞歸調(diào)用性質(zhì)的子程序。遞歸子程序必須注意以下兩點(diǎn):注意現(xiàn)場的保護(hù)。注意遞歸結(jié)束條件。例5-16計(jì)算
S=X!+Y!其中X、Y的值在0~8之間。(1)
明確任務(wù),確定算法。(2)繪流程圖結(jié)束SI←XYVAL偏移首址開始BX←[SI]調(diào)用求階乘子程序FT暫存結(jié)果BX←[SI+2]BX←取前次結(jié)果調(diào)用求階乘子程序FTAX←AX+BXSVAL←AX開始BX←BX-1遞歸調(diào)用FT由堆棧取出值到BX中AX←BX*AXAX←1返回YBX=0?NBX值壓入堆棧FT子程序流程圖主程序流程圖圖5-21
例5-16流程圖(3)根據(jù)流程圖編寫匯編語言程序SEGMENT?,?0DATAXYVAL
DWSVAL
DWDATA
ENDSSTACK1SEGMENT
PARA
STACK
‘STACK’TOP
DW
64H
DUP(0)STACK1
ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1START
:MOVMOV
MOV
MOV
MOVAX,DATADS,AXAX,STACK1SS,AXSP,SIZE
TOPMOV
SI,OFFSET
XYVALMOV
BX,[SI]CALL
FTPUSH
AXMOV
BX,[SI+2]CALL
FTPOP
BXADD
AX,BXMOV
SVAL,AXMOV
AH,4CHINT
21H;求階乘子程序FT
PROCANDNEARBX,BXJZFT1PUSHBXDECBXCALLFTPOPB
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年河北正定師范高等專科學(xué)校單招職業(yè)技能筆試模擬試題帶答案解析
- 2026廣西玉林市育輝高級中學(xué)赴南寧公開招聘教師5人考試參考題庫及答案解析
- 2026云南昆明市尋甸回族彝族自治縣人力資源和社會保障局城鎮(zhèn)公益性崗位招聘1人考試備考題庫及答案解析
- 2026云南玉溪市澄江市撫仙湖管理局招聘綜合行政執(zhí)法輔助員4人考試備考題庫及答案解析
- 2026年銅陵市公安局警務(wù)輔助人員招聘60名考試參考題庫及答案解析
- 2026福建福州臺商投資區(qū)開發(fā)建設(shè)有限公司招聘1人考試參考試題及答案解析
- 2026廣東江門市臺山大灣控股發(fā)展集團(tuán)有限公司招聘3人考試參考題庫及答案解析
- 高速位移傳感器:智能制造的精準(zhǔn)感知核心
- 2026年浙江省機(jī)電產(chǎn)品質(zhì)量檢測所有限公司招聘備考題庫及完整答案詳解一套
- 北京市順義區(qū)北石槽社區(qū)衛(wèi)生服務(wù)中心2025年第二批公開招聘額度人員備考題庫及完整答案詳解一套
- 國家開放大學(xué)電大《計(jì)算機(jī)應(yīng)用基礎(chǔ)(本) 》 終結(jié)性考試試題答案(完整版)
- 《建筑基坑降水工程技術(shù)規(guī)程》DBT29-229-2014
- 防污閃涂料施工技術(shù)措施
- 2023年廣東學(xué)業(yè)水平考試物理??贾R點(diǎn)
- 中外政治思想史-復(fù)習(xí)資料
- GB/T 12385-2008管法蘭用墊片密封性能試驗(yàn)方法
- 中國近代史期末復(fù)習(xí)(上)(第16-20課)【知識建構(gòu)+備課精研】 高一歷史上學(xué)期期末 復(fù)習(xí) (中外歷史綱要上)
- GB 11887-2008首飾貴金屬純度的規(guī)定及命名方法
- 《LED的基礎(chǔ)知識》課件
- 需求導(dǎo)向式銷售研討課程課件
- DB13T 5603-2022 工貿(mào)行業(yè)非高危建設(shè)項(xiàng)目安全設(shè)施“三同時(shí)”報(bào)告編制導(dǎo)則
評論
0/150
提交評論