匯編語言程序設計補充學習教案_第1頁
匯編語言程序設計補充學習教案_第2頁
匯編語言程序設計補充學習教案_第3頁
匯編語言程序設計補充學習教案_第4頁
匯編語言程序設計補充學習教案_第5頁
已閱讀5頁,還剩180頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、會計學1匯編語言匯編語言(hu bin y yn)程序設計補充程序設計補充第一頁,共185頁。 2高級語言(High Level Language) 如果說機器語言是面向機器的,那么高級語言(如BASIC,F(xiàn)ORTRAN等)則是“面向過程”的語言。利用這些語言編程,程序員可以完全不考慮機器的結(jié)構(gòu)特點,不必了解和熟記機器的指令系統(tǒng),僅使用一些接近人們書寫習慣的英語和數(shù)學表達式形式的語句去編制程序。這樣編寫的程序與問題本身的數(shù)學模型之間有著良好的對應關系,可在各種機器上通用(不同機器之間僅做少量修改)。但是,這種用高級語言編寫的源程序并不能在機器上直接執(zhí)行,需要被翻譯(fny)成對應的目標程序(即

2、機器語言程序),機器才能運行。把具有這種翻譯(fny)作用的程序稱為解釋程序或編譯程序,見圖5.1。 第1頁/共184頁第二頁,共185頁。用高級語言編寫的源程序編譯或解釋程序目標程序圖5.1 編譯程序(bin y chn x)的功能示意圖 由于高級語言程序是在未考慮機器的結(jié)構(gòu)特點的條件下編寫(binxi)的,因而它就不能充分利用某種具體CPU所具有的某些特性,而通過編譯或解釋程序生成的目標程序往往比較冗長, 占有較多的內(nèi)存空間,執(zhí)行時間也比較長,這就限制了它在某些場合下的運用。例如,實時的數(shù)據(jù)采集、檢測和在線的實時控制等,往往要求程序的目標代碼盡可能少占內(nèi)存并有盡可能快的執(zhí)行速度,在這些場合

3、下,使用高級語言編寫(binxi)的程序常常不能滿足要求。 第2頁/共184頁第三頁,共185頁。 3匯編語言(Assembly Language) 匯編語言是一種采用助記符表示的程序設計語言,即用助記符來表示指令的操作碼和操作數(shù),用標號或符號代表地址、常量或變量。助記符一般都是英文字的縮寫,以方便人們書寫、閱讀和檢查。實際上,用匯編語言編寫的匯編語言源程序就是機器語言程序的符號表示,匯編語言源程序與其(yq)經(jīng)過匯編所產(chǎn)生的目標代碼程序之間有明顯的一一對應關系,故也稱匯編語言為符號語言。 第3頁/共184頁第四頁,共185頁。 用匯編語言編寫程序能夠直接利用硬件系統(tǒng)的特性(如寄存器、標志、中

4、斷系統(tǒng)等)直接對位、字節(jié)、字寄存器或存儲單元、I/O端口進行處理,同時也能直接使用(shyng)CPU 指令系統(tǒng)和指令系統(tǒng)提供的各種尋址方式,編制出高質(zhì)量的程序,這樣的程序不但占用內(nèi)存空間少,而且執(zhí)行速度快。當然,由于源程序和所要解決的問題的數(shù)學模型之間的關系不夠直觀,使得匯編語言程序設計需要較多的軟件開發(fā)時間,也增加了程序設計過程中出錯的可能性。 用匯編語言編寫的源程序也需要翻譯成目標程序才能被機器執(zhí)行。這個翻譯過程稱為匯編,完成匯編任務的程序稱為匯編程序,見圖5.2。 第4頁/共184頁第五頁,共185頁。用匯編語言編寫的源程序匯編程序目標程序圖5.2 匯編程序(hu bin chn x)

