2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  匯編程序設(shè)計(jì)說(shuō)明書(shū)</b></p><p><b>  摘要(中文):</b></p><p>  通過(guò)此次的匯編語(yǔ)言實(shí)驗(yàn),讓我熟悉了解了匯編語(yǔ)言的指令系統(tǒng)中一些基本的指令的操作及運(yùn)用,同時(shí)我也對(duì)匯編語(yǔ)言程序格式、循環(huán)與分支程序設(shè)計(jì)、子程序結(jié)構(gòu)等的運(yùn)用有了進(jìn)一步的了解。我所選的題目為輸入一個(gè)圓柱體的底面半徑和高,求它

2、的表面積和體積以及它最大內(nèi)接長(zhǎng)方體的表面積和體積。在對(duì)所選的題目進(jìn)行分析編程的過(guò)程中,首先繪制程序流程圖,再按照流程圖運(yùn)用8086CPU提供的指令、偽指令、宏指令及DOS,BIOS功能調(diào)用編寫(xiě)程序源代碼,同時(shí)給出說(shuō)明注釋。最后利用計(jì)算機(jī)提供的軟件調(diào)試工具對(duì)所編寫(xiě)程序進(jìn)行調(diào)試,記錄下整個(gè)調(diào)試分析的過(guò)程與運(yùn)行結(jié)果。</p><p>  關(guān)鍵詞:圓柱體、匯編語(yǔ)言、流程圖、程序源代碼、調(diào)試。</p><

3、;p>  Summary (英文):</p><p>  Through the assembly language experiment, let me be familiar with some basic instruction of assembly language’s instruction system in operation and use. At the same time, I hav

4、e also been further understood for the assembly language program format, circulation and branch program design, such as the use of subroutine structure. My selected subject is to input a radius of cylinder's basal pl

5、ane and the cylinder's height, and strive for it's surface area and volume as well as it's maximum inscribed</p><p>  Key words: cylinder, assembly language, flowchart, program source code, debug

6、ging.</p><p><b>  項(xiàng)目概述</b></p><p>  本課程設(shè)計(jì)要求用所學(xué)的匯編語(yǔ)言知識(shí)來(lái)編寫(xiě)一個(gè)完整的程序以實(shí)現(xiàn)求一個(gè)圓柱體的表面積和體積以及該圓柱體內(nèi)接最大長(zhǎng)方體的表面積和體積。</p><p><b>  課程設(shè)計(jì)的目的</b></p><p>  掌握一些程序設(shè)計(jì)的基

7、本方法,要知道主程序,子程序以及推棧段的使用,了解自己所編的程序.了解與掌握匯編語(yǔ)言中加法指令、減法指令、乘法指令、除法指令、出棧及入棧指令、跳轉(zhuǎn)指令等的概念和它們的運(yùn)用。學(xué)會(huì)圓柱體程序的設(shè)計(jì)方法。</p><p><b>  課程設(shè)計(jì)的要求</b></p><p>  1、 需要的基本知識(shí)與技能:</p><p>  具備匯編語(yǔ)言設(shè)計(jì)、編寫(xiě)、

8、調(diào)試和運(yùn)行程序的方法和技巧。在PC機(jī)上運(yùn)行匯編程序需要經(jīng)過(guò)以下幾個(gè)階段:</p><p>  編輯源程序:利用文本編輯工具編輯源程序,生成一個(gè)匯編語(yǔ)言的純文本文件。文件的擴(kuò)展名為.ASM匯編源程序。用匯編器匯編源程序生成目標(biāo)代碼文件,目標(biāo)代碼文件的擴(kuò)展名是.OBJ,匯編器還可以生成列表文件和交叉參考文件。匯編器相當(dāng)于高級(jí)語(yǔ)言中的編譯器。匯編語(yǔ)言按照匯編語(yǔ)言的語(yǔ)法檢查源程序,如果源程序語(yǔ)法有錯(cuò)誤,匯編器就不生成目標(biāo)

9、代碼文件,這時(shí),必須重新編輯源程序,修改語(yǔ)法錯(cuò)誤。當(dāng)發(fā)現(xiàn)源程序有的行含有不確定因素,匯編器會(huì)給出警告信,但按卻省處理方法生成目標(biāo)代碼文件。此時(shí),可以重新編輯源程序,消去不確定因素。</p><p>  連接目標(biāo)程序:利用連接器連接目標(biāo)代碼程序和庫(kù)函數(shù)代碼生成可執(zhí)行程序文件。一般單個(gè)模塊的連接可以順利地生成可執(zhí)行程序文件。當(dāng)多個(gè)模塊連接,或者庫(kù)函數(shù)連接時(shí),如果在目標(biāo)代碼中找不到所需的連接信息,連接器就會(huì)發(fā)生錯(cuò)誤提示

10、信息,而不是生成可執(zhí)行文件。這時(shí),這就要重新編輯源程序,并匯編程序。</p><p>  調(diào)試可執(zhí)行程序:程序的動(dòng)態(tài)調(diào)試是在形成可執(zhí)行文件后,針對(duì)可執(zhí)行程序進(jìn)行的。DEBUG是簡(jiǎn)單的動(dòng)態(tài)調(diào)試工具,利用調(diào)試工具動(dòng)態(tài)的調(diào)試程序,找出程序中的問(wèn)題,那么就要重新編輯,匯編源程序。</p><p>  2、尚未掌握的知識(shí)點(diǎn):</p><p>  有時(shí)在程序中定義了較多的 宏,

11、或者可以把自己編譯中常用的宏定義建立一個(gè)獨(dú)立的文件,這個(gè)只包含若干定義宏文件的文件可稱為宏庫(kù),通常用擴(kuò)展名MAC或INC來(lái)表示。當(dāng)應(yīng)用程序中需要用到宏庫(kù)中的宏定義時(shí),只需要用語(yǔ)句說(shuō)明。</p><p>  有時(shí)匯編語(yǔ)言程序需要連續(xù)重復(fù)地完成相同或者幾乎完全相同的一組代碼,這時(shí),可使用重復(fù)匯編。匯編程序把重復(fù)模塊代碼重復(fù)幾次,每次重復(fù)把重復(fù)塊中的啞元用自變量表中的一項(xiàng)取代,下一次取代一次,重復(fù)次數(shù)由自變量表中的自變

