版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告
- 匯編語(yǔ)言課程設(shè)計(jì)安排
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告a
- 匯編語(yǔ)言推箱子課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)----電子鬧鐘
- 打字游戲-匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言程序設(shè)計(jì)-課程設(shè)計(jì)
- 匯編語(yǔ)言程序設(shè)計(jì)課程設(shè)計(jì)
- 匯編語(yǔ)言動(dòng)畫(huà)設(shè)計(jì)課程設(shè)計(jì)
- 微機(jī)原理與匯編語(yǔ)言課程設(shè)計(jì)
- 匯編語(yǔ)言課程設(shè)計(jì)磁盤(pán)文件管理
- 匯編語(yǔ)言課程設(shè)計(jì)_提取系統(tǒng)時(shí)間
- 匯編語(yǔ)言課程設(shè)計(jì)《定時(shí)顯示系統(tǒng)》
- 匯編語(yǔ)言課程設(shè)計(jì)報(bào)告---打字游戲
- 匯編語(yǔ)言課程設(shè)計(jì)--代碼轉(zhuǎn)換程序
- 《匯編語(yǔ)言》課程設(shè)計(jì)---用匯編語(yǔ)言進(jìn)行音樂(lè)動(dòng)畫(huà)功能的實(shí)現(xiàn)
- 匯編語(yǔ)言課程設(shè)計(jì) 音樂(lè)點(diǎn)播程序
評(píng)論
0/150
提交評(píng)論