5、的功能示意圖 第5頁/共184頁第六頁,共185頁。 匯編程序是最早也是最成熟的一種系統(tǒng)軟件。它除了能夠?qū)R編語言源程序翻譯成機器語言程序這一主要功能外,還能夠根據(jù)用戶的要求自動分配存儲區(qū)域(包括程序區(qū)、數(shù)據(jù)區(qū)、暫存區(qū)等);自動地把各種進位制數(shù)轉(zhuǎn)換成二進制數(shù),把字符轉(zhuǎn)換成ASCII碼,計算表達式的值等;自動對源程序進行(jnxng)檢查,給出錯誤信息(如非法格式,未定義的助記符、標號,漏掉操作數(shù)等)等。具有這些功能的匯編程序又稱為基本匯編(或小匯編ASM)。 在基本匯編的基礎上,進一步允許在源程序中把一個指令序列定義為一條宏指令的匯編程序,就叫做宏匯編(MASM)。它包含全部ASM功能,還增加

6、了宏指令、結(jié)構(gòu)、記錄等高級匯編語言功能。 第6頁/共184頁第七頁,共185頁。第7頁/共184頁第八頁,共185頁。第8頁/共184頁第九頁,共185頁。分段結(jié)構(gòu)分段結(jié)構(gòu) 由上面的例子可以看出,匯編語言源程序的結(jié)構(gòu)是分段結(jié)由上面的例子可以看出,匯編語言源程序的結(jié)構(gòu)是分段結(jié)構(gòu)形式,一個匯編語言源程序由若干段構(gòu)形式,一個匯編語言源程序由若干段(SEGMENT)組成,每個組成,每個段以段以SEGMENT語句開始,以語句開始,以ENDS語句結(jié)束。整個源程序的結(jié)語句結(jié)束。整個源程序的結(jié)尾是尾是END語句。語句。 這里所說的匯編語言源程序中的段與前面討論的這里所說的匯編語言源程序中的段與前面討論的CPU

7、管理管理的存儲器的段,既有聯(lián)系,又在概念上有所區(qū)別。我們已經(jīng)知的存儲器的段,既有聯(lián)系,又在概念上有所區(qū)別。我們已經(jīng)知道,微處理器對存儲器的管理是分段的,因此,在匯編語言程道,微處理器對存儲器的管理是分段的,因此,在匯編語言程序中也要求分段組織序中也要求分段組織(zzh)指令、數(shù)據(jù)和堆棧,以便將源程序指令、數(shù)據(jù)和堆棧,以便將源程序匯編成為目標程序后,可以分別裝入存儲器的相應段中。匯編成為目標程序后,可以分別裝入存儲器的相應段中。 第9頁/共184頁第十頁,共185頁。 但是(dnsh),以8086/8088 CPU為例,它有四個段寄存器(CS,ES,SS和DS),因此CPU對存儲器按照四個物理段

8、進行管理,即數(shù)據(jù)段、附加段、堆棧段和代碼段。任何時侯CPU只能訪問四個物理段。而在匯編語言源程序中,設置段的自由度比較大。例如,一個源程序中可以有多個數(shù)據(jù)段或多個代碼段等等。一般來說,匯編語言源程序中段的數(shù)目可以根據(jù)實際需要而設定。為了和CPU管理的存儲器物理段相區(qū)別,我們將匯編語言程序中的段稱為邏輯段。在不致發(fā)生混淆的地方,有時簡稱為段。第10頁/共184頁第十一頁,共185頁。 在上面的簡單源程序中只有兩個(lin )邏輯段,一個邏輯段的名字是DATA,其中存放著與程序有關的數(shù)據(jù),稱為邏輯數(shù)據(jù)段;另一個邏輯段的名字是CODE,其中包含著程序的指令,稱為邏輯代碼段。每個段內(nèi)均有若干行語句(S

9、TATEMENT),因此,可以說一個匯編源程序是由一行一行的語句組成的。下面我們來討論匯編語言語句的類型和組成。 第11頁/共184頁第十二頁,共185頁。第12頁/共184頁第十三頁,共185頁。第13頁/共184頁第十四頁,共185頁。第14頁/共184頁第十五頁,共185頁。匯編語言語句的類型和格式匯編語言語句的類型和格式 1語句的類型語句的類型 匯編語言源程序中的語句可以分為兩種類型:指令語句和偽指令匯編語言源程序中的語句可以分為兩種類型:指令語句和偽指令語句。語句。 (1) 指令語句:它是能產(chǎn)生目標代碼,指令語句:它是能產(chǎn)生目標代碼,CPU 可以執(zhí)行的能完成特可以執(zhí)行的能完成特定定(

10、tdng)功能的語句。功能的語句。 (2) 偽指令語句:它是一種不產(chǎn)生目標代碼的語句,它僅僅在匯編偽指令語句:它是一種不產(chǎn)生目標代碼的語句,它僅僅在匯編過程中告訴匯編程序應如何匯編。例如,告訴匯編程序已寫出的匯編過程中告訴匯編程序應如何匯編。例如,告訴匯編程序已寫出的匯編語言源程序有幾個段,段的名字是什么;定義變量,定義過程,給變語言源程序有幾個段,段的名字是什么;定義變量,定義過程,給變量分配存儲單元,給數(shù)字或表達式命名等。顯然,偽指令語句是匯編量分配存儲單元,給數(shù)字或表達式命名等。顯然,偽指令語句是匯編程序在匯編時使用的。程序在匯編時使用的。 第15頁/共184頁第十六頁,共185頁。第1

