版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、會(huì)計(jì)學(xué)1匯編語(yǔ)言匯編語(yǔ)言(hu bin y yn)程序設(shè)計(jì)補(bǔ)充程序設(shè)計(jì)補(bǔ)充第一頁(yè),共185頁(yè)。 2高級(jí)語(yǔ)言(High Level Language) 如果說(shuō)機(jī)器語(yǔ)言是面向機(jī)器的,那么高級(jí)語(yǔ)言(如BASIC,F(xiàn)ORTRAN等)則是“面向過(guò)程”的語(yǔ)言。利用這些語(yǔ)言編程,程序員可以完全不考慮機(jī)器的結(jié)構(gòu)特點(diǎn),不必了解和熟記機(jī)器的指令系統(tǒng),僅使用一些接近人們書(shū)寫(xiě)習(xí)慣的英語(yǔ)和數(shù)學(xué)表達(dá)式形式的語(yǔ)句去編制程序。這樣編寫(xiě)的程序與問(wèn)題本身的數(shù)學(xué)模型之間有著良好的對(duì)應(yīng)關(guān)系,可在各種機(jī)器上通用(不同機(jī)器之間僅做少量修改)。但是,這種用高級(jí)語(yǔ)言編寫(xiě)的源程序并不能在機(jī)器上直接執(zhí)行,需要被翻譯(fny)成對(duì)應(yīng)的目標(biāo)程序(即
2、機(jī)器語(yǔ)言程序),機(jī)器才能運(yùn)行。把具有這種翻譯(fny)作用的程序稱(chēng)為解釋程序或編譯程序,見(jiàn)圖5.1。 第1頁(yè)/共184頁(yè)第二頁(yè),共185頁(yè)。用高級(jí)語(yǔ)言編寫(xiě)的源程序編譯或解釋程序目標(biāo)程序圖5.1 編譯程序(bin y chn x)的功能示意圖 由于高級(jí)語(yǔ)言程序是在未考慮機(jī)器的結(jié)構(gòu)特點(diǎn)的條件下編寫(xiě)(binxi)的,因而它就不能充分利用某種具體CPU所具有的某些特性,而通過(guò)編譯或解釋程序生成的目標(biāo)程序往往比較冗長(zhǎng), 占有較多的內(nèi)存空間,執(zhí)行時(shí)間也比較長(zhǎng),這就限制了它在某些場(chǎng)合下的運(yùn)用。例如,實(shí)時(shí)的數(shù)據(jù)采集、檢測(cè)和在線的實(shí)時(shí)控制等,往往要求程序的目標(biāo)代碼盡可能少占內(nèi)存并有盡可能快的執(zhí)行速度,在這些場(chǎng)合
3、下,使用高級(jí)語(yǔ)言編寫(xiě)(binxi)的程序常常不能滿足要求。 第2頁(yè)/共184頁(yè)第三頁(yè),共185頁(yè)。 3匯編語(yǔ)言(Assembly Language) 匯編語(yǔ)言是一種采用助記符表示的程序設(shè)計(jì)語(yǔ)言,即用助記符來(lái)表示指令的操作碼和操作數(shù),用標(biāo)號(hào)或符號(hào)代表地址、常量或變量。助記符一般都是英文字的縮寫(xiě),以方便人們書(shū)寫(xiě)、閱讀和檢查。實(shí)際上,用匯編語(yǔ)言編寫(xiě)的匯編語(yǔ)言源程序就是機(jī)器語(yǔ)言程序的符號(hào)表示,匯編語(yǔ)言源程序與其(yq)經(jīng)過(guò)匯編所產(chǎn)生的目標(biāo)代碼程序之間有明顯的一一對(duì)應(yīng)關(guān)系,故也稱(chēng)匯編語(yǔ)言為符號(hào)語(yǔ)言。 第3頁(yè)/共184頁(yè)第四頁(yè),共185頁(yè)。 用匯編語(yǔ)言編寫(xiě)程序能夠直接利用硬件系統(tǒng)的特性(如寄存器、標(biāo)志、中
4、斷系統(tǒng)等)直接對(duì)位、字節(jié)、字寄存器或存儲(chǔ)單元、I/O端口進(jìn)行處理,同時(shí)也能直接使用(shyng)CPU 指令系統(tǒng)和指令系統(tǒng)提供的各種尋址方式,編制出高質(zhì)量的程序,這樣的程序不但占用內(nèi)存空間少,而且執(zhí)行速度快。當(dāng)然,由于源程序和所要解決的問(wèn)題的數(shù)學(xué)模型之間的關(guān)系不夠直觀,使得匯編語(yǔ)言程序設(shè)計(jì)需要較多的軟件開(kāi)發(fā)時(shí)間,也增加了程序設(shè)計(jì)過(guò)程中出錯(cuò)的可能性。 用匯編語(yǔ)言編寫(xiě)的源程序也需要翻譯成目標(biāo)程序才能被機(jī)器執(zhí)行。這個(gè)翻譯過(guò)程稱(chēng)為匯編,完成匯編任務(wù)的程序稱(chēng)為匯編程序,見(jiàn)圖5.2。 第4頁(yè)/共184頁(yè)第五頁(yè),共185頁(yè)。用匯編語(yǔ)言編寫(xiě)的源程序匯編程序目標(biāo)程序圖5.2 匯編程序(hu bin chn x)
5、的功能示意圖 第5頁(yè)/共184頁(yè)第六頁(yè),共185頁(yè)。 匯編程序是最早也是最成熟的一種系統(tǒng)軟件。它除了能夠?qū)R編語(yǔ)言源程序翻譯成機(jī)器語(yǔ)言程序這一主要功能外,還能夠根據(jù)用戶的要求自動(dòng)分配存儲(chǔ)區(qū)域(包括程序區(qū)、數(shù)據(jù)區(qū)、暫存區(qū)等);自動(dòng)地把各種進(jìn)位制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),把字符轉(zhuǎn)換成ASCII碼,計(jì)算表達(dá)式的值等;自動(dòng)對(duì)源程序進(jìn)行(jnxng)檢查,給出錯(cuò)誤信息(如非法格式,未定義的助記符、標(biāo)號(hào),漏掉操作數(shù)等)等。具有這些功能的匯編程序又稱(chēng)為基本匯編(或小匯編ASM)。 在基本匯編的基礎(chǔ)上,進(jìn)一步允許在源程序中把一個(gè)指令序列定義為一條宏指令的匯編程序,就叫做宏匯編(MASM)。它包含全部ASM功能,還增加
6、了宏指令、結(jié)構(gòu)、記錄等高級(jí)匯編語(yǔ)言功能。 第6頁(yè)/共184頁(yè)第七頁(yè),共185頁(yè)。第7頁(yè)/共184頁(yè)第八頁(yè),共185頁(yè)。第8頁(yè)/共184頁(yè)第九頁(yè),共185頁(yè)。分段結(jié)構(gòu)分段結(jié)構(gòu) 由上面的例子可以看出,匯編語(yǔ)言源程序的結(jié)構(gòu)是分段結(jié)由上面的例子可以看出,匯編語(yǔ)言源程序的結(jié)構(gòu)是分段結(jié)構(gòu)形式,一個(gè)匯編語(yǔ)言源程序由若干段構(gòu)形式,一個(gè)匯編語(yǔ)言源程序由若干段(SEGMENT)組成,每個(gè)組成,每個(gè)段以段以SEGMENT語(yǔ)句開(kāi)始,以語(yǔ)句開(kāi)始,以ENDS語(yǔ)句結(jié)束。整個(gè)源程序的結(jié)語(yǔ)句結(jié)束。整個(gè)源程序的結(jié)尾是尾是END語(yǔ)句。語(yǔ)句。 這里所說(shuō)的匯編語(yǔ)言源程序中的段與前面討論的這里所說(shuō)的匯編語(yǔ)言源程序中的段與前面討論的CPU
7、管理管理的存儲(chǔ)器的段,既有聯(lián)系,又在概念上有所區(qū)別。我們已經(jīng)知的存儲(chǔ)器的段,既有聯(lián)系,又在概念上有所區(qū)別。我們已經(jīng)知道,微處理器對(duì)存儲(chǔ)器的管理是分段的,因此,在匯編語(yǔ)言程道,微處理器對(duì)存儲(chǔ)器的管理是分段的,因此,在匯編語(yǔ)言程序中也要求分段組織序中也要求分段組織(zzh)指令、數(shù)據(jù)和堆棧,以便將源程序指令、數(shù)據(jù)和堆棧,以便將源程序匯編成為目標(biāo)程序后,可以分別裝入存儲(chǔ)器的相應(yīng)段中。匯編成為目標(biāo)程序后,可以分別裝入存儲(chǔ)器的相應(yīng)段中。 第9頁(yè)/共184頁(yè)第十頁(yè),共185頁(yè)。 但是(dnsh),以8086/8088 CPU為例,它有四個(gè)段寄存器(CS,ES,SS和DS),因此CPU對(duì)存儲(chǔ)器按照四個(gè)物理段
8、進(jìn)行管理,即數(shù)據(jù)段、附加段、堆棧段和代碼段。任何時(shí)侯CPU只能訪問(wèn)四個(gè)物理段。而在匯編語(yǔ)言源程序中,設(shè)置段的自由度比較大。例如,一個(gè)源程序中可以有多個(gè)數(shù)據(jù)段或多個(gè)代碼段等等。一般來(lái)說(shuō),匯編語(yǔ)言源程序中段的數(shù)目可以根據(jù)實(shí)際需要而設(shè)定。為了和CPU管理的存儲(chǔ)器物理段相區(qū)別,我們將匯編語(yǔ)言程序中的段稱(chēng)為邏輯段。在不致發(fā)生混淆的地方,有時(shí)簡(jiǎn)稱(chēng)為段。第10頁(yè)/共184頁(yè)第十一頁(yè),共185頁(yè)。 在上面的簡(jiǎn)單源程序中只有兩個(gè)(lin )邏輯段,一個(gè)邏輯段的名字是DATA,其中存放著與程序有關(guān)的數(shù)據(jù),稱(chēng)為邏輯數(shù)據(jù)段;另一個(gè)邏輯段的名字是CODE,其中包含著程序的指令,稱(chēng)為邏輯代碼段。每個(gè)段內(nèi)均有若干行語(yǔ)句(S
9、TATEMENT),因此,可以說(shuō)一個(gè)匯編源程序是由一行一行的語(yǔ)句組成的。下面我們來(lái)討論匯編語(yǔ)言語(yǔ)句的類(lèi)型和組成。 第11頁(yè)/共184頁(yè)第十二頁(yè),共185頁(yè)。第12頁(yè)/共184頁(yè)第十三頁(yè),共185頁(yè)。第13頁(yè)/共184頁(yè)第十四頁(yè),共185頁(yè)。第14頁(yè)/共184頁(yè)第十五頁(yè),共185頁(yè)。匯編語(yǔ)言語(yǔ)句的類(lèi)型和格式匯編語(yǔ)言語(yǔ)句的類(lèi)型和格式 1語(yǔ)句的類(lèi)型語(yǔ)句的類(lèi)型 匯編語(yǔ)言源程序中的語(yǔ)句可以分為兩種類(lèi)型:指令語(yǔ)句和偽指令匯編語(yǔ)言源程序中的語(yǔ)句可以分為兩種類(lèi)型:指令語(yǔ)句和偽指令語(yǔ)句。語(yǔ)句。 (1) 指令語(yǔ)句:它是能產(chǎn)生目標(biāo)代碼,指令語(yǔ)句:它是能產(chǎn)生目標(biāo)代碼,CPU 可以執(zhí)行的能完成特可以執(zhí)行的能完成特定定(
10、tdng)功能的語(yǔ)句。功能的語(yǔ)句。 (2) 偽指令語(yǔ)句:它是一種不產(chǎn)生目標(biāo)代碼的語(yǔ)句,它僅僅在匯編偽指令語(yǔ)句:它是一種不產(chǎn)生目標(biāo)代碼的語(yǔ)句,它僅僅在匯編過(guò)程中告訴匯編程序應(yīng)如何匯編。例如,告訴匯編程序已寫(xiě)出的匯編過(guò)程中告訴匯編程序應(yīng)如何匯編。例如,告訴匯編程序已寫(xiě)出的匯編語(yǔ)言源程序有幾個(gè)段,段的名字是什么;定義變量,定義過(guò)程,給變語(yǔ)言源程序有幾個(gè)段,段的名字是什么;定義變量,定義過(guò)程,給變量分配存儲(chǔ)單元,給數(shù)字或表達(dá)式命名等。顯然,偽指令語(yǔ)句是匯編量分配存儲(chǔ)單元,給數(shù)字或表達(dá)式命名等。顯然,偽指令語(yǔ)句是匯編程序在匯編時(shí)使用的。程序在匯編時(shí)使用的。 第15頁(yè)/共184頁(yè)第十六頁(yè),共185頁(yè)。第1
11、6頁(yè)/共184頁(yè)第十七頁(yè),共185頁(yè)。第17頁(yè)/共184頁(yè)第十八頁(yè),共185頁(yè)。第18頁(yè)/共184頁(yè)第十九頁(yè),共185頁(yè)。第19頁(yè)/共184頁(yè)第二十頁(yè),共185頁(yè)。第20頁(yè)/共184頁(yè)第二十一頁(yè),共185頁(yè)。第21頁(yè)/共184頁(yè)第二十二頁(yè),共185頁(yè)。第22頁(yè)/共184頁(yè)第二十三頁(yè),共185頁(yè)。第23頁(yè)/共184頁(yè)第二十四頁(yè),共185頁(yè)。第24頁(yè)/共184頁(yè)第二十五頁(yè),共185頁(yè)。第25頁(yè)/共184頁(yè)第二十六頁(yè),共185頁(yè)。第26頁(yè)/共184頁(yè)第二十七頁(yè),共185頁(yè)。第27頁(yè)/共184頁(yè)第二十八頁(yè),共185頁(yè)。第28頁(yè)/共184頁(yè)第二十九頁(yè),共185頁(yè)。第29頁(yè)/共184頁(yè)第三十頁(yè),共185頁(yè)
12、。第30頁(yè)/共184頁(yè)第三十一頁(yè),共185頁(yè)。第31頁(yè)/共184頁(yè)第三十二頁(yè),共185頁(yè)。第32頁(yè)/共184頁(yè)第三十三頁(yè),共185頁(yè)。第33頁(yè)/共184頁(yè)第三十四頁(yè),共185頁(yè)。第34頁(yè)/共184頁(yè)第三十五頁(yè),共185頁(yè)。第35頁(yè)/共184頁(yè)第三十六頁(yè),共185頁(yè)。第36頁(yè)/共184頁(yè)第三十七頁(yè),共185頁(yè)。第37頁(yè)/共184頁(yè)第三十八頁(yè),共185頁(yè)。第38頁(yè)/共184頁(yè)第三十九頁(yè),共185頁(yè)。第39頁(yè)/共184頁(yè)第四十頁(yè),共185頁(yè)。第40頁(yè)/共184頁(yè)第四十一頁(yè),共185頁(yè)。第41頁(yè)/共184頁(yè)第四十二頁(yè),共185頁(yè)。第42頁(yè)/共184頁(yè)第四十三頁(yè),共185頁(yè)。第43頁(yè)/共184頁(yè)第四十四
13、頁(yè),共185頁(yè)。第44頁(yè)/共184頁(yè)第四十五頁(yè),共185頁(yè)。第45頁(yè)/共184頁(yè)第四十六頁(yè),共185頁(yè)。第46頁(yè)/共184頁(yè)第四十七頁(yè),共185頁(yè)。個(gè)雙字第47頁(yè)/共184頁(yè)第四十八頁(yè),共185頁(yè)。第48頁(yè)/共184頁(yè)第四十九頁(yè),共185頁(yè)。第49頁(yè)/共184頁(yè)第五十頁(yè),共185頁(yè)。第50頁(yè)/共184頁(yè)第五十一頁(yè),共185頁(yè)。第51頁(yè)/共184頁(yè)第五十二頁(yè),共185頁(yè)。第52頁(yè)/共184頁(yè)第五十三頁(yè),共185頁(yè)。第53頁(yè)/共184頁(yè)第五十四頁(yè),共185頁(yè)。第54頁(yè)/共184頁(yè)第五十五頁(yè),共185頁(yè)。第55頁(yè)/共184頁(yè)第五十六頁(yè),共185頁(yè)。第56頁(yè)/共184頁(yè)第五十七頁(yè),共185頁(yè)。第57頁(yè)
14、/共184頁(yè)第五十八頁(yè),共185頁(yè)。第58頁(yè)/共184頁(yè)第五十九頁(yè),共185頁(yè)。第59頁(yè)/共184頁(yè)第六十頁(yè),共185頁(yè)。第60頁(yè)/共184頁(yè)第六十一頁(yè),共185頁(yè)。第61頁(yè)/共184頁(yè)第六十二頁(yè),共185頁(yè)。第62頁(yè)/共184頁(yè)第六十三頁(yè),共185頁(yè)。第63頁(yè)/共184頁(yè)第六十四頁(yè),共185頁(yè)。第64頁(yè)/共184頁(yè)第六十五頁(yè),共185頁(yè)。 THIS運(yùn)算符。THIS運(yùn)算符也可指定存儲(chǔ)器操作數(shù)的類(lèi)型。使用THIS運(yùn)算符可以使標(biāo)號(hào)或變量更具靈活性。例如,要求對(duì)同一個(gè)數(shù)據(jù)區(qū)既可以字節(jié)為單位,又可以字為單位進(jìn)行存取,則可用以下語(yǔ)句:TAB1 EQU THIS WORDTAB2 DB 100 DUP(?
15、) 上面(shng min)TAB1和TAB2實(shí)際上代表同一個(gè)數(shù)據(jù)區(qū),其中共有100個(gè)字節(jié),但TAB1的類(lèi)型為WORD(字類(lèi)型),而TAB2的類(lèi)型為BYTE(字節(jié)類(lèi)型)。 第65頁(yè)/共184頁(yè)第六十六頁(yè),共185頁(yè)。第66頁(yè)/共184頁(yè)第六十七頁(yè),共185頁(yè)。第67頁(yè)/共184頁(yè)第六十八頁(yè),共185頁(yè)。第68頁(yè)/共184頁(yè)第六十九頁(yè),共185頁(yè)。5.3.3 段定義偽指令段定義偽指令 段定義偽指令的用途是在匯編語(yǔ)言源程序中定義邏輯段。常用的段定義偽指令有SEGMENT/ENDS和ASSUME等 。 1SEGMENT/ENDS 格式: 段名 SEGMENT 定位類(lèi)型 組合類(lèi)型 類(lèi)別 段名 ENDS
16、 第69頁(yè)/共184頁(yè)第七十頁(yè),共185頁(yè)。 SEGMENT 偽指令用于定義一個(gè)邏輯段,給邏輯段賦予一個(gè)段名,并以后面的任選項(xiàng)(定位類(lèi)型、組合類(lèi)型、類(lèi)別)規(guī)定該邏輯段的其他特性。SEGMENT 偽指令位于一個(gè)邏輯段的開(kāi)始部分,而ENDS偽指令則表示一個(gè)邏輯段的結(jié)束。在匯編語(yǔ)言源程序中,這兩個(gè)偽指令定義符總是成對(duì)出現(xiàn)的,二者前面的段名必須(bx)一致。兩個(gè)語(yǔ)句之間的部分即是該邏輯段的內(nèi)容。例如,對(duì)于代碼段,其中主要有指令及其他偽指令;對(duì)于數(shù)據(jù)段和附加段,主要有定義數(shù)據(jù)區(qū)的偽指令等等。一個(gè)源程序中不同邏輯段的段名可以各不相同。 第70頁(yè)/共184頁(yè)第七十一頁(yè),共185頁(yè)。 1) 定位 (Align
17、) 類(lèi)型 定位類(lèi)型任選項(xiàng)告訴匯編程序如何確定邏輯段的邊界在存儲(chǔ)器中的位置。定位類(lèi)型共有以下四種: BYTE(邊界起始地址= B) 該類(lèi)型表示邏輯段從一個(gè)字節(jié)(z ji)的邊界開(kāi)始,即可以從任何地址開(kāi)始。此時(shí)本段的起始地址可緊接在前一個(gè)段的后面。 第71頁(yè)/共184頁(yè)第七十二頁(yè),共185頁(yè)。 WORD(邊界起始地址= 0B) 該類(lèi)型表示邏輯段從字的邊界開(kāi)始。2字節(jié)為1個(gè)字,此時(shí)本段的起始地址必須是偶數(shù)(u sh)。 PARA(邊界起始地址= 0 0 0 0B) 該類(lèi)型表示邏輯段從一個(gè)節(jié)(Paragraph)的邊界開(kāi)始(一節(jié)等于16個(gè)字節(jié)),也即段的起始地址能被16整除。故本段的起始地址(十六進(jìn)制
18、)應(yīng)為0H。如果省略定位類(lèi)型任選項(xiàng),則默認(rèn)其為PARA。 第72頁(yè)/共184頁(yè)第七十三頁(yè),共185頁(yè)。 PAGE(邊界(binji)起始地址= 0 0 0 0 0 0 0 0B) 該類(lèi)型表示邏輯段從頁(yè)邊界(binji)開(kāi)始(一頁(yè)等于256個(gè)字節(jié)),也即段的起始地址能被256整除。故本段的起始地址(十六進(jìn)制)應(yīng)為00H。 第73頁(yè)/共184頁(yè)第七十四頁(yè),共185頁(yè)。 2) 組合(Combine)類(lèi)型 SEGMENT偽指令的第二個(gè)任選項(xiàng)是組合類(lèi)型,它告訴匯編程序當(dāng)裝入存儲(chǔ)器時(shí)各個(gè)(gg)邏輯段如何進(jìn)行組合。組合類(lèi)型共有以下六種。 (1) 不組合。如果SEGMENT偽指令的組合類(lèi)型任選項(xiàng)缺省,則匯編
19、程序認(rèn)為這個(gè)邏輯段是不組合的。也就是說(shuō),不同程序中的邏輯段,即使具有相同的段名,也分別作為不同的邏輯段裝入內(nèi)存,不進(jìn)行組合。但是,對(duì)于組合類(lèi)型任選項(xiàng)缺省的同名邏輯段,如果屬于同一個(gè)程序模塊,則被集中成為一個(gè)邏輯段。 第74頁(yè)/共184頁(yè)第七十五頁(yè),共185頁(yè)。 (2) PUBLIC。連接時(shí),對(duì)于不同程序模塊中的邏輯段,只要具有相同的段名,就把這些段集中成為一個(gè)邏輯段裝入內(nèi)存。 (3) STACK。組合(zh)類(lèi)型為STACK時(shí),其含意與PUBLIC基本一樣,即不同程序中的邏輯段,如果段名相同,則集中成為一個(gè)邏輯段。不過(guò)組合(zh)類(lèi)型STACK僅限于作為堆棧區(qū)域的邏輯段使用。順便提一下,在執(zhí)行
20、程序(.EXE)中,堆棧指針SP設(shè)置在這個(gè)集中以后的堆棧段的(最終地址1)處。 第75頁(yè)/共184頁(yè)第七十六頁(yè),共185頁(yè)。 (4) COMMON。連接時(shí),對(duì)于不同程序中的邏輯段,如果具有相同的段名,則都從同一個(gè)地址開(kāi)始裝入,因而(yn r)各個(gè)邏輯段將發(fā)生重疊。最后,連接以后段的長(zhǎng)度等于原來(lái)最長(zhǎng)的邏輯段的長(zhǎng)度,重疊部分的內(nèi)容是最后一個(gè)邏輯段的內(nèi)容。 (5) MEMORY。該類(lèi)型表示當(dāng)幾個(gè)邏輯段連接時(shí),本邏輯段定位在地址最高的地方。如果被連接的邏輯段中有多個(gè)段的組合類(lèi)型都是MEMORY,則匯編程序只將首先遇到的段作為MEMORY段,而其余的段均當(dāng)作COMMON段處理。 第76頁(yè)/共184頁(yè)第七
21、十七頁(yè),共185頁(yè)。 (6) AT表達(dá)式。這種組合(zh)類(lèi)型表示本邏輯段根據(jù)表達(dá)式的值定位段地址。例如AT 8A00H,表示本段的段地址為8A00H,則本段從存儲(chǔ)器的物理地址8A000H開(kāi)始裝入。 第77頁(yè)/共184頁(yè)第七十八頁(yè),共185頁(yè)。 3) 類(lèi)別(Class) SEGMENT偽指令的第三個(gè)任選項(xiàng)是類(lèi)別,類(lèi)別必須放在單引號(hào)內(nèi)。類(lèi)別的作用是在連接時(shí)決定各邏輯段的裝入順序。當(dāng)幾個(gè)程序模塊進(jìn)行連接時(shí),其中具有相同類(lèi)別名的邏輯段被裝入連續(xù)的內(nèi)存區(qū),類(lèi)別名相同的邏輯段,按出現(xiàn)的先后順序排列。沒(méi)有類(lèi)別名的邏輯段,與其他(qt)無(wú)類(lèi)別名的邏輯段一起連續(xù)裝入內(nèi)存。 第78頁(yè)/共184頁(yè)第七十九頁(yè),共1
22、85頁(yè)。 例如,假設(shè)(jish)一個(gè)主程序中有五個(gè)邏輯段,段名和類(lèi)別名分別為:STK1段 STACKCODE1段 無(wú)DATA1段 BUFFER DATA2段 TABLE DATA3段 BUFFER 第79頁(yè)/共184頁(yè)第八十頁(yè),共185頁(yè)。還有一個(gè)子程序,包括四個(gè)邏輯段,段名和類(lèi)別(libi)名分別為: DATA4段 TABLE DATA5段 BUFFER STK2段 STACK CODE2段 無(wú) 當(dāng)將上述主程序和子程序進(jìn)行連接時(shí),兩個(gè)(lin )程序模塊中各邏輯段裝入內(nèi)存的順序見(jiàn)圖5.3。第80頁(yè)/共184頁(yè)第八十一頁(yè),共185頁(yè)。段名類(lèi)別名主程序STK1STACKCODE1DATA1DAT
23、A2DATA3無(wú)BUFFERTABLEBUFFER段名類(lèi)別名子程序DATA4DATA5STK2TABLEBUFFERSTACKCODE2無(wú)無(wú)DATA1DATA3DATA5DATA2DATA4CODE2CODE1STK2STK1存儲(chǔ)器STACK無(wú)類(lèi)別名BUFFERTABLE圖5.3 邏輯段按類(lèi)別(libi)裝入內(nèi)存的示意圖 第81頁(yè)/共184頁(yè)第八十二頁(yè),共185頁(yè)。 SEGMENT偽指令后面還有三個(gè)任選項(xiàng):定位類(lèi)型、組合類(lèi)型和類(lèi)別。在上面的格式中,它們都放在方括號(hào)內(nèi),表示可有可無(wú)。如果有,三者的順序必須符合格式中的規(guī)定。這些任選項(xiàng)是給匯編程序(MASM)和連接程序(LINK)的命令。 SEGM
24、ENT偽指令后面的任選項(xiàng)告訴匯編程序和連接程序,如何確定段的邊界,以及如何組合幾個(gè)不同的段等。下面(xi mian)分別進(jìn)行討論。 第82頁(yè)/共184頁(yè)第八十三頁(yè),共185頁(yè)。第83頁(yè)/共184頁(yè)第八十四頁(yè),共185頁(yè)。第84頁(yè)/共184頁(yè)第八十五頁(yè),共185頁(yè)。第85頁(yè)/共184頁(yè)第八十六頁(yè),共185頁(yè)。第86頁(yè)/共184頁(yè)第八十七頁(yè),共185頁(yè)。匯編語(yǔ)言匯編語(yǔ)言(hu bin y yn)和和DOS操作系統(tǒng)的接口操作系統(tǒng)的接口 當(dāng)我們編寫(xiě)的匯編語(yǔ)言當(dāng)我們編寫(xiě)的匯編語(yǔ)言(hu bin y yn)源程序是在源程序是在DOS環(huán)境環(huán)境下運(yùn)行時(shí),必須了解匯編語(yǔ)言下運(yùn)行時(shí),必須了解匯編語(yǔ)言(hu bin
25、 y yn)是如何同是如何同DOS操作操作系統(tǒng)接口的。系統(tǒng)接口的。 當(dāng)我們用編輯程序把源程序輸入到機(jī)器中,用匯編程序把它轉(zhuǎn)當(dāng)我們用編輯程序把源程序輸入到機(jī)器中,用匯編程序把它轉(zhuǎn)換為目標(biāo)程序,用連接程序?qū)ζ溥M(jìn)行連接和定位時(shí),操作系統(tǒng)為每換為目標(biāo)程序,用連接程序?qū)ζ溥M(jìn)行連接和定位時(shí),操作系統(tǒng)為每一個(gè)用戶程序建立了一個(gè)程序段前綴區(qū)一個(gè)用戶程序建立了一個(gè)程序段前綴區(qū)PSP,其長(zhǎng)度為,其長(zhǎng)度為256個(gè)字節(jié),個(gè)字節(jié),主要用于存放所要執(zhí)行程序的有關(guān)信息,同時(shí)也提供了程序和操作主要用于存放所要執(zhí)行程序的有關(guān)信息,同時(shí)也提供了程序和操作系統(tǒng)的接口。操作系統(tǒng)在程序段前綴的開(kāi)始處系統(tǒng)的接口。操作系統(tǒng)在程序段前綴的開(kāi)
26、始處(偏移地址偏移地址0000H)安安排了一條排了一條INT 20H軟中斷指令。軟中斷指令。INT 20H中斷服務(wù)程序由中斷服務(wù)程序由DOS提供,提供,執(zhí)行該服務(wù)程序后,控制就轉(zhuǎn)移到執(zhí)行該服務(wù)程序后,控制就轉(zhuǎn)移到DOS,即返回到,即返回到DOS管理的狀態(tài)。管理的狀態(tài)。因此,用戶在組織程序時(shí),必須使程序執(zhí)行完后能去執(zhí)行存放于因此,用戶在組織程序時(shí),必須使程序執(zhí)行完后能去執(zhí)行存放于PSP開(kāi)始處的開(kāi)始處的INT 20H指令,這樣便返回到指令,這樣便返回到DOS,否則就無(wú)法繼續(xù),否則就無(wú)法繼續(xù)鍵入命令和程序。鍵入命令和程序。 第87頁(yè)/共184頁(yè)第八十八頁(yè),共185頁(yè)。 DOS在建立了程序段前綴區(qū)PS
27、P之后,就將要執(zhí)行的程序從磁盤(pán)裝入內(nèi)存。在定位程序時(shí),DOS將代碼段置于PSP下方,代碼段之后是數(shù)據(jù)段,最后放置堆棧段。內(nèi)存分配好之后,DOS就設(shè)置段寄存器DS和ES的值,以使它們指向PSP的開(kāi)始處,即INT 20H的存放地址,同時(shí)將CS設(shè)置為PSP后面代碼段的段地址,IP設(shè)置為指向代碼段中第一條要執(zhí)行的指令(zhlng)位置,把SS設(shè)置為指向堆棧的段地址,讓SP指向堆棧段的棧底(取決于堆棧的長(zhǎng)度),然后系統(tǒng)開(kāi)始執(zhí)行用戶程序。 為了保證用戶程序執(zhí)行完后能返回到DOS狀態(tài),可使用如下兩種方法。 第88頁(yè)/共184頁(yè)第八十九頁(yè),共185頁(yè)。 1標(biāo)準(zhǔn)方法 首先將用戶程序的主程序定義成一個(gè)FAR過(guò)程,
28、其最后一條指令為RET。然后在代碼段的主程序(即FAR過(guò)程)的開(kāi)始部分用如下(rxi)三條指令將PSP中INT 20H 指令的段地址及偏移地址壓入堆棧:PUSH DS ;保護(hù)PSP段地址MOV AX,0 ;保護(hù)偏移地址0PUSH AX 第89頁(yè)/共184頁(yè)第九十頁(yè),共185頁(yè)。 這樣,當(dāng)程序執(zhí)行到主程序的最后一條指令RET時(shí),由于該過(guò)程具有FAR屬性,故存在堆棧內(nèi)的兩個(gè)字就分別彈出到CS和IP,從而執(zhí)行INT 20H指令,使控制返回到DOS狀態(tài)。例如(lr)上面的多字節(jié)相加程序就是采用這種方法使控制返回到DOS狀態(tài)的(返回DOS的標(biāo)志就是程序運(yùn)行完后出現(xiàn)一個(gè)DOS的標(biāo)識(shí)符,如C)。 第90頁(yè)/
29、共184頁(yè)第九十一頁(yè),共185頁(yè)。 2. 非標(biāo)準(zhǔn)方法 也可在用戶的程序中不定義過(guò)程段,只在代碼段結(jié)束之前(即CODE ENDS之前)增加(zngji)兩條語(yǔ)句:MOV AH,4CHINT 21H則程序執(zhí)行完后也會(huì)自動(dòng)返回DOS狀態(tài)。 第91頁(yè)/共184頁(yè)第九十二頁(yè),共185頁(yè)。第92頁(yè)/共184頁(yè)第九十三頁(yè),共185頁(yè)。第93頁(yè)/共184頁(yè)第九十四頁(yè),共185頁(yè)。第94頁(yè)/共184頁(yè)第九十五頁(yè),共185頁(yè)。第95頁(yè)/共184頁(yè)第九十六頁(yè),共185頁(yè)。第96頁(yè)/共184頁(yè)第九十七頁(yè),共185頁(yè)。第97頁(yè)/共184頁(yè)第九十八頁(yè),共185頁(yè)。第98頁(yè)/共184頁(yè)第九十九頁(yè),共185頁(yè)。第99頁(yè)/共1
30、84頁(yè)第一百頁(yè),共185頁(yè)。第100頁(yè)/共184頁(yè)第一百零一頁(yè),共185頁(yè)。第101頁(yè)/共184頁(yè)第一百零二頁(yè),共185頁(yè)。第102頁(yè)/共184頁(yè)第一百零三頁(yè),共185頁(yè)。匯編語(yǔ)言匯編語(yǔ)言(hu bin y yn)程序設(shè)計(jì)程序設(shè)計(jì) 通常, 編制一個(gè)匯編語(yǔ)言程序應(yīng)按如下(rxi)步驟進(jìn)行: 明確任務(wù), 確定算法。 繪流程圖。 根據(jù)流程圖編寫(xiě)匯編語(yǔ)言程序。 上機(jī)調(diào)試程序。 第103頁(yè)/共184頁(yè)第一百零四頁(yè),共185頁(yè)。圖 6.3 標(biāo)準(zhǔn)(biozhn)流程圖符號(hào) 起始和終止框執(zhí)行判斷框連接框第104頁(yè)/共184頁(yè)第一百零五頁(yè),共185頁(yè)。順序程序設(shè)計(jì)順序程序設(shè)計(jì)(shj)圖 6.4 順序(shnx
31、)結(jié)構(gòu)流程圖 開(kāi)始S1S2S3結(jié)束第105頁(yè)/共184頁(yè)第一百零六頁(yè),共185頁(yè)。 例例 6.5 試編制一程序試編制一程序(chngx),求出下列公式中的,求出下列公式中的Z值,并存放在值,并存放在RESULT單元中:?jiǎn)卧校?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頁(yè)/共184頁(yè)第一百零七頁(yè),共185頁(yè)。 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頁(yè)/共184頁(yè)第一百零八頁(yè),共185頁(yè)。 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頁(yè)/共184頁(yè)第一百零九頁(yè),共185頁(yè)。圖 6.5 用戶程序裝入內(nèi)存(ni cn)后的內(nèi)存(ni cn)分配情況 系統(tǒng)占用程序段前綴用戶數(shù)據(jù)段用戶堆棧段用戶代碼系統(tǒng)和ROM占用0HDS,ESSSCS0FFFFFH共100H個(gè)字節(jié)用戶空間第109頁(yè)/共184頁(yè)第一百一十頁(yè),共185頁(yè)。 結(jié)束用戶程序, 返回操作系統(tǒng)的另一個(gè)辦法是用中斷指令“INT 21H”。如使用這種辦
34、法,用戶程序可以不設(shè)置過(guò)程(guchng), 只要在用戶程序結(jié)束時(shí),用以下兩條指令即可: MOV AH, 4CH INT 21H 這樣(zhyng),上述程序的代碼段可以修改為: COSEG SEGMEN T ASSUME CS: COSEG, DS: DATA ASSUME SS: STACK1 第110頁(yè)/共184頁(yè)第一百一十一頁(yè),共185頁(yè)。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頁(yè)/共184頁(yè)第一百一十二頁(yè),共185頁(yè)。 例例 用查表的方法將一位十六進(jìn)制數(shù)轉(zhuǎn)換成與它相應(yīng)的用查表的方法將一位十六進(jìn)制數(shù)轉(zhuǎn)換成與它相應(yīng)的ASCII碼。碼。 既然指定用查表的方法,那么首先要建立既然指定用查表的方法,那么首先要建立(jinl)一個(gè)表一個(gè)表TABLE。 我們?cè)诒碇邪凑帐M(jìn)制數(shù)從小到大的順序放入它們對(duì)應(yīng)的我們?cè)诒碇邪凑帐M(jìn)制數(shù)從小到大的順序放入它們對(duì)應(yīng)的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頁(yè)/共184頁(yè)第一百一十三頁(yè),共185頁(yè)。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頁(yè)/共184頁(yè)第一百一十四頁(yè),共185頁(yè)。 類(lèi)似這種查表, 如使用換碼指令XLAT(Translate), 程序可以更加精練。 換碼指令格式: XLAT 表首址 指令功能: AL(BX)+(AL) 使用這條指令,通常是把表首址的偏移量送入BX中,而把要查找(ch zho)表內(nèi)單元的偏移量(0255)送入AL中。這樣,上述程序中代碼段的有關(guān)語(yǔ)句可以修改為 BEING: MOV AX, DATA MOV DS, AX MOV BX, OFFSET TABLE MOV AL, HEX XLAT TA
38、BLE MOV ASCI, AL 第114頁(yè)/共184頁(yè)第一百一十五頁(yè),共185頁(yè)。例5.8 求兩個(gè)數(shù)的平均值。這兩個(gè)數(shù)分別放在x單元(dnyun)和y單元(dnyun)中,而平均值放在z單元(dnyun)中。程序如下:DATA SEGMENT x DB 95 y DB 87 z DB ? 第115頁(yè)/共184頁(yè)第一百一十六頁(yè),共185頁(yè)。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 ;第一個(gè)數(shù)送入AL 第116頁(yè)/共184頁(yè)第一百一十七頁(yè),共185頁(yè)。ADD AL,y ;兩數(shù)相加,結(jié)果送ALMOV AH,0ADC AH,0 ;帶進(jìn)位(jnwi)加法,進(jìn)位(jnwi)送AHMOV BL,2 ;除數(shù)2送BLDIV BL ;求平均值送ALMOV z,AL ;結(jié)果送入z單元RET MAIN ENDPCODEENDSEND START 第117頁(yè)/共184頁(yè)第一百一十八頁(yè),共185頁(yè)。 例5.9 在內(nèi)存中自tab開(kāi)始的16個(gè)單元連續(xù)存放著015的平方值(平方表),任給一個(gè)數(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頁(yè)/共184頁(yè)第一百一十九頁(yè),共185頁(yè)。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頁(yè)/共184頁(yè)第一百二十頁(yè),共185頁(yè)。第120頁(yè)/共184頁(yè)第一百二十一頁(yè),共185頁(yè)。第121頁(yè)/共184頁(yè)第一百二十二頁(yè),共185頁(yè)。第122頁(yè)/共184頁(yè)第一百二十三頁(yè),共185頁(yè)。第123頁(yè)/共184頁(yè)第一百二十四頁(yè),共185頁(yè)。第124頁(yè)/共184頁(yè)第一百二十五頁(yè),共185頁(yè)。第125頁(yè)/共184頁(yè)第一百二十六頁(yè),共185頁(yè)。第126頁(yè)/共184頁(yè)第一百二十七頁(yè),共185頁(yè)。第127頁(yè)/共184頁(yè)第一百二十八頁(yè),共185頁(yè)。第128頁(yè)/共184頁(yè)第一百二十九頁(yè),共185頁(yè)。第129頁(yè)/共184頁(yè)第一百三十頁(yè),共185頁(yè)。第130頁(yè)/共184頁(yè)第一百三十一頁(yè),共1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版新員工試崗期職業(yè)發(fā)展規(guī)劃與實(shí)施合同3篇
- 應(yīng)急預(yù)案與突發(fā)事件類(lèi)型
- 電子行業(yè)產(chǎn)品維修培訓(xùn)總結(jié)
- 建筑與市政工程質(zhì)量安全巡查的背景
- 托育防恐防暴安全教育
- 交通運(yùn)輸行業(yè)促銷(xiāo)策略評(píng)估
- 二零二五版外貿(mào)實(shí)習(xí)實(shí)訓(xùn)基地建設(shè)合同3篇
- 二零二五年度環(huán)保設(shè)備委托托管合作協(xié)議3篇
- 《學(xué)校心理輔導(dǎo)》課件
- 二零二五年度居間服務(wù)合同范本6篇
- 《寫(xiě)美食有方法》課件
- 學(xué)校制度改進(jìn)
- 各行業(yè)智能客服占比分析報(bào)告
- 年產(chǎn)30萬(wàn)噸高鈦渣生產(chǎn)線技改擴(kuò)建項(xiàng)目環(huán)評(píng)報(bào)告公示
- 心電監(jiān)護(hù)考核標(biāo)準(zhǔn)
- (完整word版)申論寫(xiě)作格子紙模板
- 滾筒焊縫超聲波探傷檢測(cè)報(bào)告
- 古典芭蕾:基本技巧和術(shù)語(yǔ)
- DB43-T 2612-2023林下竹蓀栽培技術(shù)規(guī)程
- 質(zhì)量檢驗(yàn)人員管理及綜合業(yè)務(wù)管理知識(shí)培訓(xùn)課件
- 浙江省公安民警心理測(cè)驗(yàn)考試題目
評(píng)論
0/150
提交評(píng)論