資源描述:
《匯編語言源程序的框架結(jié)構(gòu)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、§5.1匯編語言源程序的框架結(jié)構(gòu)編制匯編語言源程序時(shí),首先要使用段定義偽指令和段尋址偽指令來構(gòu)造一個(gè)由若干指令和數(shù)據(jù)組成的程序。構(gòu)造一個(gè)源程序的框架結(jié)構(gòu)有如下兩種格式:第一種格式:……MOVAH,4CH;返回DOSINT21HCODEENDSENDBEGIN第5章8086/8088匯編語言程序設(shè)計(jì)第二種格式:……RET;取程序段前綴首地址MAINENDPCODEENDSENDBEGIN區(qū)別:兩種格式的本質(zhì)區(qū)別在于返回DOS的方法不同:對(duì)于第一種格式,采用了調(diào)用DOS系統(tǒng)的4CH功能,返回DOS。具體方法是:在要返回DOS處,安排如
2、下兩條指令:MOVAH,4CHINT21H對(duì)于第二格式,DOS返回方法是調(diào)用20H類型的中斷服務(wù)程序。§5.2順序結(jié)構(gòu)程序設(shè)計(jì)順序程序結(jié)構(gòu)是指完全按照順序逐條執(zhí)行的指令序列,這種結(jié)構(gòu)的流程圖除了有一個(gè)開始框和結(jié)束框外,就是若干處理框,沒有判斷框,如圖5.1所示。圖5.1順序程序的結(jié)構(gòu)形式例5.1:試分別用匯編語言源程序的兩種框架結(jié)構(gòu)編制程序,求出表達(dá)式:(X×4-Y)/2的值,并保存到RESULT存儲(chǔ)單元中,其中X,Y均為字節(jié)變量。解:完成該功能的流程圖如圖5.2所示:圖5.2例5.1的功能實(shí)現(xiàn)流程圖參考程序1:DATASEGME
3、NT;數(shù)據(jù)段XDB2YDB4ZDB?;定義變量DATAENDSSTACKSEGMENTPARASTACKDW20HDUP(0)STACKENDSCODESEGMENT;代碼段ASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AX;DS賦初值MOVAL,X;AL←XMOVCL,2SALAL,CL;AL←X×4SUBAL,Y;AL←X×4-YSARAL,1;AL←(X×4-Y)/2MOVZ,AL;存結(jié)果MOVAH,4CH;返回DOSINT21HCODEENDSENDBEGIN參考程
4、序2:DATASEGMENTXDB2YDB4ZDB?DATAENDSSTACKSEGMENTPARASTACKDW20HDUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKPROC1PROCFAR;使RET為遠(yuǎn)返回ENDBEGINBEGIN:PUSHDS;入棧保存地址MOVAX,0;程序段前綴的首地址PUSHAXMOVAX,DATAMOVDS,AXMOVAL,X;AL←XMOVCL,2SALAL,CL;AL←X×4SUBAL,Y;AL←X×4-YSARAL,1;AL←(X
5、×4-Y)/2MOVZ,AL;存結(jié)果RET;取程序段前綴首地址PROC1ENDPCODEENDS§5.3分支結(jié)構(gòu)程序設(shè)計(jì)分支程序結(jié)構(gòu)可以有兩種形式,如圖5.4所示,它們分別相當(dāng)于高級(jí)語言程序中的IF-THEN-ELSE語句和CASE語句,它們適用于要根據(jù)不同條件做不同處理的情況。§5.3.1用比較/測(cè)試的方法實(shí)現(xiàn)IF-THEN-ELSE結(jié)構(gòu)實(shí)現(xiàn)方法:在產(chǎn)生分支之前,通常用比較、測(cè)試的辦法在標(biāo)志寄存器中設(shè)置相應(yīng)的標(biāo)志位,然后再選用適當(dāng)?shù)臈l件轉(zhuǎn)移指令,以實(shí)現(xiàn)不同情況的分支轉(zhuǎn)移。(1)進(jìn)行比較,使用比較指令:CMPDEST,SRC該指令
6、進(jìn)行減法操作,而不保存結(jié)果,只設(shè)置標(biāo)志位。(2)進(jìn)行測(cè)試,使用測(cè)試指令TESTDEST,SRC該指令進(jìn)行邏輯與操作,而不保存結(jié)果,只設(shè)置標(biāo)志位。§5.3.2用地址表法實(shí)現(xiàn)CASE結(jié)構(gòu)(即多路分支)用地址表法實(shí)現(xiàn)CASE結(jié)構(gòu)的基本思路是:將各分支程序的入口地址依次羅列形成一個(gè)地址表,讓BX指向地址表的首地址,從鍵盤接收或其他方式獲取要轉(zhuǎn)到的分支號(hào),再讓BX與分支號(hào)進(jìn)行運(yùn)算,使BX指向?qū)?yīng)分支入口地址,最后即可使用JMPWORDPTR[BX]或JMPDWORDPTR[BX]指令實(shí)現(xiàn)所要轉(zhuǎn)到的分支;程序設(shè)計(jì)流程圖如圖5.6所示:圖5.6
7、用地址表法實(shí)現(xiàn)多路分支的結(jié)構(gòu)框圖例5.4:編程實(shí)現(xiàn)菜單選擇,根據(jù)不同的選擇做不同的事情。解:假設(shè)有3路分支,在地址表中的入口地址分別:A0、A1、A2;具體見圖5.7所示:參考程序:DATASEGMENTMENUDB0DH,0AH,"0:Chinese!"DB0DH,0AH,"1:English!"DB0DH,0AH,"2:German!"DB0DH,0AH,"Pleasechooseonetoanswerthefollowingquestion:$"ERDB0DH,0AH,"Iamsorry,youchoosethemistak
8、e!$"S0DB0DH,0AH,"OK,PleaseanswerinChinese!$"S1DB0DH,0AH,"OK,PleaseanswerinEnglish!$"S2DB0DH,0AH,"OK,PleaseanswerinGerman!$"T