11、6頁/共184頁第十七頁,共185頁。第17頁/共184頁第十八頁,共185頁。第18頁/共184頁第十九頁,共185頁。第19頁/共184頁第二十頁,共185頁。第20頁/共184頁第二十一頁,共185頁。第21頁/共184頁第二十二頁,共185頁。第22頁/共184頁第二十三頁,共185頁。第23頁/共184頁第二十四頁,共185頁。第24頁/共184頁第二十五頁,共185頁。第25頁/共184頁第二十六頁,共185頁。第26頁/共184頁第二十七頁,共185頁。第27頁/共184頁第二十八頁,共185頁。第28頁/共184頁第二十九頁,共185頁。第29頁/共184頁第三十頁,共185頁

12、。第30頁/共184頁第三十一頁,共185頁。第31頁/共184頁第三十二頁,共185頁。第32頁/共184頁第三十三頁,共185頁。第33頁/共184頁第三十四頁,共185頁。第34頁/共184頁第三十五頁,共185頁。第35頁/共184頁第三十六頁,共185頁。第36頁/共184頁第三十七頁,共185頁。第37頁/共184頁第三十八頁,共185頁。第38頁/共184頁第三十九頁,共185頁。第39頁/共184頁第四十頁,共185頁。第40頁/共184頁第四十一頁,共185頁。第41頁/共184頁第四十二頁,共185頁。第42頁/共184頁第四十三頁,共185頁。第43頁/共184頁第四十四

13、頁,共185頁。第44頁/共184頁第四十五頁,共185頁。第45頁/共184頁第四十六頁,共185頁。第46頁/共184頁第四十七頁,共185頁。個雙字第47頁/共184頁第四十八頁,共185頁。第48頁/共184頁第四十九頁,共185頁。第49頁/共184頁第五十頁,共185頁。第50頁/共184頁第五十一頁,共185頁。第51頁/共184頁第五十二頁,共185頁。第52頁/共184頁第五十三頁,共185頁。第53頁/共184頁第五十四頁,共185頁。第54頁/共184頁第五十五頁,共185頁。第55頁/共184頁第五十六頁,共185頁。第56頁/共184頁第五十七頁,共185頁。第57頁

14、/共184頁第五十八頁,共185頁。第58頁/共184頁第五十九頁,共185頁。第59頁/共184頁第六十頁,共185頁。第60頁/共184頁第六十一頁,共185頁。第61頁/共184頁第六十二頁,共185頁。第62頁/共184頁第六十三頁,共185頁。第63頁/共184頁第六十四頁,共185頁。第64頁/共184頁第六十五頁,共185頁。 THIS運算符。THIS運算符也可指定存儲器操作數(shù)的類型。使用THIS運算符可以使標號或變量更具靈活性。例如,要求對同一個數(shù)據(jù)區(qū)既可以字節(jié)為單位,又可以字為單位進行存取,則可用以下語句:TAB1 EQU THIS WORDTAB2 DB 100 DUP(?

15、) 上面(shng min)TAB1和TAB2實際上代表同一個數(shù)據(jù)區(qū),其中共有100個字節(jié),但TAB1的類型為WORD(字類型),而TAB2的類型為BYTE(字節(jié)類型)。 第65頁/共184頁第六十六頁,共185頁。第66頁/共184頁第六十七頁,共185頁。第67頁/共184頁第六十八頁,共185頁。第68頁/共184頁第六十九頁,共185頁。5.3.3 段定義偽指令段定義偽指令 段定義偽指令的用途是在匯編語言源程序中定義邏輯段。常用的段定義偽指令有SEGMENT/ENDS和ASSUME等 。 1SEGMENT/ENDS 格式: 段名 SEGMENT 定位類型 組合類型 類別 段名 ENDS