12、量個(gè)數(shù)來(lái)確定。條件匯編中,匯編程序能夠根據(jù)條件把一段源程序或者把它排去在外,這里用到條件偽操作。條件偽操作可以用在宏定義體內(nèi),也可以用在宏定義體外,并且可以嵌套任意次。</p><p>  模塊化程序設(shè)計(jì)方法是按照各部分程序所實(shí)現(xiàn)的不同功能把程序劃分成為多個(gè)模板。各個(gè)模板在明確各自的功能和相互間的約定后,就可以編制和調(diào)試程序,最后把它們連接起來(lái)形成一個(gè)大程序,子程序結(jié)構(gòu)是模塊化程序設(shè)計(jì)的基礎(chǔ)。子程序相當(dāng)于高級(jí)語(yǔ)言

13、中的過(guò)程和函數(shù)。在一個(gè)程序的不同部分,往往就要用到類似的程序段,這寫(xiě)程序段的功能個(gè)結(jié)構(gòu)形式都相同,只是有的變量賦值不同,此時(shí)就可以把這些程序?qū)懗勺映绦蛐问?,以便需要時(shí)調(diào)擁它。</p><p>  課程設(shè)計(jì)涉及的主要知識(shí)單元</p><p>  1、匯編語(yǔ)言源程序的匯編過(guò)程:</p><p>  匯編語(yǔ)言源程序的匯編過(guò)程是是利用匯編程序(MASM)對(duì)已編輯好的源程序文

14、件(.ASM)進(jìn)行匯編,將源程序文件中以ASCII碼表示的助記符指令逐條翻譯成機(jī)器碼指令,并完成源程序中的偽指令所指出的各種操作,最后可以建立3個(gè)文件:擴(kuò)展名為 .OBJ的目標(biāo)文件、擴(kuò)展名為 .LST 的列表文件和擴(kuò)展名為 .CRF 的交叉索引文件。目標(biāo)文件是必須建立的,它包含了程序中所有的機(jī)器碼指令和偽指令指出的各種有關(guān)信息,但該文件中的操作數(shù)地址還不是內(nèi)存的絕對(duì)地址,只是一個(gè)可浮動(dòng)的相對(duì)地址。列表文件(.LST)中包含了源程序的全部

15、信息(包括注釋)和匯編后的目標(biāo)程序,列表文件可以打印輸出,可供調(diào)試檢查用。交叉索引文件(.CRF)是用來(lái)了解源程序中各符號(hào)的定義和引用情況的。.LST和.CRF兩個(gè)文件不是必須建立的,可有有無(wú),可以通過(guò)匯編時(shí)的命令加以選擇。</p><p>  在對(duì)源程序文件(ASM文件)匯編時(shí),匯編程序?qū)?duì)ASM文件進(jìn)行兩遍掃描,若程序文件中有語(yǔ)法錯(cuò)誤,則結(jié)束匯編,匯編程序?qū)⒅赋鲈闯绦蛑写嬖诘腻e(cuò)誤,這時(shí)應(yīng)返回編輯環(huán)境修改源程序

16、中的錯(cuò)誤,再經(jīng)過(guò)匯編,直到最后得到無(wú)錯(cuò)誤的目標(biāo)程序,即OBJ文件。因此,匯編程序的主要功能可以概括為以下三點(diǎn): (1) 檢查源程序中的語(yǔ)法錯(cuò)誤,并給出錯(cuò)誤信息;(2) 產(chǎn)生目標(biāo)程序文件(OBJ文件),并可給出列表文件(.LST文件);(3) 展開(kāi)宏指令。</p><p>  匯編程序是系統(tǒng)提供的用于匯編的系統(tǒng)軟件,目前常用的匯編程序有Microsoft公司推出的宏匯編程MASM(MACRO ASSEMBLER)和

17、BORLAND公司推出的TASM(TURBO ASSEMBLER)兩種。Microsoft公司推出有宏匯編程序MASM和小匯編程序ASM兩種,二者的區(qū)別在于:MASM有宏處理功能,而ASM沒(méi)有宏處理功能,因此,MASM比ASM的功能強(qiáng)大,但MASM需要占據(jù)較大的內(nèi)存空間,當(dāng)內(nèi)存空間較小時(shí)(如64 KB),只能使用ASM。 </p><p>  2、目標(biāo)程序的連接過(guò)程:</p><p> 

18、 匯編后產(chǎn)生的目標(biāo)程序(OBJ文件)并不是可執(zhí)行程序文件(EXE文件),還不能直接運(yùn)行,它必須通過(guò)連接程序(LINK)連接成一個(gè)可執(zhí)行程序后才能運(yùn)行。連接程序進(jìn)行連接時(shí),其輸入有兩個(gè)部分:一是目標(biāo)文件(.OBJ),目標(biāo)文件可以是一個(gè)也可以是多個(gè),可以是匯編語(yǔ)言經(jīng)匯編后產(chǎn)生的目標(biāo)文件,也可以是高級(jí)語(yǔ)言(例如C語(yǔ)言)經(jīng)編譯后產(chǎn)生的目標(biāo)文件;另一是庫(kù)文件(.LIB),庫(kù)文件是系統(tǒng)中已經(jīng)建立的,主要是為高級(jí)語(yǔ)言提供的。連接后輸出兩個(gè)文件,一是擴(kuò)

19、展名為 .EXE的可執(zhí)行文件,另一個(gè)是擴(kuò)展名為 .MAP 的內(nèi)存分配文件,它是連接程序的列表文件,又稱為連接映像(Link Map),它給出每個(gè)段在存儲(chǔ)器中的分配情況,該文件可有可無(wú)。連接程序給出的“無(wú)堆棧段的警告性錯(cuò)誤”并不影響程序的運(yùn)行。所以,到此為止,連接過(guò)程已經(jīng)結(jié)束,可以在操作系統(tǒng)下執(zhí)行該.EXE程序了。</p><p>  3、匯編語(yǔ)言和DOS操作系統(tǒng)的接口:</p><p> 

20、 編寫(xiě)的匯編語(yǔ)言源程序是在DOS環(huán)境下運(yùn)行時(shí),必須了解匯編語(yǔ)言是如何同DOS操作系統(tǒng)接口的。</p><p>  用編輯程序把源程序輸入到機(jī)器中,用匯編程序把它轉(zhuǎn)換為目標(biāo)程序,用連接程序?qū)ζ溥M(jìn)行連接和定位時(shí),操作系統(tǒng)為每一個(gè)用戶程序建立了一個(gè)程序段前綴區(qū)PSP,其長(zhǎng)度為256個(gè)字節(jié),主要用于存放所要執(zhí)行程序的有關(guān)信息,同時(shí)也提供了程序和操作系統(tǒng)的接口。操作系統(tǒng)在程序段前綴的開(kāi)始處(偏移地址0000H)安排了一條I

