〈新〉微型計(jì)算機(jī)原理與接口技術(shù)第五章_第1頁
〈新〉微型計(jì)算機(jī)原理與接口技術(shù)第五章_第2頁
〈新〉微型計(jì)算機(jī)原理與接口技術(shù)第五章_第3頁
〈新〉微型計(jì)算機(jī)原理與接口技術(shù)第五章_第4頁
〈新〉微型計(jì)算機(jī)原理與接口技術(shù)第五章_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論