16、 第69頁/共184頁第七十頁,共185頁。 SEGMENT 偽指令用于定義一個邏輯段,給邏輯段賦予一個段名,并以后面的任選項(定位類型、組合類型、類別)規(guī)定該邏輯段的其他特性。SEGMENT 偽指令位于一個邏輯段的開始部分,而ENDS偽指令則表示一個邏輯段的結(jié)束。在匯編語言源程序中,這兩個偽指令定義符總是成對出現(xiàn)的,二者前面的段名必須(bx)一致。兩個語句之間的部分即是該邏輯段的內(nèi)容。例如,對于代碼段,其中主要有指令及其他偽指令;對于數(shù)據(jù)段和附加段,主要有定義數(shù)據(jù)區(qū)的偽指令等等。一個源程序中不同邏輯段的段名可以各不相同。 第70頁/共184頁第七十一頁,共185頁。 1) 定位 (Align

17、) 類型 定位類型任選項告訴匯編程序如何確定邏輯段的邊界在存儲器中的位置。定位類型共有以下四種: BYTE(邊界起始地址= B) 該類型表示邏輯段從一個字節(jié)(z ji)的邊界開始,即可以從任何地址開始。此時本段的起始地址可緊接在前一個段的后面。 第71頁/共184頁第七十二頁,共185頁。 WORD(邊界起始地址= 0B) 該類型表示邏輯段從字的邊界開始。2字節(jié)為1個字,此時本段的起始地址必須是偶數(shù)(u sh)。 PARA(邊界起始地址= 0 0 0 0B) 該類型表示邏輯段從一個節(jié)(Paragraph)的邊界開始(一節(jié)等于16個字節(jié)),也即段的起始地址能被16整除。故本段的起始地址(十六進制

18、)應為0H。如果省略定位類型任選項,則默認其為PARA。 第72頁/共184頁第七十三頁,共185頁。 PAGE(邊界(binji)起始地址= 0 0 0 0 0 0 0 0B) 該類型表示邏輯段從頁邊界(binji)開始(一頁等于256個字節(jié)),也即段的起始地址能被256整除。故本段的起始地址(十六進制)應為00H。 第73頁/共184頁第七十四頁,共185頁。 2) 組合(Combine)類型 SEGMENT偽指令的第二個任選項是組合類型,它告訴匯編程序當裝入存儲器時各個(gg)邏輯段如何進行組合。組合類型共有以下六種。 (1) 不組合。如果SEGMENT偽指令的組合類型任選項缺省,則匯編

19、程序認為這個邏輯段是不組合的。也就是說,不同程序中的邏輯段,即使具有相同的段名,也分別作為不同的邏輯段裝入內(nèi)存,不進行組合。但是,對于組合類型任選項缺省的同名邏輯段,如果屬于同一個程序模塊,則被集中成為一個邏輯段。 第74頁/共184頁第七十五頁,共185頁。 (2) PUBLIC。連接時,對于不同程序模塊中的邏輯段,只要具有相同的段名,就把這些段集中成為一個邏輯段裝入內(nèi)存。 (3) STACK。組合(zh)類型為STACK時,其含意與PUBLIC基本一樣,即不同程序中的邏輯段,如果段名相同,則集中成為一個邏輯段。不過組合(zh)類型STACK僅限于作為堆棧區(qū)域的邏輯段使用。順便提一下,在執(zhí)行