21、NT 20H軟中斷指令。INT 20H中斷服務(wù)程序由DOS提供,執(zhí)行該服務(wù)程序后,控制就轉(zhuǎn)移到DOS,即返回到DOS管理的狀態(tài)。因此,用戶在組織程序時(shí),必須使程序執(zhí)行完后能去執(zhí)行存放于PSP開(kāi)始處的INT 20H指令,這樣便返回到DOS,否則就無(wú)法繼續(xù)鍵入命令和程序。 </p><p>  DOS在建立了程序段前綴區(qū)PSP之后,將要執(zhí)行的程序從磁盤(pán)裝入內(nèi)存。在定位程序時(shí),DOS將代碼段置于PSP下方,代碼段之后是

22、數(shù)據(jù)段,最后放置堆棧段。內(nèi)存分配好之后,DOS就設(shè)置段寄存器DS和ES的值,以使它們指向PSP的開(kāi)始處,即INT 20H的存放地址,同時(shí)將CS設(shè)置為PSP后面代碼段的段地址,IP設(shè)置為指向代碼段中第一條要執(zhí)行的指令位置,把SS設(shè)置為指向堆棧的段地址,讓SP指向堆棧段的棧底,然后系統(tǒng)開(kāi)始執(zhí)行用戶程序。為了保證用戶程序執(zhí)行完后能返回到DOS狀態(tài),可使用如下兩種方法。 </p><p><b>  (一)標(biāo)準(zhǔn)

23、方法</b></p><p>  首先將用戶程序的主程序定義成一個(gè)FAR過(guò)程,其最后一條指令為RET。然后在代碼段的主程序(即FAR過(guò)程)的開(kāi)始部分用如下三條指令將PSP中INT 20H 指令的段地址及偏移地址壓入堆棧:</p><p>  PUSHDS ;保護(hù)PSP段地址</p><p>  MOV AX,0 ;

24、保護(hù)偏移地址0</p><p><b>  PUSH AX </b></p><p>  這樣,當(dāng)程序執(zhí)行到主程序的最后一條指令RET時(shí),由于該過(guò)程具有FAR屬性,故存在堆棧內(nèi)的兩個(gè)字就分別彈出到CS和IP,從而執(zhí)行INT 20H指令,使控制返回到DOS狀態(tài)。返回DOS的標(biāo)志就是程序運(yùn)行完后出現(xiàn)一個(gè)DOS的標(biāo)識(shí)符,如C:\>。 </p><p&g

25、t;<b> ?。ǘ┓菢?biāo)準(zhǔn)方法</b></p><p>  也可在用戶的程序中不定義過(guò)程段,只在代碼段結(jié)束之前(即CODE ENDS之前)增加兩條語(yǔ)句:</p><p>  MOV AH,4CH</p><p><b>  INT 21H</b></p><p>  則程序執(zhí)行完后也會(huì)自動(dòng)返回

26、DOS狀態(tài)。 </p><p>  此外,由于開(kāi)始執(zhí)行用戶程序時(shí),DS并不設(shè)置在用戶的數(shù)據(jù)段的起始處,ES同樣也不設(shè)置在用戶的附加段起始處,因而在程序開(kāi)始處使用以下方法重新裝填DS和ES的值使其指向用戶的數(shù)據(jù)段:</p><p>  MOV AX,段名</p><p>  MOV 段寄存器名,AX;段寄存器名可以是DS、ES、SS之一 </p&g

27、t;<p><b>  課程設(shè)計(jì)的意義</b></p><p>  在調(diào)試程序時(shí),要注意每一個(gè)小細(xì)節(jié),如注釋忘加分號(hào),指令書(shū)寫(xiě)錯(cuò)誤等問(wèn)題,有時(shí)會(huì)運(yùn)行不了,要仔細(xì)檢查錯(cuò)誤。另外,由于動(dòng)畫(huà)為全屏顯示,無(wú)法截圖,只好照下來(lái)進(jìn)行截圖,圖片可能會(huì)不太清晰。通過(guò)改變指令,也可以改變汽車和小鳥(niǎo)開(kāi)始的位置。</p><p>  這次課程設(shè)計(jì)讓我們鞏固和加深了對(duì)微機(jī)原理與

28、接口技術(shù)的理解,提高綜合運(yùn)用本課程所學(xué)知識(shí)的能力。通過(guò)實(shí)際分析設(shè)計(jì),調(diào)試程序,也掌握了微機(jī)原理與接口技術(shù)的基本規(guī)程和各個(gè)指令的使用。</p><p>  程序設(shè)計(jì)方案及流程圖</p><p><b>  主程序流程圖</b></p><p><b>  總體設(shè)計(jì)</b></p><p>  本課程設(shè)

29、計(jì)要求編寫(xiě)一個(gè)完整的程序以實(shí)現(xiàn)求一個(gè)圓柱體的表面積和體積以及該圓柱體內(nèi)接最大長(zhǎng)方體的表面積和體積。該程序要求先顯示一些提示信息,然后按提示信息的要求輸入圓柱體的底面半徑和高,通過(guò)求圓柱體的表面積及體積公式:表面積=2*π*r*r+2*π*r*h、體積=π*r*r*h來(lái)編寫(xiě)計(jì)算的程序的,同時(shí)通過(guò)判斷得到當(dāng)圓柱體的內(nèi)接長(zhǎng)方體底面為正方體時(shí),內(nèi)接長(zhǎng)方體的表面積和體積最大,此時(shí)通過(guò)分析所得的公式:表面積=4*r*r+4*√2*r*h、體積=2*

30、r*r*h來(lái)編寫(xiě)計(jì)算的程序的。本程序中由于不方便編寫(xiě)進(jìn)行浮點(diǎn)數(shù)的運(yùn)算的程序,所以一種方法是把π看成是314,把√2看成是141這樣到最后再通過(guò)除以100保留兩位小數(shù),程序編好以后通過(guò)運(yùn)行調(diào)試改正錯(cuò)誤,直到所有的錯(cuò)誤都改好為止,最后輸出所要求的提示信息以及結(jié)果。</p><p><b>  詳細(xì)設(shè)計(jì)</b></p><p>  這次課程設(shè)計(jì)的設(shè)計(jì)思想是在熟練掌握匯編程序

31、的設(shè)計(jì)方法的基礎(chǔ)上, 編寫(xiě)出計(jì)算圓柱體表面積和體積及其最大內(nèi)接長(zhǎng)方體的表面積和體積的代碼,具體步驟如下:</p><p>  首先定義Pi=314,root=141,之所以這樣定義,是為了方便最后輸出的時(shí)候能保留兩位小數(shù),然后定義除數(shù)decimal=10,定義這個(gè)變量是為了將結(jié)果從低位到高位保存到棧中,從而輸出的時(shí)候能夠正好以從高位到低位的順序輸出,再定義兩個(gè)變量,一個(gè)是底面半徑r,另一個(gè)是高h(yuǎn),以便輸入的底面半

