版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、重慶工學院 匯編語言程序設(shè)計實驗指導書匯編語言程序設(shè)計實驗指導書(第一版)邵桂芳 黃賢英 劉政 肖朝暉編重慶工學院計算機學院2006年10月目 錄有關(guān)匯編語言3實驗一 匯編語言上機操作過程(驗證性實驗)4實驗二 DEBUG的使用(驗證性實驗)12實驗三 基本運算程序設(shè)計(設(shè)計性實驗)22實驗四 順序程序設(shè)計(設(shè)計性實驗)28實驗五 字符處理程序設(shè)計(設(shè)計性實驗)32實驗六 分支程序設(shè)計(設(shè)計性實驗)35實驗七 循環(huán)程序設(shè)計(設(shè)計性實驗)40實驗八 子程序設(shè)計(設(shè)計性實驗)45實驗九 中斷程序設(shè)計(設(shè)計性實驗)58實驗十 磁盤文件管理(設(shè)計性實驗)66實驗十一 輸入輸出程序設(shè)計(綜合性實驗)70
2、實驗十二 圖形顯示程序設(shè)計(綜合性實驗)77附錄1 實驗報告編寫方法96附錄2 匯編語言基本指令982.1 數(shù)據(jù)傳送類指令982.2 算術(shù)運算類指令1002.3 邏輯操作類指令1032.4 串操作類指令1052.5 控制轉(zhuǎn)移類指令1072.6 處理機控制類指令110附錄3 測試題1113.1 測試題一1113.2 測試題二1153.3 測試題三1193.4 測試題四1243.5 參考答案127使用范圍:全院電子信息類、管理類等本、專科采用使用說明:任課教師根據(jù)教學進程,可以選擇實驗內(nèi)容,實驗九以后的內(nèi)容,可以作為課程設(shè)計內(nèi)容。每個實驗都安排了預備知識,是幫助學生做好實驗準備的,請任課教師在實驗
3、課前,安排學生預習該內(nèi)容,以提高實驗效果。有關(guān)匯編語言1什么是匯編語言匯編語言是一種符號化的機器語言,即用助記符號代替機器語言的二進制代碼。簡單地說,匯編語言就是機器語言的一種可以被人讀懂的形式,只不過它更容易記憶。匯編語言是除了機器語言之外最接近計算機硬件的編程語言,因此,它可以最大限度地發(fā)揮計算機硬件的性能。用匯編語言編寫的程序的速度通常要比高級語言和C/C+快很多-幾倍,幾十倍,甚至成百上千倍。當然,解釋語言,如解釋型LISP,沒有采用JIT技術(shù)的Java虛機中運行的Java等等,其程序速度更無法與匯編語言程序同日而語。2學習匯編的好處通過學習匯編語言,可以了解到如何有效地設(shè)計數(shù)據(jù)結(jié)構(gòu),
4、讓計算機處理得更快,并使用更少的存儲空間;同時,學習匯編語言可以讓你熟悉計算機內(nèi)部運行機制,并且有效地提高調(diào)試能力。因為“結(jié)構(gòu)化”是以犧牲運行效率來提高可讀性與可調(diào)試性,這對于完成一般軟件工程的編碼階段是非常必要的。然而,在一些地方,比如,硬件驅(qū)動程序、操作系統(tǒng)底層,或者程序中經(jīng)常需要執(zhí)行的代碼,結(jié)構(gòu)化程序設(shè)計的這些優(yōu)點有時就會被它的低效率所抹煞。3匯編語言的特點(1)匯編語言與處理器密切相關(guān); (2)匯編語言程序效率高;(3)編寫匯編語言源程序比編寫高級語言源程序煩瑣; (4)調(diào)試匯編語言程序比調(diào)試高級語言程序困難。 4匯編語言的應用(1)程序執(zhí)行占用較短的時間,或者占用較小存儲容量的場合;
5、 (2)程序與計算機硬件密切相關(guān),程序直接控制硬件的場合; (3)需提高大型軟件性能的場合; (4)沒有合適的高級語言的場合。 實驗一 匯編語言上機操作過程(驗證性實驗)一、實驗要求和目的1了解匯編語言程序設(shè)計的編程環(huán)境;2熟悉Windows下匯編語言程序設(shè)計的操作流程;3掌握編輯、匯編、連接等應用程序的使用方法。二、環(huán)境和設(shè)備1硬件環(huán)境:微機CPU 486以上,500MB以上硬盤,32M以上內(nèi)存;2軟件環(huán)境:裝有MASM 5.0、DEBUG、LINK和EDIT等應用程序。三、實驗學時2學時四、預備知識1匯編語言上機操作流程匯編語言上機操作過程如圖1-1所示,包括建立源程序、匯編成目標文件、連
6、接成可執(zhí)行文件、執(zhí)行程序、調(diào)試程序等。EDITMASM*.ASM*.OBJLINK*.EXEDEBUG執(zhí)行*.LST*.CRF*.MAP建立圖1-1 匯編語言上機操作流程基于Windows的匯編語言上機操作步驟如下:(1)安裝MASM 5.0、DEBUG、LINK和EDIT等應用程序方法為先在某個盤符下建立名為masm5的文件夾,然后下載這幾個應用程序到該文件夾。如圖1-2所示,在E盤下建立名為masm5的文件夾,該文件夾下有包括masm等在內(nèi)的6個應用程序。圖1-2 安裝應用程序(2)打開命令提示符窗口方法為:選擇“開始程序附件命令提示符”。(3)進入包含匯編語言應用程序的文件夾方法為:在命
7、令提示符窗口輸入相應盤符,加冒號,然后回車,則進入相應盤符,如輸入“E:”。然后,利用CD命令進入某個文件夾,如輸入“CD MASM5”,則可以進入masm5文件夾。如圖1-3所示。E:MASM5Microsoft Windows XP 版本 5.1.2600版權(quán)所有 1985-2001 Microsoft Corp.C:Documents and SettingsAdministratore:E:cd masm5E:MASM5cd masm系統(tǒng)找不到指定的路徑版本信息進入某個磁盤利用CD命令進入文件夾如果還有子目錄,則再利用CD進入下一級目錄圖1-3 DOS命令使用(4)利用EDIT編輯源程
8、序方法為:在命令提示符窗口的相應文件夾下,輸入EDIT *.ASM,進入EDIT編輯界面,輸入源程序,然后保存,退出EDIT。如圖1-4所示。圖1-4 EDIT編輯源程序(5)利用MASM進行匯編方法為:在命令提示符窗口的相應文件夾下,輸入MASM *.ASM,回車,然后按提示進行回車確認即可,匯編結(jié)束后,顯示錯誤提示信息,沒有錯誤則進入(6),有錯誤則回到(4)進行修改。(6)利用LINK進行連接方法為:在命令提示符窗口的相應文件夾下,輸入LINK *.OBJ,回車,確認即可。(7)運行程序方法為:在命令提示符窗口的相應文件夾下,輸入文件名,回車即可。(8)利用DEBUG調(diào)試程序方法為:在命
9、令提示符窗口的相應文件夾下,輸入DEBUG *.EXE,進入DEBUG調(diào)試窗口。2EDIT應用程序的使用(1)進入EDIT方法為:在命令提示符窗口的當前目錄下(即包含匯編應用程序的文件夾下,如E:MASM5),輸入“EDIT *.ASM”,則進入EDIT編輯界面。如果*.ASM已經(jīng)存在,則在屏幕上顯示該源程序內(nèi)容,如果是新建文件,則打開空的編輯界面。如圖1-5所示。(2)文本輸入在EDIT編輯界面中,可以通過鍵盤一行行的輸入語句,也可以在任意位置輸入相關(guān)信息。(3)文本修改先利用上下左右鍵(“ ”)將光標移動到要修改的位置,然后利用刪除鍵或回格鍵刪除單個字符。如果想刪除整行文本,可將光標移動到
10、該行任意位置,然后按住“SHIFT+”就可以選中該行。如果想選中多行,則一直按住SHIFT鍵,不斷按鍵就可以。圖1-5 EDIT編輯界面(4)保存源程序如果源程序編輯完畢,則可利用“ALT+F”選中文件菜單,然后利用“、”鍵選擇Save或Save As保存源程序。(5)退出EDIT利用“ALT+F”選中文件菜單,然后利用鍵即可選中Eixt退出,回車確認即可。3MASM應用程序的使用利用EDIT編好源程序后,保存并退出EDIT,返回到命令提示符窗口,此時可以利用匯編程序MASM來完成程序的編譯。由于計算機只能識別0、1二進制數(shù)據(jù),而匯編語言源程序是由助記符表示的指令序列,計算機不能直接識別,故需
11、要進行編譯,將其轉(zhuǎn)換為機器程序。MASM就是用來把匯編源程序轉(zhuǎn)換為機器語言程序的工具。(1)匯編操作在命令提示符窗口的相應目錄下,輸入“MASM *.ASM”,則顯示MASM版本信息,然后依次出現(xiàn)提示,請求用戶回答。如圖1-6所示。Microsoft Macro Assembler Version 5.00Copyright Microsoft Corp 1981-1985,1987. All rights reservedObject filename m1.OBJ:m1.asm:error A2105:Expected:instruction or directiveE:MASM5masm
12、 m1.asmSource listing NUL.LST:Cross-reference NUL.CRF:m1.asm:error A2009:Symbol not defined:CODEm1.asm:error A2024:Segment parameters are changedm1.asm:error A2086:Data emitted with no segmentm1.asm:error A2009:Symbol not defined:ASm1.asm:error A2086:Data emitted with no segmentm1.asm:error A2086:Da
13、ta emitted with no segment50392+415144 Bytes symbol space free0 Warning Errors7 Severe ErrorsE:MASM5目標文件列表文件交叉索引文件錯誤提示信息MASM版本信息錯誤出現(xiàn)的行數(shù)圖1-6 MASM的使用(2)目標文件的確認在版本信息下,有“Object filename *.OBJ:”提示信息,其中“*”自動采用源程序名稱,該信息提示用戶是否確認目標文件的名字,如果采用這個名稱則按回車鍵,不采用則重新輸入新名字。(3)列表文件的確認在確認了目標文件名后,則顯示“Source listing NUL.LS
14、T:”信息,該信息表示不建立列表文件,如果用戶不想建立列表文件,則回車確認;如果想建立列表文件,則輸入列表文件名(一般與源程序同名),回車。列表文件包含了源程序及其注釋、地址和目標碼等,是ASCII碼表示的文本塊,可用TYPE命令顯示。列表文件內(nèi)容如圖1-7所示。(4)交叉索引文件的確認在確認了列表文件后,則顯示“Cross-reference NUL.CRF:”信息,該信息表示不建立交叉索引文件,如果用戶不想建立交叉索引文件,則回車確認;否則,輸入文件名,回車。交叉索引文件是用來解釋源程序中每個符號是在哪定義的,哪些指令用了這個符號等信息的。(5)錯誤提示在確認了(2)、(3)和(4)的信息
15、后,如果源程序有語法錯誤,會給出錯誤提示信息,錯誤提示信息是以行為單位給出的,如圖1-6所示,給出了第4-14行的錯誤提示,此時需要返回EDIT進行源程序修改。圖1-7 列表文件內(nèi)容4LINK應用程序的使用在對源程序的語法錯誤進行修改后,利用MASM匯編源程序沒有錯誤時,則需要利用LINK進行連接。(1)連接操作在命令提示符窗口的相應目錄下,輸入“LINK *.OBJ”,則顯示LINK版本信息,然后依次出現(xiàn)提示,請求用戶回答。如圖1-8所示。(2)可執(zhí)行文件的確認在版本信息下,有“Run File *.EXE:”提示信息,其中“*”自動采用源程序名稱,該信息提示用戶是否確認可執(zhí)行文件的名字,如
16、果采用這個名稱則按回車鍵,不采用則重新輸入新名字。Microsoft Macro Assembler Version 5.00Copyright Microsoft Corp 1981-1985,1987. All rights reservedObject filename m1.OBJ:E:MASM5link m1.objSource listing NUL.LST:Cross-reference NUL.CRF:50390+415146 Bytes symbol space free0 Warning Errors0 Severe ErrorsE:MASM5_目標文件列表文件交叉索引文件
17、LINK版本信息Microsoft Overlay Linker Version 3.60Copyright Microsoft Corp 1983-1987. All rights reserved.Run File M1.EXE:List File NUL.MAP:Libraries .LIB:LINK:warning L4021:no stack segment連接目標文件提示源程序中沒有定義堆棧產(chǎn)生可執(zhí)行文件映象文件是否連接庫文件匯編無錯誤圖1-8 LINK連接目標文件(3)確認映象文件在確認了可執(zhí)行文件名后,則顯示“List file NUL.MAP:”信息,該信息表示不建立映象文件
18、,如果用戶不想建立映象文件,則回車確認;如果想建立,則輸入映象文件名(一般與源程序同名),回車。映象文件主要對段分配情況進行說明,如段的起始、終止地址、段長度、段名等。(4)確認庫文件的連接庫文件是經(jīng)常使用的目標文件集合,主要是為了提高效率以及調(diào)試方便而建立的。如果需要文件庫中的某些目標文件時,則在“Libraries .LIB”后給出庫的名稱或路徑。5運行程序利用LINK對目標文件進行連接后,會產(chǎn)生后綴名為EXE的可執(zhí)行文件,此時可以在命令提示符窗口直接輸入該文件名,回車運行該程序。五、實驗內(nèi)容與步驟以顯示“hello world!”的匯編語言源程序MYFILE.ASM為例練習匯編語言程序設(shè)
19、計操作流程。源程序如下:data segmentstring db hello world!$;數(shù)據(jù)定義data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax lea dx,string;顯示字符串 mov ah,9 int 21h mov ah,4ch int 21hcode ends end start(1)打開命令提示符窗口,進入包含匯編應用程序的相應文件夾。(2)利用EDIT編輯源程序MYFILE.ASM,方法為輸入“EDIT MYFILE.ASM”,進入EDIT操作界面,然后輸入上述源程序,保存
20、并退出EDIT。(3)利用MASM匯編源程序,方法為“MASM MYFILE.ASM”,如果有錯誤則返回(2)進行修改,沒有錯誤則進入(4)。(4)利用LINK連接目標程序,方法為“LINK MYFILE.OBJ”。(5)執(zhí)行可執(zhí)行文件,方法為“MYFILE.EXE”回車即可,此時屏幕上會顯示出“hello world!”字樣。六、思考題1如何在匯編語言源程序中輸入中文注釋?2如何實現(xiàn)多個目標文件的連接?實驗二 DEBUG的使用(驗證性實驗)一、實驗要求和目的1了解DEBUG的使用方法;2熟悉DEBUG基本命令;3掌握利用DEBUG查看程序運行結(jié)果的方法。二、環(huán)境和設(shè)備1硬件環(huán)境:微機CPU
21、486以上,500MB以上硬盤,32M以上內(nèi)存;2軟件環(huán)境:裝有MASM 5.0、DEBUG、LINK和EDIT等應用程序。三、實驗學時2學時四、預備知識1進入DEBUG在編輯好源程序,匯編連接后,產(chǎn)生可執(zhí)行文件,如果運行結(jié)果不符合要求或者沒有直接顯示結(jié)果,可以利用DEBUG進行查看或調(diào)試。進入DEBUG的方法是:DEBUG *.EXE或直接輸入DEBUG2程序的調(diào)入在DEBUG下調(diào)入程序的方法有兩種,第一種是在進入DEBUG時直接調(diào)入,即在對源程序進行匯編、連接產(chǎn)生可執(zhí)行文件后,在命令提示符窗口輸入“DEBUG *.EXE”。第二種是在DEBUG下通過N和L命令調(diào)入,方法為先利用N命令指定要
22、調(diào)試的程序名稱,然后再利用L命令將其裝載到指定區(qū)域。N命令的使用方法為:“N *.EXE”,表示將該程序分配到CS:5C開始的區(qū)域中。L命令的使用方法為:“L”。表示將N命令指定的文件調(diào)入內(nèi)存指定區(qū)域。3U命令的使用U為反匯編命令,即將存儲器內(nèi)容翻譯成匯編語言語句并顯示其對應的地址、機器數(shù)和操作數(shù)等。如圖2-1所示。U命令有三種使用方法:(1)第一種為“U”,初次使用時顯示從偏移地址0開始的若干條指令,再次使用則接著上次顯示的偏移地址的指令開始顯示后續(xù)指令;(2)第二種用法為“U 地址”,如“U 13”表示顯示從偏移地址0013開始的指令序列;(3)第三種方法為“U 范圍”,如“U 0 13”
23、,表示顯示從偏移地址0-13的指令。圖2-1 U命令的使用4D命令的使用D命令為顯示內(nèi)存數(shù)據(jù)指令。可以查看存儲器數(shù)據(jù),其使用方法有如下幾種,如圖2-2所示:(1)D 段地址:偏移地址這種使用方法主要是查看某個規(guī)定段從偏移地址開始的數(shù)據(jù)內(nèi)容。例如,(DS)=2000H,想看數(shù)據(jù)段從偏移地址0開始的數(shù)據(jù),就在DEBUG下輸入“D 2000:0”。(2)D這種用法是查看默認段的數(shù)據(jù),如果是首次使用,則查看的是代碼段數(shù)據(jù)。如果前面使用過D命令,則再使用“D”時,查看的是與前面使用過D命令查看的段,并接著前面查看顯示的偏移地址顯示數(shù)據(jù)。例如,前面使用過“D 142F:0”,查看數(shù)據(jù)段從偏移地址0開始的數(shù)
24、據(jù),如圖2-2所示,再次使用“D”,則顯示142F:0080開始的數(shù)據(jù),就是接著顯示數(shù)據(jù)段內(nèi)容。(3)D 地址1 地址2這種用法是查看某個范圍內(nèi)的數(shù)據(jù),如果不給段地址則默認查看代碼段數(shù)據(jù)。圖2-2 D命令的使用5G命令的使用-qE:MASM5debug m1.exe-u 0 F1430:0000B82F14MOVAX,142F1430:00038ED8MOVDS,AX1430:00058D160000LEADX,00001430:0009B409MOVAH,091430:000BCD21INT211430:000DB44CMOVAH,4C1430:000FCD21INT21-g 5AX=142
25、F BX=0000 CX=0021 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=142F ES=141F SS=142F CS=1430 IP=0005 NV UP EI PL NZ NA PO NC1430:00058D160000LEADX,0000 DS:0000=6568-ghello world!Program terminated normally-g 3 9AX=142F BX=0000 CX=0021 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=142F ES=141F SS=142F CS=143
26、0 IP=0009 NV UP EI PL NZ NA PO NC1430:0009B409MOVAH,09 -程序正常結(jié)束帶斷點運行反匯編結(jié)果運行整個程序下一條要執(zhí)行的指令寄存器與標志位情況圖2-3 G命令的使用G命令為運行程序指令。主要有兩種用法,如圖2-3所示:(1)G沒有斷點的運行。程序執(zhí)行完畢會顯示Program terminated normally,表示程序正常結(jié)束。(2)G 偏移地址帶斷點運行。最多可以帶10個斷點,斷點必須包含有效的指令碼。程序執(zhí)行到一個斷點地址時,會停下來,顯示CPU各寄存器內(nèi)容和各標志位的狀態(tài),以及下一條要執(zhí)行的指令。只要一個斷點滿足并執(zhí)行,其余斷點全部被
27、取消,返回DEBUG。6T命令的使用跟蹤指令,可以跟蹤一條或多條指令,每執(zhí)行一條指令后就顯示當前各寄存器內(nèi)容和標志位狀態(tài),以及下一條要執(zhí)行的指令。T命令的缺點是,如果程序中有DOS或BIOS中斷,它將跟蹤到中斷服務程序的內(nèi)部,有時會出現(xiàn)死機現(xiàn)象。其用法有兩種,如圖2-4所示:E:MASM5debug mmm.exe-tAX=0000 BX=0000 CX=0093 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=1420 ES=1420 SS=1430 CS=1432 IP=0001NV UP EI PL NZ NA PO NC1432:00012BC0SU
28、BAX,AX-t 4AX=0000 BX=0000 CX=0093 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000DS=1420 ES=1420 SS=1430 CS=1432 IP=0003NV UP EI PL ZR NA PE NC1432:000350PUSHAXAX=0000 BX=0000 CX=0093 DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000DS=1420 ES=1420 SS=1430 CS=1432 IP=0004NV UP EI PL ZR NA PE NC1432:0004B83014MOVAX,14
29、30AX=0000 BX=0000 CX=0093 DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000DS=1420 ES=1420 SS=1430 CS=1432 IP=0007NV UP EI PL ZR NA PE NC1432:00078ED8MOVDS,AXAX=0000 BX=0000 CX=0093 DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000DS=1420 ES=1420 SS=1430 CS=1432 IP=0009NV UP EI PL ZR NA PE NC1432:0009B01CMOVAL,1C-單條指令跟
30、蹤多條指令跟蹤標志位情況寄存器情況圖2-4 T命令的使用(1)T單條指令跟蹤,執(zhí)行后顯示寄存器內(nèi)容和標志位狀態(tài),并顯示下一條要執(zhí)行的指令。(2)T 地址多條指令跟蹤,如T 6,執(zhí)行6條指令跟蹤,每條指令執(zhí)行后,顯示所有寄存器內(nèi)容及標志位情況。第6條指令執(zhí)行完成后,顯示停止。7R命令的使用檢查和修改寄存器內(nèi)容指令。有三種功能,如圖2-5所示:1432:0009B01CMOVAL,1C-rAX=1430 BX=0000 CX=0093 DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000DS=1430 ES=1420 SS=1430 CS=1432 IP=0009 NV
31、UP EI PL ZR NA PE NC1432:0009B01CMOVAL,1C-r cxCX 0093:0028-rAX=1430 BX=0000 CX=0028 DX=0000 SP=FFFC BP=0000 SI=0000 DI=0000DS=1430 ES=1420 SS=1430 CS=1432 IP=0009 NV UP EI PL ZR NA PE NC1432:0009B01CMOVAL,1C-r fNV UP EI PL ZR NA PE NC-OVOV UP EI PL ZR NA PE NC-OV DN EI PL NZ-r fOV DN EI PL NZ NA PE
32、NC-r f顯示所有寄存器內(nèi)容顯示單個寄存器內(nèi)容-修改某些標志位修改后CX內(nèi)容修改CX內(nèi)容圖2-5 R命令的使用(1)R顯示所有寄存器內(nèi)容,以及標志位狀態(tài)和下一條要執(zhí)行的指令。(2)R REG顯示單個寄存器內(nèi)容,并可以修改寄存器內(nèi)容。如R AX,回車后在屏幕上顯示AX寄存器內(nèi)容,如果需要修改AX內(nèi)容,則直接輸入16位數(shù)據(jù),不需要修改則回車。(3)R F顯示8個標志位狀態(tài),并可以修改其中任何一個或全部修改。7其他相關(guān)命令的使用(1)Q命令退出DEBUG命令。(2)E命令修改存儲單元內(nèi)容命令,默認對數(shù)據(jù)段進行操作。有兩種使用方法,如圖2-6所示,一是E 地址,對某個單元的數(shù)據(jù)進行修改,也可以完成多
33、個連續(xù)單元的數(shù)據(jù)修改,方法是在第一次修改內(nèi)容后,按空格鍵,則會出現(xiàn)下一個單元數(shù)據(jù),在.后面輸入修改內(nèi)容,再按空格鍵,可以繼續(xù)修改;二是E 地址 數(shù)據(jù),對多個單元數(shù)據(jù)進行修改。(3)F命令填充命令,向內(nèi)存單元中填充數(shù)據(jù),用法為“F 起始地址 終止地址 數(shù)據(jù)列表”,例如“F 1430:0 1430:10 FF 34”,表示將段地址為1430的內(nèi)存16個單元的數(shù)據(jù)用FF和34重復填充。又如“F 1425:0 1425:5 00 01 02 03 04 05 06”,表示將段地址為1425的內(nèi)存5個單元的數(shù)據(jù)用后面列表的前5個數(shù)來填充。(4)S命令索引命令,從地址范圍中檢索出列表里的字符,如果找到則用
34、找到字符的地址顯示來標識,用法為“S 起始地址 終止地址 列表”,默認對數(shù)據(jù)段進行操作。如“S 1430:0 10 e”,表示在段地址為1430的前16個單元內(nèi)查找e字符,如果找到則顯示“1430:0004”,表示偏移地址為4的單元是字符e。(5)M命令傳送命令,把指定范圍的內(nèi)存單元數(shù)據(jù)傳送到另一指定地址開始的存儲區(qū)中,用法為“M 起始地址 終止地址 存儲起始地址”。如“M 1420:0 10 1420:30”,表示將段地址為1420的前16個單元數(shù)據(jù)傳送到1420:30起始地址的單元中去。圖2-6 E命令的使用五、實驗內(nèi)容與步驟1編輯并調(diào)試下列程序,并說明運行結(jié)果是什么data segmen
35、ta db 20hb db 33hc db ?data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov al,a add al,b;加法運算,完成a+b mov ah,0 adc ah,0;構(gòu)成ax mov bl,2;除數(shù) div bl;除法運算,完成(a+b)/2 mov c,al;保存結(jié)果到c單元 mov ah,4ch;程序結(jié)束 int 21hcode ends end start圖2-7 利用DEBUG查看結(jié)果(1)利用EDIT將上述源程序編輯好,并取名s2.asm,退出EDIT;(2)利用M
36、ASM匯編源程序,方法為“MASM s2.asm”;(3)如果匯編操作沒有錯誤,則利用LINK連接目標文件,方法為“LINK s2.obj”;如果有錯誤,則返回(1)進行修改;(4)連接沒有問題則利用DEBUG進入調(diào)試狀態(tài),方法為“DEBUG s2.exe”,首先利用U命令,查看數(shù)據(jù)段地址,然后利用G命令運行程序,再用D命令查看結(jié)果。如圖2-7所示。2編輯并調(diào)試下列程序data segmenterrmess db error!,0ah,0dh,$;錯誤信息提示data endscode segment assume cs:code,ds:datastart: mov ax,data mov d
37、s,axl0: mov ah,1;通過鍵盤輸入單個字符數(shù)據(jù) int 21h cmp al,#;判斷輸入數(shù)據(jù)是否是# jz done;是則結(jié)束程序,轉(zhuǎn)到done cmp al,A;不是則判斷輸入數(shù)據(jù)是否小于A jb err;小于A代表輸入的不是大寫字母,轉(zhuǎn)err顯示錯誤提示 cmp al,Z;大于A,則判斷該數(shù)據(jù)是否大于Z ja err;大于Z,代表不是大寫字母,轉(zhuǎn)err顯示錯誤提示 add al,20h;小于Z,表示是大寫字母,加20H轉(zhuǎn)成小寫字母 mov dl,al;顯示該小寫字母 mov ah,2 int 21h jmp l0;顯示完畢轉(zhuǎn)l0,繼續(xù)輸入數(shù)據(jù)err:lea dx,errmes
38、s;顯示錯誤提示信息 mov ah,9 int 21h jmp l0;顯示完畢轉(zhuǎn)l0,繼續(xù)輸入數(shù)據(jù)done:mov ah,4ch;程序結(jié)束 int 21hcode ends end start(1)利用EDIT編輯上述源程序,并保存為s3.asm,退出EDIT;(2)利用MASM匯編源程序,方法為“MASM s3.asm”;(3)如果匯編沒有錯誤,則利用LINK連接目標文件,方法為“LINK s3.obj”;如果有錯誤則返回(1)修改錯誤;(4)運行程序,方法為“s3”,為測試程序的有效性,運行后先輸入小寫字母a,查看結(jié)果,再輸入數(shù)字3,查看結(jié)果;再輸入大寫字母B,查看結(jié)果;再輸入#,查看結(jié)果
39、。(5)利用DEBUG調(diào)試程序,方法為“DEBUG s3.exe”;首先利用U查看幾個標號的偏移地址以及數(shù)據(jù)段的數(shù)據(jù)定義情況,如圖2-8(a)所示;然后利用帶斷點的G命令,分別測試程序的功能,該程序有3個斷點可以測試,分別是15H、1FH和29H,如圖2-8(b)所示。圖2-8(a) 利用DEBUG調(diào)試程序圖2-8(b) 利用DEBUG調(diào)試程序輸入“G 15 1F 29”,此時等待從鍵盤輸入數(shù)據(jù),輸入小寫字母b,測試程序是否會轉(zhuǎn)入1F分支,即輸入有錯,顯示錯誤提示;輸入“G 15 1F 29”,此時等待從鍵盤輸入數(shù)據(jù),輸入#,測試程序是否會轉(zhuǎn)入29分支,即結(jié)束程序;輸入“G 15 1F 29”
40、,此時等待從鍵盤輸入數(shù)據(jù),輸入大寫字母A,測試程序是否會轉(zhuǎn)入15分支,即將輸入的大寫字母加20H轉(zhuǎn)換為小寫字母并顯示; 六、思考題1第2題的斷點15、29、1F是什么地址?2第2題為什么每次測試后,要重新進入DEBUG?實驗三 基本運算程序設(shè)計(設(shè)計性實驗)一、實驗要求和目的1了解匯編語言傳送指令及算術(shù)運算類指令的使用方法;2熟悉利用DEBUG查看運算結(jié)果的基本方法;3掌握利用匯編語言實現(xiàn)多字節(jié)數(shù)據(jù)基本運算的方法。二、環(huán)境和設(shè)備1硬件環(huán)境:微機CPU 486以上,500MB以上硬盤,32M以上內(nèi)存;2軟件環(huán)境:裝有MASM 5.0、DEBUG、LINK和EDIT等應用程序。三、實驗學時2學時四
41、、預備知識1匯編語言程序設(shè)計框架(1)數(shù)據(jù)段定義數(shù)據(jù)段主要完成程序所需數(shù)據(jù)的定義,主要包括三方面的數(shù)據(jù):一是數(shù)值型數(shù)據(jù),其基本定義方法為“變量名 數(shù)據(jù)類型 數(shù)據(jù)”,例如“N DW 1225,2302H”。二是字符串型數(shù)據(jù),其基本定義方法為“變量名 數(shù)據(jù)類型 數(shù)據(jù)”,如“STRING DB HELLO$”,在匯編語言中,字符串數(shù)據(jù)由單引號引起,通常占一個字節(jié),由ASCII碼表示每個字符,一般由$表示字符串定義結(jié)束。三是地址型數(shù)據(jù)定義,其基本定義方法為“變量名 數(shù)據(jù)類型 標號或變量”,例如“NUM DW A”,表示將A的偏移地址賦給NUM,NUM占2個字節(jié)空間;如果是“NUM DD A”則表示把A
42、的段地址和偏移地址賦給NUM,NUM占連續(xù)4個字節(jié)空間。DATA SEGMENTDATA ENDSNUM DB 25,30H段定義偽指令段名變量名段定義結(jié)束偽指令數(shù)據(jù)類型DB表示字節(jié)類型段定義主要由SEGMENT和ENDS偽指令來完成,具體定義方法參見圖3-1。段名可自己任意定義,注意不能與其他段名重復。圖3-1 數(shù)據(jù)段定義示例(2)代碼段定義代碼段主要完成實現(xiàn)功能的具體程序設(shè)計,在匯編語言下,代碼段定義有個基本框架,如圖3-2所示,里面標注的內(nèi)容基本上是每次寫程序都要做的工作,省略號處代表實現(xiàn)功能需求的程序段。圖3-2 代碼段定義示例2匯編語言下的程序或數(shù)據(jù)存儲匯編語言程序設(shè)計是分段進行的,
43、有專門定義數(shù)據(jù)的數(shù)據(jù)段和附加段,有專門存放程序指令的代碼段,也有用于完成堆棧操作的堆棧段。所有這些段都是存儲器的一部分,存儲器以字節(jié)為單位進行數(shù)據(jù)存儲,若存儲字數(shù)據(jù),則字數(shù)據(jù)的高字節(jié)存放在存儲器的高地址單元,低字節(jié)存放在低地址單元,如圖3-3所示。數(shù)據(jù)段數(shù)據(jù)是順序在存儲器中進行存儲的,DB類型的數(shù)據(jù)占用1個字節(jié)存儲單元,DW類型數(shù)據(jù)占用2個字節(jié)存儲單元,DD類型數(shù)據(jù)占用4個字節(jié)存儲單元,假設(shè)有數(shù)據(jù)定義如下:DATASEGMENT A DB11H,22H B DW3344H C DD12345678HDATAENDS則其存儲情況如圖3-3所示。11H22H44H33H78H56H34H12HAB
44、C12B0H:0000H12B0H:0002H12B0H:0004H12B0H:0007H12B00H12B02H12B04H12B07H物理地址低地址高地址邏輯地址圖3-3 存儲器數(shù)據(jù)存儲情況示意3有關(guān)數(shù)據(jù)定義的其他說明(1)重復定義數(shù)據(jù)有的時候,可能需要預定義若干個存儲單元,如預留100個字節(jié)單元,里面數(shù)據(jù)為0,此時可以利用DUP偽指令來實現(xiàn)該操作,使用方法為“變量名 數(shù)據(jù)類型 重復次數(shù) DUP (數(shù)據(jù)數(shù)值)”,例如“N DB 100 DUP(0)”。(2)數(shù)據(jù)賦值定義可以利用EQU或“=”實現(xiàn)賦值或等價定義,例如“N EQU 20”、“M=MOV”。利用EQU與“$”可以實現(xiàn)數(shù)組元素個數(shù)的統(tǒng)計,方便進行循環(huán)操作等,如:NUM DW 25H,36,42,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年門面房租賃合同空白表格
- 2024年版房瑾離婚后債務承擔協(xié)議
- 2024汽車經(jīng)銷商貸款融資租賃合同模板(車商資金周轉(zhuǎn))3篇
- 2025年度環(huán)保工程人工費結(jié)算合同3篇
- 個人申請信用卡消費額度擴展合同2024
- 2024年虛擬現(xiàn)實軟件研發(fā)與二零二四年度授權(quán)許可合同2篇
- 二零二五年度環(huán)保產(chǎn)業(yè)職業(yè)健康安全與環(huán)境保護合同3篇
- 二零二五年度物流園區(qū)綠色節(jié)能改造項目合同3篇
- 個人珠寶買賣合同 3篇
- 2024門窗安裝工程安全生產(chǎn)責任合同范本3篇
- 虛擬偶像市場分析-洞察分析
- 2025年湖北黃石市大冶市中小企業(yè)融資擔保有限責任公司招聘筆試參考題庫附帶答案詳解
- 2025年包鋼(集團)公司新員工招聘【941人】高頻重點提升(共500題)附帶答案詳解
- 《義務教育法解讀》課件
- 山東省濟南市2023-2024學年高一上學期期末考試生物試題(解析版)
- 鋼結(jié)構(gòu)施工管理培訓課件
- 2025年工程春節(jié)停工期間安全措施
- 【頭頸】頸動脈CTA及MRA評價課件
- 寒假安全教育
- 2024年度工程建設(shè)項目安全評價合同2篇
- 《飛機操縱面》課件
評論
0/150
提交評論