20、程序(.EXE)中,堆棧指針SP設置在這個集中以后的堆棧段的(最終地址1)處。 第75頁/共184頁第七十六頁,共185頁。 (4) COMMON。連接時,對于不同程序中的邏輯段,如果具有相同的段名,則都從同一個地址開始裝入,因而(yn r)各個邏輯段將發(fā)生重疊。最后,連接以后段的長度等于原來最長的邏輯段的長度,重疊部分的內(nèi)容是最后一個邏輯段的內(nèi)容。 (5) MEMORY。該類型表示當幾個邏輯段連接時,本邏輯段定位在地址最高的地方。如果被連接的邏輯段中有多個段的組合類型都是MEMORY,則匯編程序只將首先遇到的段作為MEMORY段,而其余的段均當作COMMON段處理。 第76頁/共184頁第七

21、十七頁,共185頁。 (6) AT表達式。這種組合(zh)類型表示本邏輯段根據(jù)表達式的值定位段地址。例如AT 8A00H,表示本段的段地址為8A00H,則本段從存儲器的物理地址8A000H開始裝入。 第77頁/共184頁第七十八頁,共185頁。 3) 類別(Class) SEGMENT偽指令的第三個任選項是類別,類別必須放在單引號內(nèi)。類別的作用是在連接時決定各邏輯段的裝入順序。當幾個程序模塊進行連接時,其中具有相同類別名的邏輯段被裝入連續(xù)的內(nèi)存區(qū),類別名相同的邏輯段,按出現(xiàn)的先后順序排列。沒有類別名的邏輯段,與其他(qt)無類別名的邏輯段一起連續(xù)裝入內(nèi)存。 第78頁/共184頁第七十九頁,共1

22、85頁。 例如,假設(jish)一個主程序中有五個邏輯段,段名和類別名分別為:STK1段 STACKCODE1段 無DATA1段 BUFFER DATA2段 TABLE DATA3段 BUFFER 第79頁/共184頁第八十頁,共185頁。還有一個子程序,包括四個邏輯段,段名和類別(libi)名分別為: DATA4段 TABLE DATA5段 BUFFER STK2段 STACK CODE2段 無 當將上述主程序和子程序進行連接時,兩個(lin )程序模塊中各邏輯段裝入內(nèi)存的順序見圖5.3。第80頁/共184頁第八十一頁,共185頁。段名類別名主程序STK1STACKCODE1DATA1DAT

23、A2DATA3無BUFFERTABLEBUFFER段名類別名子程序DATA4DATA5STK2TABLEBUFFERSTACKCODE2無無DATA1DATA3DATA5DATA2DATA4CODE2CODE1STK2STK1存儲器STACK無類別名BUFFERTABLE圖5.3 邏輯段按類別(libi)裝入內(nèi)存的示意圖 第81頁/共184頁第八十二頁,共185頁。 SEGMENT偽指令后面還有三個任選項:定位類型、組合類型和類別。在上面的格式中,它們都放在方括號內(nèi),表示可有可無。如果有,三者的順序必須符合格式中的規(guī)定。這些任選項是給匯編程序(MASM)和連接程序(LINK)的命令。 SEGM

24、ENT偽指令后面的任選項告訴匯編程序和連接程序,如何確定段的邊界,以及如何組合幾個不同的段等。下面(xi mian)分別進行討論。 第82頁/共184頁第八十三頁,共185頁。第83頁/共184頁第八十四頁,共185頁。第84頁/共184頁第八十五頁,共185頁。第85頁/共184頁第八十六頁,共185頁。第86頁/共184頁第八十七頁,共185頁。匯編語言匯編語言(hu bin y yn)和和DOS操作系統(tǒng)的接口操作系統(tǒng)的接口 當我們編寫的匯編語言當我們編寫的匯編語言(hu bin y yn)源程序是在源程序是在DOS環(huán)境環(huán)境下運行時,必須了解匯編語言下運行時,必須了解匯編語言(hu bin

25、 y yn)是如何同是如何同DOS操作操作系統(tǒng)接口的。系統(tǒng)接口的。 當我們用編輯程序把源程序輸入到機器中,用匯編程序把它轉(zhuǎn)當我們用編輯程序把源程序輸入到機器中,用匯編程序把它轉(zhuǎn)換為目標程序,用連接程序?qū)ζ溥M行連接和定位時,操作系統(tǒng)為每換為目標程序,用連接程序?qū)ζ溥M行連接和定位時,操作系統(tǒng)為每一個用戶程序建立了一個程序段前綴區(qū)一個用戶程序建立了一個程序段前綴區(qū)PSP,其長度為,其長度為256個字節(jié),個字節(jié),主要用于存放所要執(zhí)行程序的有關信息,同時也提供了程序和操作主要用于存放所要執(zhí)行程序的有關信息,同時也提供了程序和操作系統(tǒng)的接口。操作系統(tǒng)在程序段前綴的開始處系統(tǒng)的接口。操作系統(tǒng)在程序段前綴的開

