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