32、徑和高保存在定義的這兩個(gè)寄存器中,從而可以隨時(shí)使用這兩個(gè)變量的值,最后定義一個(gè)計(jì)數(shù)的變量i來(lái)計(jì)數(shù),其初值為0。</p><p>  上述定義完畢以后再計(jì)算圓柱體的表面積和體積以及重大內(nèi)接長(zhǎng)方體的表面積及體積,因?yàn)橛?jì)算這四個(gè)的方法和步驟大致相同,所以這里只介紹計(jì)算圓柱體的表面積的方法和步驟,利用計(jì)算圓柱體表面積的公式:2*π*r*r+2*π*r*h可知,首先計(jì)算π*r*r,先用mov al,r指令將變量r的值放入a

33、l寄存器,然后利用mul r指令實(shí)現(xiàn)al寄存器的值與半徑相乘,結(jié)果放入寄存器ax中,相當(dāng)于實(shí)現(xiàn)r*r,再用mul Pi指令,使ax寄存器的與Pi相乘,結(jié)果的高十六位放入dx寄存器,低十六位放入ax寄存器,然后利用mov cx,ax和mv bx,dx將剛才計(jì)算所得結(jié)果保存在bx,cx寄存器中,至此π*r*r計(jì)算完畢,再計(jì)算π*r*h,先用mov al,h指令將變量h的值放入al寄存器,然后利用mul r指令實(shí)現(xiàn)al寄存器的值與半徑相乘,結(jié)

34、果放入寄存器ax中,相當(dāng)于實(shí)現(xiàn)h*r,再用mul Pi指令,使ax寄存器的與Pi相乘,結(jié)果的高十六位放入dx寄存器,低十六位放入ax寄存器,至此π*r*r計(jì)算完畢。然后將兩部分計(jì)算的結(jié)果相加,即π*r*r+π*r*h,由于π*r*r的結(jié)果存放在bx,cx寄存器中,π*r*h的</p><p>  接下來(lái)需要進(jìn)行的是將上述所得結(jié)果從最低位開(kāi)始到最高位依次壓入棧中,由于計(jì)算結(jié)果為超過(guò)十六位,所以只將ax寄存器中的值壓

35、入棧中保護(hù)起來(lái),進(jìn)入next0的跳轉(zhuǎn)代碼中,將棧中值出棧放入寄存器ax中,為了方便保存余數(shù)又不篡改商的值,利用cwd指令將其擴(kuò)展成32位的寄存器。然后除以十即變量寄存器decimal,指令為div decimal,商保存在寄存器ax中,余數(shù)保存在寄存器dx中,將dx壓入棧中,計(jì)數(shù)i自動(dòng)加1,然后對(duì)計(jì)數(shù)i進(jìn)行比較,當(dāng)i等于2的時(shí)候跳轉(zhuǎn)到next1的代碼中,利用自減對(duì)dx進(jìn)行清零,然后將小數(shù)點(diǎn)的ascII碼減48的值賦給寄存器dx,之所以將

36、小數(shù)點(diǎn)的ascII碼減48,是因?yàn)榈鹊綄V袛?shù)輸出時(shí)要以ascII碼輸出,方便循環(huán)輸出,此時(shí)再將計(jì)數(shù)i加1,將dx壓入棧中,再將ax的值壓入棧中,然后利用無(wú)條件跳轉(zhuǎn)指令jmp next0跳轉(zhuǎn)到next0代碼繼續(xù)執(zhí)行。當(dāng)i不等于2時(shí)往下執(zhí)行指令,對(duì)商ax與0比較,當(dāng)ax等于0時(shí)結(jié)果壓棧操作結(jié)束,跳轉(zhuǎn)到next2代碼中,否則執(zhí)行下面指令,將ax壓入棧中,無(wú)條件跳轉(zhuǎn)到next0代碼中。</p><p>  當(dāng)寄存器ax

37、等于0即商等于0時(shí),程序執(zhí)行next2代碼,將寄存器ax,dx清零,然后執(zhí)行出棧指令,將出棧后的值放入dx中,將其加上48后dx寄存器的值就變?yōu)槠鋋scII碼的值了,再調(diào)用DOS系統(tǒng)功能調(diào)用(int 21H)將這個(gè)值輸出到顯示器上,原來(lái)計(jì)數(shù)i的值就是記錄壓入棧中的元素的個(gè)數(shù)的,現(xiàn)在正好將i減1,然后將其與0比較,當(dāng)它等于0時(shí),說(shuō)明棧中已無(wú)元素,至此圓柱體的表面積的結(jié)果輸出顯示結(jié)束,否則跳轉(zhuǎn)到next2代碼繼續(xù)輸出棧中元素。</p&

38、gt;<p>  執(zhí)行完上述指令后,求圓柱體的表面積的代碼就完成了,接下來(lái)求圓柱體的體積以及最大內(nèi)接長(zhǎng)方體的表面積與體積的過(guò)程與求圓柱體表面積的過(guò)程類似,所以就不必說(shuō)明了。</p><p><b>  總結(jié)(調(diào)試的過(guò)程)</b></p><p>  3.1 Debug簡(jiǎn)介</p><p>  通過(guò)編輯、匯編和連接后的程序是可以執(zhí)

39、行的程序。但是,一個(gè)程序特別是比較復(fù)雜的程序不能保證沒(méi)有一點(diǎn)錯(cuò)誤。因此,在投入正式運(yùn)行前必須進(jìn)行調(diào)試,以檢查程序的正確性。調(diào)試程序Debug就是用來(lái)調(diào)試匯編語(yǔ)言程序的一種工具。Debug的主要功能有顯示和修改寄存器及內(nèi)存單元的內(nèi)容;按指定地址啟動(dòng)并運(yùn)行程序;設(shè)置斷點(diǎn)使程序分段運(yùn)行,以便檢查程序運(yùn)行過(guò)程中的中間結(jié)果或確定程序出錯(cuò)的位置;反匯編被調(diào)試程序,它將一個(gè)可執(zhí)行文件中的指令機(jī)器碼反匯編成助記符指令并同時(shí)給出指令所在的內(nèi)存地址;單條追