26、始處(偏移地址偏移地址0000H)安安排了一條排了一條INT 20H軟中斷指令。軟中斷指令。INT 20H中斷服務程序由中斷服務程序由DOS提供,提供,執(zhí)行該服務程序后,控制就轉(zhuǎn)移到執(zhí)行該服務程序后,控制就轉(zhuǎn)移到DOS,即返回到,即返回到DOS管理的狀態(tài)。管理的狀態(tài)。因此,用戶在組織程序時,必須使程序執(zhí)行完后能去執(zhí)行存放于因此,用戶在組織程序時,必須使程序執(zhí)行完后能去執(zhí)行存放于PSP開始處的開始處的INT 20H指令,這樣便返回到指令,這樣便返回到DOS,否則就無法繼續(xù),否則就無法繼續(xù)鍵入命令和程序。鍵入命令和程序。 第87頁/共184頁第八十八頁,共185頁。 DOS在建立了程序段前綴區(qū)PS

27、P之后,就將要執(zhí)行的程序從磁盤裝入內(nèi)存。在定位程序時,DOS將代碼段置于PSP下方,代碼段之后是數(shù)據(jù)段,最后放置堆棧段。內(nèi)存分配好之后,DOS就設置段寄存器DS和ES的值,以使它們指向PSP的開始處,即INT 20H的存放地址,同時將CS設置為PSP后面代碼段的段地址,IP設置為指向代碼段中第一條要執(zhí)行的指令(zhlng)位置,把SS設置為指向堆棧的段地址,讓SP指向堆棧段的棧底(取決于堆棧的長度),然后系統(tǒng)開始執(zhí)行用戶程序。 為了保證用戶程序執(zhí)行完后能返回到DOS狀態(tài),可使用如下兩種方法。 第88頁/共184頁第八十九頁,共185頁。 1標準方法 首先將用戶程序的主程序定義成一個FAR過程,

28、其最后一條指令為RET。然后在代碼段的主程序(即FAR過程)的開始部分用如下(rxi)三條指令將PSP中INT 20H 指令的段地址及偏移地址壓入堆棧:PUSH DS ;保護PSP段地址MOV AX,0 ;保護偏移地址0PUSH AX 第89頁/共184頁第九十頁,共185頁。 這樣,當程序執(zhí)行到主程序的最后一條指令RET時,由于該過程具有FAR屬性,故存在堆棧內(nèi)的兩個字就分別彈出到CS和IP,從而執(zhí)行INT 20H指令,使控制返回到DOS狀態(tài)。例如(lr)上面的多字節(jié)相加程序就是采用這種方法使控制返回到DOS狀態(tài)的(返回DOS的標志就是程序運行完后出現(xiàn)一個DOS的標識符,如C)。 第90頁/

29、共184頁第九十一頁,共185頁。 2. 非標準方法 也可在用戶的程序中不定義過程段,只在代碼段結(jié)束之前(即CODE ENDS之前)增加(zngji)兩條語句:MOV AH,4CHINT 21H則程序執(zhí)行完后也會自動返回DOS狀態(tài)。 第91頁/共184頁第九十二頁,共185頁。第92頁/共184頁第九十三頁,共185頁。第93頁/共184頁第九十四頁,共185頁。第94頁/共184頁第九十五頁,共185頁。第95頁/共184頁第九十六頁,共185頁。第96頁/共184頁第九十七頁,共185頁。第97頁/共184頁第九十八頁,共185頁。第98頁/共184頁第九十九頁,共185頁。第99頁/共1

30、84頁第一百頁,共185頁。第100頁/共184頁第一百零一頁,共185頁。第101頁/共184頁第一百零二頁,共185頁。第102頁/共184頁第一百零三頁,共185頁。匯編語言匯編語言(hu bin y yn)程序設計程序設計 通常, 編制一個匯編語言程序應按如下(rxi)步驟進行: 明確任務, 確定算法。 繪流程圖。 根據(jù)流程圖編寫匯編語言程序。 上機調(diào)試程序。 第103頁/共184頁第一百零四頁,共185頁。圖 6.3 標準(biozhn)流程圖符號 起始和終止框執(zhí)行判斷框連接框第104頁/共184頁第一百零五頁,共185頁。順序程序設計順序程序設計(shj)圖 6.4 順序(shnx

31、)結(jié)構(gòu)流程圖 開始S1S2S3結(jié)束第105頁/共184頁第一百零六頁,共185頁。 例例 6.5 試編制一程序試編制一程序(chngx),求出下列公式中的,求出下列公式中的Z值,并存放在值,并存放在RESULT單元中:單元中: 28)(XYXZ其中X,Y的值分別(fnbi)存放在VARX,VARY單元中。源程序編制如下: TITLE EXAMPLE 1 DATA SEGMENT 2 VARX DW 6 3 VARY DW 7 4 RESULT DW ? 5 DATA ENDS 第106頁/共184頁第一百零七頁,共185頁。 6 STACK1 SEGMENT PARA STACK 7 DW 2

32、0H DUP(0) 8 STACK1 ENDS 9 COSEG SEGMENT 10 ASSUME CS: COSEG, DS: DATA, SS: STACK1 11 PROC1 PROC FAR 12 START: PUSH DS 13 MOV AX,0 14 PUSH AX 15 MOV AX,DATA 16 MOV DS, AX 17 MOV DX, VARX ;DXX 第107頁/共184頁第一百零八頁,共185頁。 18 ADD DX, VARY ;DX (X+Y) 19 MOV CL, 3 20 SAL DX, CL ;DX (X+Y)*8 21 SUB DX, VARX ;DX

33、 (X+Y)*8-X 22 SAR DX,1 ;DX (X+Y)*8-X)/2 23 MOV RESULT,DX ; 存結(jié)果 24 RET 25 PROC1 ENDP 26 COSEG ENDS 27 END START 第108頁/共184頁第一百零九頁,共185頁。圖 6.5 用戶程序裝入內(nèi)存(ni cn)后的內(nèi)存(ni cn)分配情況 系統(tǒng)占用程序段前綴用戶數(shù)據(jù)段用戶堆棧段用戶代碼系統(tǒng)和ROM占用0HDS,ESSSCS0FFFFFH共100H個字節(jié)用戶空間第109頁/共184頁第一百一十頁,共185頁。 結(jié)束用戶程序, 返回操作系統(tǒng)的另一個辦法是用中斷指令“INT 21H”。如使用這種辦

34、法,用戶程序可以不設置過程(guchng), 只要在用戶程序結(jié)束時,用以下兩條指令即可: MOV AH, 4CH INT 21H 這樣(zhyng),上述程序的代碼段可以修改為: COSEG SEGMEN T ASSUME CS: COSEG, DS: DATA ASSUME SS: STACK1 第110頁/共184頁第一百一十一頁,共185頁。START: MOV AX, DATA MOV DS, AX MOV DX, VARX ADD DX, VARY MOV CL,3 SAL DX, CL SUB DX, VARX SAR DX,1 MOV RESULT, DX MOV AH, 4CH

35、 INT 21H COSEG ENDS END START 第111頁/共184頁第一百一十二頁,共185頁。 例例 用查表的方法將一位十六進制數(shù)轉(zhuǎn)換成與它相應的用查表的方法將一位十六進制數(shù)轉(zhuǎn)換成與它相應的ASCII碼。碼。 既然指定用查表的方法,那么首先要建立既然指定用查表的方法,那么首先要建立(jinl)一個表一個表TABLE。 我們在表中按照十六進制數(shù)從小到大的順序放入它們對應的我們在表中按照十六進制數(shù)從小到大的順序放入它們對應的ASCII碼碼值。編制的源程序如下:值。編制的源程序如下: DATA SEGMENT TABLE DB 30H,31H,32H,33H,34H,35H,36H,