40、蹤或多條追蹤被調(diào)試程序,它可以逐條指令執(zhí)行或幾條指令執(zhí)行被調(diào)試程序,每執(zhí)行一條(或幾條)指令后,Debug程序?qū)⒅袛喑绦虻倪\(yùn)行并提供有關(guān)結(jié)果信息;匯編一段程序,在Debug的匯編命令下可以直接輸入助記符指令,并將其匯編成可運(yùn)行程序段。此外,Debug還可以將磁盤(pán)指定區(qū)的內(nèi)容或一個(gè)文件裝入到內(nèi)存或?qū)?nèi)存的信息寫(xiě)到磁盤(pán)上等等。</p><p>  3.2 本次實(shí)驗(yàn)調(diào)試程序Debug的用到的主要命令</p>

41、;<p> ?。ㄒ唬┻\(yùn)行程序命令G</p><p>  格式:G [=地址][地址[地址…]]</p><p>  該命令可以在程序運(yùn)行中設(shè)置斷點(diǎn)。它是Debug程序進(jìn)行程序調(diào)試的主要命令之一。</p><p>  示例:-g 001a 則執(zhí)行從當(dāng)前cs:ip至001a的指令,注意:地址設(shè)置必須從指令的第一字節(jié)設(shè)起。 </p><p

42、> ?、俚谝粋€(gè)參數(shù)“=地址”規(guī)定了程序執(zhí)行的起始地址,以CS內(nèi)容作段地址,等號(hào)后面的地址只需給出地址偏移量。此時(shí),命令G與地址之間的等號(hào)不能省去。 </p><p>  如果在G命令執(zhí)行前,已經(jīng)設(shè)置了CS值和IP值,則也可以直接用G命令,從指定地址執(zhí)行程序。 </p><p> ?、诟袷街泻竺娼o出的地址是指斷點(diǎn)地址,最多可設(shè)置10個(gè)斷點(diǎn)。當(dāng)程序執(zhí)行到一個(gè)斷點(diǎn)時(shí),就停下來(lái),顯示CPU各

43、寄存器的內(nèi)容和標(biāo)志位的狀態(tài),以及下一條待執(zhí)行的指令,被調(diào)試程序的所有斷點(diǎn)全部被取消,并返回Debug。 </p><p> ?、鄣刂穮?shù)所指的單元,必須包含有有效的8088指令的第一個(gè)字節(jié),否則將產(chǎn)生不可預(yù)料的結(jié)果。 </p><p>  ④堆棧必須至少包含有6個(gè)可用字節(jié),否則也將產(chǎn)生不可預(yù)料的結(jié)果。 </p><p> ?、萑魯帱c(diǎn)地址只包括地址偏移量,則認(rèn)為段地址

44、在CS寄存器中。 </p><p><b>  (二)追蹤命令T</b></p><p>  格式(1):T [=地址]</p><p>  該命令可以在指令執(zhí)行中進(jìn)行追蹤,若略去地址,則從CS:IP現(xiàn)行值執(zhí)行。每一次T命令都執(zhí)行一條指令。 </p><p>  格式(2):T [=地址][值]</p>&

45、lt;p>  此時(shí),它可對(duì)多條指令進(jìn)行追蹤,即在執(zhí)行了由值所指定的若干條指令之后,停止執(zhí)行并顯示各寄存器的內(nèi)容和各標(biāo)志位,還指出下一條待執(zhí)行的指令。 </p><p><b> ?。ㄈ﹨R編命令A(yù)</b></p><p>  若在調(diào)試目標(biāo)程序的過(guò)程中,要求改寫(xiě)或增添一段目標(biāo)程序,則可以用A命令直接在Debug下實(shí)現(xiàn)。 </p><p>&

46、lt;b>  格式:A [地址]</b></p><p>  該命令可以從指定地址開(kāi)始,將輸入的匯編語(yǔ)言語(yǔ)句立即匯編成機(jī)器代碼,連續(xù)存放在內(nèi)存單元中。在程序輸入完畢后,最后一行不輸入內(nèi)容,直接按回車鍵,即可返回DEBUG程序,還可用反匯編命令U對(duì)剛輸入的內(nèi)容進(jìn)行反匯編,以驗(yàn)證輸入的程序是否正確。 </p><p>  使用A命令應(yīng)遵守以下規(guī)則:</p>&l

47、t;p> ?、?所有輸入數(shù)值,均為十六進(jìn)制數(shù)。 </p><p> ?、?前綴助記符,必須在相關(guān)指令的前面輸入,可以在同一行,也可以在不同行輸入。 </p><p> ?、?段超越助記符為CS:、 DS:、 ES:、 SS:。 </p><p> ?、?遠(yuǎn)調(diào)用時(shí)的返回指令助記符用RETF。</p><p> ?、?使用串操作指令時(shí),助記

48、符中必須注明是字節(jié)還是字傳送。 </p><p> ?、?匯編語(yǔ)言能自動(dòng)匯編短、近和遠(yuǎn)的轉(zhuǎn)移及近和遠(yuǎn)的調(diào)用,也能由NEAR和FAR前綴來(lái)超越。 </p><p><b>  例如:</b></p><p>  0110:0600 JMP 602;短轉(zhuǎn)移</p><p>  0110:0602 JMP NEAR 605;近

49、轉(zhuǎn)移</p><p>  0110:0605 JMP FAR 60A;遠(yuǎn)轉(zhuǎn)移</p><p>  第一條JMP指令中含有一個(gè)字節(jié)偏移量。 </p><p>  第二條JMP指令中含有兩個(gè)字節(jié)偏移量。 </p><p>  第三條JMP指令中含有兩個(gè)字節(jié)的偏移量及兩個(gè)字節(jié)的段地址。 </p><p> ?、?當(dāng)DEBUG

50、不能確定某些操作數(shù)涉及的是字類型存儲(chǔ)單元還是字節(jié)類型的存儲(chǔ)單元時(shí),在這種情況下,必須用前綴“WORD PTR”或“BYTE PTR”來(lái)加以說(shuō)明。</p><p><b>  例如:</b></p><p>  NEG BYTE PTR [128] </p><p>  DEC WORD [SI] &l

51、t;/p><p> ?、?當(dāng)Debug不能確定一個(gè)操作數(shù)是立即數(shù)還是存儲(chǔ)單元的地址時(shí),可以把地址放在方括號(hào)中。</p><p>  ⑨ 兩個(gè)最常用的偽指令DB和DW可以在A命令中使用,用來(lái)直接把字節(jié)或字的值送入相應(yīng)的存儲(chǔ)單元。</p><p><b>  例如:</b></p><p>  DB 2,5,3,4,′THIS

52、 IS AN EXAMPLE′</p><p>  DW 6000, 2000, 7000,′BA′ </p><p> ?、釪ebug支持所有形式的寄存器間接尋址命令。</p><p>  例如:ADD BX,74[BP+3][SI-5]</p><p>  POP[BX+DI]</p><p><b&

53、gt; ?。ㄋ模┓磪R編命令U</b></p><p><b>  格式(1):U地址</b></p><p>  該命令從指定的地址開(kāi)始,反匯編32個(gè)字節(jié)。若略去指定地址,則以上一個(gè)U命令反匯編的最后一條指令地址的下一條指令地址作為起始地址;若沒(méi)有用過(guò)U命令,則以由Debug初始化的段寄存器的值作段地址,以100作為地址偏移量。 </p>&

54、lt;p>  格式(2):U范圍這種格式的命令,可以對(duì)指定范圍的內(nèi)存單元進(jìn)行反匯編,范圍可以由起始地址、結(jié)束地址(只能包含地址偏移量)或起始地址及長(zhǎng)度來(lái)指定。其命令格式如:</p><p>  U 04BA:100 0108或 U 04BA:0100 L7</p><p><b>  兩者是等效的。</b></p><p> 

55、 3.3 Debug調(diào)試的主要過(guò)程</p><p>  由于調(diào)試圓柱體的表面積過(guò)程與其他三個(gè)計(jì)算圓柱體體積、計(jì)算最大內(nèi)接長(zhǎng)方體表面積和體積過(guò)程類似,因此這里只介紹調(diào)試圓柱體表面積的過(guò)程。</p><p> ?。ㄒ唬┹斎雸A柱體的底面半徑和高</p><p> ?。ǘ┯?jì)算圓柱體的表面積</p><p> ?。ㄈ⒂?jì)算的結(jié)果從低位至高位壓入棧

56、中,通過(guò)t一步一步調(diào)試將其壓入棧中。</p><p> ?。ㄈ⑿?shù)點(diǎn)壓入棧中部分代碼</p><p> ?。ㄋ模V性赜筛呶恢恋臀惠敵龅斤@示器上</p><p><b>  實(shí)驗(yàn)后的總結(jié)與收獲</b></p><p>  4.1 設(shè)計(jì)中遇到的問(wèn)題</p><p>  在此次課程設(shè)計(jì)的過(guò)程

57、中,我遇到了很多的問(wèn)題,主要有以下一些:</p><p>  (1) 在編程初期首先遇到的是結(jié)構(gòu)化程序的結(jié)構(gòu)很重要,剛開(kāi)編的時(shí)候沒(méi)有寫(xiě)流程圖和算法,結(jié)果程序可讀性很差,也很難查錯(cuò),從中了解到寫(xiě)程序需要一步步來(lái),不能操之過(guò)急。</p><p>  (2) 在編程中時(shí)常出現(xiàn)邏輯錯(cuò)誤。因?yàn)檫@個(gè)錯(cuò)誤在編譯中不會(huì)被發(fā)現(xiàn),所以很難找出,要對(duì)程序一步一步的檢查才行,可以用對(duì)子程序稍加修改后單獨(dú)運(yùn)行來(lái)查錯(cuò)

58、。這體現(xiàn)我經(jīng)歷的程序不夠多,需要在這方面加把勁。</p><p>  4.2 問(wèn)題的解決方法</p><p>  此次課程設(shè)計(jì)中遇到了很多問(wèn)題,在指導(dǎo)老師的幫助下,加上我自己的努力及同學(xué)朋友的全力幫助下,我的這些問(wèn)題都已得到完滿的解決。如怎樣通過(guò)調(diào)試來(lái)檢查出不容易發(fā)現(xiàn)的錯(cuò)誤的問(wèn)題,我通過(guò)可是聽(tīng)老師的講解,課下和同學(xué)討論,最終解決了這個(gè)問(wèn)題。</p><p>  4

59、.3 設(shè)計(jì)后的感想和收獲</p><p>  通過(guò)這一個(gè)學(xué)期的匯編語(yǔ)言的學(xué)習(xí),我對(duì)匯編的認(rèn)識(shí)有了更深理解,切實(shí)的提高了我的編程能力。通過(guò)這次課程設(shè)計(jì)的實(shí)驗(yàn),我對(duì)學(xué)過(guò)的知識(shí)有了更深層次的運(yùn)用,能用匯編語(yǔ)言熟練地運(yùn)用順序、選擇、循環(huán)三大結(jié)構(gòu),進(jìn)一步掌握了各個(gè)指令的功能,特別是轉(zhuǎn)向指令,掌握了子程序的定義及調(diào)用,以及正確地運(yùn)用DEBUG指令。在整個(gè)程序的編寫(xiě)中,調(diào)試占了很大部分的時(shí)間。要想寫(xiě)好匯編語(yǔ)言的程序,必須認(rèn)

60、真對(duì)待代碼的每一個(gè)細(xì)節(jié),還必須熟練的掌握debug命令,這對(duì)程序的調(diào)試是非常重要的。通過(guò)這次實(shí)際動(dòng)手能力的培養(yǎng),我進(jìn)一步熟悉了匯編語(yǔ)言的結(jié)構(gòu)和使用方法,基本達(dá)到了能獨(dú)立閱讀、編制和調(diào)試一定規(guī)模的匯編語(yǔ)言程序的水平。</p><p>  總之,我認(rèn)為我本次課程設(shè)計(jì)基本達(dá)到了要求,所編程序的功能也基本完善。當(dāng)然本程序也存在一定不足,就是不能夠輸入更大的圓柱體底面半徑和高的值來(lái)計(jì)算結(jié)果,當(dāng)然我也想出了一種方法來(lái)加以改進(jìn)

61、,就是把圓周率設(shè)計(jì)為3和14來(lái)處理。對(duì)于3而言,將其代入公式求出其結(jié)果,對(duì)于14而言也代入公式求結(jié)果,然后對(duì)此結(jié)果兩次除以十算出其兩位小數(shù),再將剩余的結(jié)果即整數(shù)部分與上部分3運(yùn)算出來(lái)的結(jié)果相加后再輸出,對(duì)于根號(hào)二也是如此,這樣的話圓柱體底面半徑和高就可以輸入比較大的值了。</p><p><b>  附錄(詳細(xì)源代碼)</b></p><p>  data segm

62、ent</p><p>  i1 db 0dh,0ah,'Please input the radius of cylinder:$'</p><p>  i2 db 0dh,0ah,'The surface area of cylinder:$'</p><p>  i3 db 0dh,0ah,'The v