36、37H DB 38H,39H,41H,42H,43H,44H,45H,46H HEX DB 4 ASCI DB ? DATA ENDS STACK1 SEGMENT PARA STACK DW 20H DUP(0) 第112頁/共184頁第一百一十三頁,共185頁。STACK1 ENDS COSEG SEGMENT ASSUME CS: COSEG, DS: DATA, SS: STACK1 BEING: MOV AX, DATA MOV DS, AX MOV BX, OFFSET TABLE MOV AH,0 MOV AL, HEX ADD BX, AX MOV AL, BX MOV ASC

37、I, AL MOV AH, 4CH INT 21H COSEG ENDS END BEING 第113頁/共184頁第一百一十四頁,共185頁。 類似這種查表, 如使用換碼指令XLAT(Translate), 程序可以更加精練。 換碼指令格式: XLAT 表首址 指令功能: AL(BX)+(AL) 使用這條指令,通常是把表首址的偏移量送入BX中,而把要查找(ch zho)表內(nèi)單元的偏移量(0255)送入AL中。這樣,上述程序中代碼段的有關語句可以修改為 BEING: MOV AX, DATA MOV DS, AX MOV BX, OFFSET TABLE MOV AL, HEX XLAT TA

38、BLE MOV ASCI, AL 第114頁/共184頁第一百一十五頁,共185頁。例5.8 求兩個數(shù)的平均值。這兩個數(shù)分別放在x單元(dnyun)和y單元(dnyun)中,而平均值放在z單元(dnyun)中。程序如下:DATA SEGMENT x DB 95 y DB 87 z DB ? 第115頁/共184頁第一百一十六頁,共185頁。DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATA MAINPROC FARSTART:PUSHDS MOV AX,0 PUSH AX MOV AX,DATA;裝填(zhun tin)數(shù)據(jù)段寄存器DS MOV DS,AX MO

39、V AL,x ;第一個數(shù)送入AL 第116頁/共184頁第一百一十七頁,共185頁。ADD AL,y ;兩數(shù)相加,結(jié)果送ALMOV AH,0ADC AH,0 ;帶進位(jnwi)加法,進位(jnwi)送AHMOV BL,2 ;除數(shù)2送BLDIV BL ;求平均值送ALMOV z,AL ;結(jié)果送入z單元RET MAIN ENDPCODEENDSEND START 第117頁/共184頁第一百一十八頁,共185頁。 例5.9 在內(nèi)存中自tab開始的16個單元連續(xù)存放著015的平方值(平方表),任給一個數(shù)x(0 x15),如13,且存放在x單元中,查表求x的平方值,并把結(jié)果送入y單元中。根據(jù)給出的平

40、方表,分析表的存放規(guī)律,可知表的起始地址與數(shù)之和,正是的平方值所在(suzi)單元的地址,由此編制程序如下: DATA SEGMENT tabDB 0,1,4,9,16,25,36,49,64,81 DB 100,121,144,169,196,225 x DB 13 y DB ?DATA ENDS 第118頁/共184頁第一百一十九頁,共185頁。CODE SEGMENTASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX LEA BX,tab MOV AH,0 MOV AL,x ADD BX,AX MOV AL,BX MOV y,AL MOV A

41、H,4CH INT 21H CODE ENDS END START 第119頁/共184頁第一百二十頁,共185頁。第120頁/共184頁第一百二十一頁,共185頁。第121頁/共184頁第一百二十二頁,共185頁。第122頁/共184頁第一百二十三頁,共185頁。第123頁/共184頁第一百二十四頁,共185頁。第124頁/共184頁第一百二十五頁,共185頁。第125頁/共184頁第一百二十六頁,共185頁。第126頁/共184頁第一百二十七頁,共185頁。第127頁/共184頁第一百二十八頁,共185頁。第128頁/共184頁第一百二十九頁,共185頁。第129頁/共184頁第一百三十頁,共185頁。第130頁/共184頁第一百三十一頁,共1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論