63、olume of cylinder:$'</p><p>  i4 db 0dh,0ah,'The surface area of rectangular parallelepiped:$'</p><p>  i5 db 0dh,0ah,'The volume of rectangular parallelepiped:$'</p

64、><p>  i6 db 0dh,0ah,'Please input the height of cylinder:$'</p><p>  i db 0 ;計(jì)數(shù)</p><p>  r db ?;半徑</p><p>  h db ?;高</p><p>  decimal dw

65、10 ;作為除數(shù)10以算出每一位的值</p><p>  Pi dw 314 ;圓周率</p><p>  root dw 141 ;根號(hào)2</p><p>  common dw 100</p><p>  data ends</p><p>  stack segment</p>

66、<p>  DB 200 DUP(0)</p><p>  stack ends</p><p>  code segment</p><p>  assume ds:data,ss:stack,cs:code</p><p><b>  main: </b></p><p> 

67、 mov ax,data</p><p><b>  mov ds,ax</b></p><p>  lea dx,i1 ;顯示輸入圓柱體底面半徑的提示信息</p><p><b>  mov ah,9</b></p><p><b>  int 21h</b><

68、;/p><p>  mov ah,1 ;輸入圓柱體的半徑</p><p><b>  int 21h</b></p><p><b>  sub ah,ah</b></p><p>  sub ax,30h </p><p>  mov r,al ;把圓柱體的半

69、徑放到定義的變量r中</p><p>  mov ah,2 ;輸出回車</p><p><b>  mov dx,13</b></p><p><b>  int 21h</b></p><p>  mov ax,data</p><p><b>  mov d

70、s,ax</b></p><p>  lea dx,i6 ;顯示輸入圓柱體高的提示信息</p><p><b>  mov ah,9</b></p><p><b>  int 21h</b></p><p>  mov ah,1 ;輸入圓柱體的高</p>

71、;<p><b>  int 21h</b></p><p><b>  sub ah,ah</b></p><p>  sub ax,30h</p><p><b>  mov h,al</b></p><p>  mov ah,2 ;輸出回車</p&

72、gt;<p><b>  mov dx,13</b></p><p><b>  int 21h</b></p><p><b>  sub ax,ax</b></p><p>  sub cx,cx </p><p>  sub dx,dx ;將各寄存

73、器清零</p><p>  mov al,r ;按計(jì)算圓柱體表面積的公式編寫(xiě)其代碼</p><p><b>  mul r</b></p><p><b>  mul Pi</b></p><p><b>  mov cx,ax</b></p>&l

74、t;p><b>  mov bx,dx</b></p><p><b>  sub ax,ax</b></p><p><b>  mov al,h</b></p><p><b>  mul r</b></p><p><b>  mul

75、 Pi</b></p><p><b>  add ax,cx</b></p><p><b>  adc dx,bx</b></p><p><b>  mov cx,ax</b></p><p><b>  mov bx,dx</b><

76、;/p><p><b>  add ax,cx</b></p><p><b>  adc dx,bx</b></p><p><b>  sub cx,cx</b></p><p>  push ax ;將計(jì)算后表面積的結(jié)果放入ax寄存器</p><p&

77、gt;  lea dx,i2 ;顯示圓柱體的表面積</p><p><b>  mov ah,9</b></p><p><b>  int 21h </b></p><p>  sub ax,ax </p><p>  next0: ;將表面積的結(jié)果除以十,將

78、其最低位放入棧中,當(dāng)計(jì)算到第二位后跳轉(zhuǎn)到下一程序?qū)⑿?shù)點(diǎn)壓入棧中,以保證輸出結(jié)果保留兩位小數(shù)</p><p><b>  pop ax</b></p><p><b>  cwd </b></p><p>  div decimal</p><p><b>  push dx<

79、/b></p><p><b>  inc i</b></p><p><b>  cmp i,2</b></p><p><b>  je next1</b></p><p><b>  cmp ax,0</b></p><p&

80、gt;<b>  jz next2</b></p><p><b>  push ax</b></p><p><b>  jmp next0</b></p><p><b>  next1: </b></p><p><b>  sub dx,

81、dx</b></p><p><b>  mov dx,-2</b></p><p><b>  inc i</b></p><p><b>  push dx</b></p><p><b>  push ax</b></p>

82、<p><b>  jmp next0</b></p><p>  next2: ;將剛才壓入棧中的結(jié)果依次出棧,從最高位開(kāi)始輸出,每輸出一個(gè)數(shù),將其加48以轉(zhuǎn)化為ascll碼輸出字符</p><p><b>  sub ax,ax</b></p><p><b&

83、gt;  sub dx,dx</b></p><p><b>  pop dx</b></p><p>  add dx,30h</p><p><b>  mov ah,2</b></p><p><b>  int 21h </b></p><

84、;p><b>  dec i</b></p><p><b>  cmp i,0</b></p><p><b>  jz next3 </b></p><p><b>  jmp next2</b></p><p><b>  next3

85、:</b></p><p>  mov ah,2 ;輸出回車</p><p><b>  mov dx,13</b></p><p><b>  int 21h</b></p><p>  sub ax,ax ;按求圓柱體體積的公式編寫(xiě)其代碼</

86、p><p>  sub cx,cx </p><p>  sub dx,dx </p><p>  mov al,r </p><p><b>  mul r</b></p><p><b>  mul Pi</b></p><p><b

87、>  mov cx,ax</b></p><p><b>  sub ax,ax</b></p><p><b>  mov al,h</b></p><p><b>  cbw</b></p><p><b>  mul cx</b>&

88、lt;/p><p><b>  push ax</b></p><p>  lea dx,i3 ;顯示圓柱體的體積</p><p><b>  mov ah,9</b></p><p><b>  int 21h</b></p><p>  sub

89、 ax,ax </p><p>  next4: ;將體積的結(jié)果除以十,將其最低位放入棧中,當(dāng)計(jì)算到第二位后跳轉(zhuǎn)到下一程序?qū)⑿?shù)點(diǎn)壓入棧中,以保證輸出結(jié)果保留兩位小數(shù)</p><p><b>  pop ax</b></p><p><b>  cwd </b></p>

90、<p>  div decimal</p><p><b>  push dx</b></p><p><b>  inc i</b></p><p><b>  cmp i,2</b></p><p><b>  je next5</b>&l

91、t;/p><p><b>  cmp ax,0</b></p><p><b>  jz next6</b></p><p><b>  push ax</b></p><p><b>  jmp next4</b></p><p>&

92、lt;b>  next5: </b></p><p><b>  sub dx,dx</b></p><p><b>  mov dx,-2</b></p><p><b>  inc i</b></p><p><b>  push dx</

93、b></p><p><b>  push ax</b></p><p><b>  jmp next4</b></p><p>  next6: ;將剛才壓入棧中的結(jié)果依次出棧,從最高位開(kāi)始輸出,每輸出一個(gè)數(shù),將其加48以轉(zhuǎn)化為ascll碼輸出字符</p>

94、<p><b>  sub ax,ax</b></p><p><b>  sub dx,dx</b></p><p><b>  pop dx</b></p><p>  add dx,30h</p><p><b>  mov ah,2</b>

95、;</p><p><b>  int 21h </b></p><p><b>  dec i</b></p><p><b>  cmp i,0</b></p><p><b>  jz next7 </b></p><p>&

96、lt;b>  jmp next6</b></p><p><b>  next7:</b></p><p>  mov ah,2 ;輸出回車</p><p><b>  mov dx,13</b></p><p><b>  int 21h</b><

97、/p><p><b>  sub ax,ax</b></p><p>  sub cx,cx </p><p>  sub dx,dx </p><p>  mov al,r ;按求長(zhǎng)方體表面積的公式編寫(xiě)其代碼</p><p><b>  mul

98、r</b></p><p><b>  cwd</b></p><p><b>  mov cx,ax</b></p><p><b>  mov bx,dx</b></p><p><b>  sub ax,ax</b></p>

99、<p><b>  mov al,h</b></p><p><b>  mul r</b></p><p><b>  mul root</b></p><p><b>  add ax,cx</b></p><p><b>  a

100、dc dx,bx</b></p><p><b>  mov cx,ax</b></p><p><b>  mov bx,dx</b></p><p><b>  add ax,cx</b></p><p><b>  adc dx,bx</b&g

101、t;</p><p><b>  mov cx,ax</b></p><p><b>  mov bx,dx</b></p><p><b>  add ax,cx</b></p><p>  adc dx,bx </p><p><b&

102、gt;  sub cx,cx</b></p><p><b>  push ax</b></p><p>  lea dx,i4 ;顯示最大內(nèi)接長(zhǎng)方體的表面積</p><p><b>  mov ah,9</b></p><p><b>  int 21h</b

103、></p><p>  sub ax,ax </p><p>  next8: ;將體積的結(jié)果除以十,將其最低位放入棧中,當(dāng)計(jì)算到第二位后跳轉(zhuǎn)到下一程序?qū)⑿?shù)點(diǎn)壓入棧中,以保證輸出結(jié)果保留兩位小數(shù)</p><p><b>  pop ax</b></p><p><b>

104、;  cwd </b></p><p>  div decimal</p><p><b>  push dx</b></p><p><b>  inc i</b></p><p><b>  cmp i,2</b></p><p>

105、<b>  je next9</b></p><p><b>  cmp ax,0</b></p><p><b>  jz next10</b></p><p><b>  push ax</b></p><p><b>  jmp next8

106、</b></p><p><b>  next9: </b></p><p><b>  sub dx,dx</b></p><p><b>  mov dx,-2</b></p><p><b>  inc i</b></p>

107、<p><b>  push dx</b></p><p><b>  push ax</b></p><p><b>  jmp next8</b></p><p>  next10: ;將剛才壓入棧中的結(jié)果依次出棧,從最高位開(kāi)始輸出,每輸出一個(gè)數(shù),

108、將其加48以轉(zhuǎn)化為ascll碼輸出字符</p><p><b>  sub ax,ax</b></p><p><b>  sub dx,dx</b></p><p><b>  pop dx</b></p><p>  add dx,30h</p><p&

109、gt;<b>  mov ah,2</b></p><p><b>  int 21h </b></p><p><b>  dec i</b></p><p><b>  cmp i,0</b></p><p>  jz next11 </p>

110、;<p>  jmp next10</p><p><b>  next11:</b></p><p>  mov ah,2 ;輸出回車</p><p><b>  mov dx,13</b></p><p><b>  int 21h</b></p&g

111、t;<p><b>  sub ax,ax</b></p><p>  sub cx,cx </p><p>  sub dx,dx </p><p>  mov al,r ;按求長(zhǎng)方體體積的公式編寫(xiě)其代碼</p><p><b>  mul r</b&

112、gt;</p><p><b>  mul h</b></p><p><b>  mov cx,ax</b></p><p><b>  mov bx,dx</b></p><p><b>  add ax,cx</b></p><p

113、><b>  adc dx,bx</b></p><p><b>  mov cx,ax</b></p><p><b>  mov ax,cx</b></p><p>  mul common</p><p><b>  sub cx,cx</b>

114、</p><p><b>  push ax</b></p><p>  lea dx,i5 ;顯示最大內(nèi)接長(zhǎng)方體的體積</p><p><b>  mov ah,9</b></p><p><b>  int 21h</b></p><p>

115、  sub ax,ax </p><p>  next12: ;將體積的結(jié)果除以十,將其最低位放入棧中,當(dāng)計(jì)算到第二位后跳轉(zhuǎn)到下一程序?qū)⑿?shù)點(diǎn)壓入棧中,以保證輸出結(jié)果保留兩位小數(shù)</p><p><b>  pop ax</b></p><p><b>  cwd </b><

116、;/p><p>  div decimal</p><p><b>  push dx</b></p><p><b>  inc i</b></p><p><b>  cmp i,2</b></p><p><b>  je next13<

117、;/b></p><p><b>  cmp ax,0</b></p><p><b>  jz next14</b></p><p><b>  push ax</b></p><p>  jmp next12</p><p><b>

118、  next13: </b></p><p><b>  sub dx,dx</b></p><p><b>  mov dx,-2</b></p><p><b>  inc i</b></p><p><b>  push dx</b>&l

119、t;/p><p><b>  push ax</b></p><p>  jmp next12</p><p>  next14: ;將剛才壓入棧中的結(jié)果依次出棧,從最高位開(kāi)始輸出,每輸出一個(gè)數(shù),將其加48以轉(zhuǎn)化為ascll碼輸出字符</p><p><b>  sub ax,

120、ax</b></p><p><b>  sub dx,dx</b></p><p><b>  pop dx</b></p><p>  add dx,30h</p><p><b>  mov ah,2</b></p><p><b

121、>  int 21h </b></p><p><b>  dec i</b></p><p><b>  cmp i,0</b></p><p>  jz next15 </p><p>  jmp next14</p><p>  next15:

122、 </p><p>  mov ah,4ch</p><p>  int 21h </p><p>  code ends</p><p><b>  end main</b></p><p><b>  參考文獻(xiàn)</b></p><p&g

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論