微機原理與嵌入式系統(tǒng)實驗6代碼_第1頁
微機原理與嵌入式系統(tǒng)實驗6代碼_第2頁
微機原理與嵌入式系統(tǒng)實驗6代碼_第3頁
微機原理與嵌入式系統(tǒng)實驗6代碼_第4頁
微機原理與嵌入式系統(tǒng)實驗6代碼_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、微機原理與嵌入式系統(tǒng)實驗指導(dǎo)書 北京聯(lián)合大學(xué)信息學(xué)院2014.4實驗一 DOS環(huán)境下的匯編語言編程環(huán)境使用(基礎(chǔ)與驗證型)一、實驗要求和目的1、掌握匯編語言程序設(shè)計的基本方法和技能;2、熟練掌握使用全屏幕編輯程序EDIT編輯匯編語言源程序;3、熟練掌握宏匯編程序MASM的使用;4、熟練掌握連接程序LINK的使用。二、軟硬件環(huán)境1、硬件環(huán)境:微機CPU 486以上,500MB以上硬盤,32M以上內(nèi)存;2、軟件環(huán)境:裝有MASM 6.0、DEBUG、LINK、EDIT等應(yīng)用程序。三、實驗涉及的主要知識單元1、匯編語言源程序的匯編過程匯編語言源程序的匯編過程是是利用匯編程序(MASM)對已編輯好的源

2、程序文件(.ASM)進行匯編,將源程序文件中以ASCII碼表示的助記符指令逐條翻譯成機器碼指令,并完成源程序中的偽指令所指出的各種操作,最后可以建立3個文件:擴展名為 .OBJ的目標(biāo)文件、擴展名為 .LST 的列表文件和擴展名為 .CRF 的交叉索引文件。目標(biāo)文件是必須建立的,它包含了程序中所有的機器碼指令和偽指令指出的各種有關(guān)信息,但該文件中的操作數(shù)地址還不是內(nèi)存的絕對地址,只是一個可浮動的相對地址。列表文件(.LST)中包含了源程序的全部信息(包括注釋)和匯編后的目標(biāo)程序,列表文件可以打印輸出,可供調(diào)試檢查用。交叉索引文件(.CRF)是用來了解源程序中各符號的定義和引用情況的。.LST和.

3、CRF兩個文件不是必須建立的,可有有無,可以通過匯編時的命令加以選擇。在對源程序文件(ASM文件)匯編時,匯編程序?qū)SM文件進行兩遍掃描,若程序文件中有語法錯誤,則結(jié)束匯編,匯編程序?qū)⒅赋鲈闯绦蛑写嬖诘腻e誤,這時應(yīng)返回編輯環(huán)境修改源程序中的錯誤,再經(jīng)過匯編,直到最后得到無錯誤的目標(biāo)程序,即OBJ文件。因此,匯編程序的主要功能可以概括為以下三點: (1) 檢查源程序中的語法錯誤,并給出錯誤信息;(2) 產(chǎn)生目標(biāo)程序文件(OBJ文件),并可給出列表文件(.LST文件);(3) 展開宏指令。匯編程序是系統(tǒng)提供的用于匯編的系統(tǒng)軟件,目前常用的匯編程序有Microsoft公司推出的宏匯編程MASM(

4、MACRO ASSEMBLER)和BORLAND公司推出的TASM(TURBO ASSEMBLER)兩種。Microsoft公司推出有宏匯編程序MASM和小匯編程序ASM兩種,二者的區(qū)別在于:MASM有宏處理功能,而ASM沒有宏處理功能,因此,MASM比ASM的功能強大,但MASM需要占據(jù)較大的內(nèi)存空間,當(dāng)內(nèi)存空間較小時(如64 KB),只能使用ASM。 2、目標(biāo)程序的連接過程匯編后產(chǎn)生的目標(biāo)程序(OBJ文件)并不是可執(zhí)行程序文件(EXE文件),還不能直接運行,它必須通過連接程序(LINK)連接成一個可執(zhí)行程序后才能運行。連接程序進行連接時,其輸入有兩個部分:一是目標(biāo)文件(.OBJ),目標(biāo)文件

5、可以是一個也可以是多個,可以是匯編語言經(jīng)匯編后產(chǎn)生的目標(biāo)文件,也可以是高級語言(例如C語言)經(jīng)編譯后產(chǎn)生的目標(biāo)文件;另一是庫文件(.LIB),庫文件是系統(tǒng)中已經(jīng)建立的,主要是為高級語言提供的。連接后輸出兩個文件,一是擴展名為 .EXE的可執(zhí)行文件,另一個是擴展名為 .MAP 的內(nèi)存分配文件,它是連接程序的列表文件,又稱為連接映像(Link Map),它給出每個段在存儲器中的分配情況,該文件可有可無。連接程序給出的“無堆棧段的警告性錯誤”并不影響程序的運行。所以,到此為止,連接過程已經(jīng)結(jié)束,可以在操作系統(tǒng)下執(zhí)行該.EXE程序了。四、實驗內(nèi)容與步驟1、實驗內(nèi)容編寫程序,在屏幕上顯示“Hello W

6、orld!”,該源程序取名為hello.asm。2、實驗步驟匯編語言程序設(shè)計上機過程如圖1.1所示。圖1.1 匯編語言程序上機過程(一)用編輯程序EDIT建立匯編語言源程序文件(ASM文件)在Windows 2000或者在Windows XP環(huán)境下鼠標(biāo)單擊“開始”“運行”,在“運行”中輸入“CMD”進入DOS模式,運行EDIT軟件,例如:D> EDIT hello.ASM進入EDIT的程序編輯畫面時,輸入?yún)R編語言源程序如下: DATA SEGMENT MSG DB 'Hello World!', 0DH,0AH ,'$' ;定義數(shù)據(jù)段,并初始化待顯示的字符

7、串 DATA ENDS STACK SEGMENT 'stack' DB 100 DUP(0) ;定義堆棧段 STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE ;由ASSUM偽指令定義各段寄存器的內(nèi)容 START: MOV AX,DATA MOV DS,AX LEA DX,MSG MOV AH,9 ;調(diào)用dos功能,顯示字符串 INT 21H mov ah,4ch ;返回dos狀態(tài) int 21h CODE ENDS END START (二)用匯編程序MASM將ASM文件匯編成目標(biāo)程序文件(OBJ文件)當(dāng)源程序建立

8、以后,仍以hello.asm程序為例,我們用匯編程序MASM對hello.asm源程序文件進行匯編,以便產(chǎn)生機器碼的目標(biāo)程序文件hello.obj,其操作步驟如下: D>MASM hello.asm Microsoft (R) Macro Assembler Version 5.00 Copyright (C) Microsoft Corp 19811985,1987. All rights reserved. Object filename ABC.OBJ: Source listing NUL.LST: Cross-reference NUL.CRF:50674 + 450574 B

9、ytes symbol space free0 Warning Errors0 Severe Errors (三) 用連接程序LINK生成可執(zhí)行程序文件(EXE文件)經(jīng)匯編后產(chǎn)生的二進制的目標(biāo)程序文件(OBJ文件)并不是可執(zhí)行程序文件(EXE文件),必須經(jīng)連接以后,才能成為可執(zhí)行文件。連接程序并不是專為匯編語言程序設(shè)計的。如果一個程序是由若干個模塊組成的,也可通過連接程序LINK把它們連接在一起。這些模塊可以是匯編程序產(chǎn)生的目標(biāo)文件,也可以是高級語言編譯程序產(chǎn)生的目標(biāo)文件。 連接過程如下:D>LINK hello.objMicrosoft (R) Overlay Linker Versi

10、on 3.60Copyright (C) Microsoft Corp 1983-1987. All rights reserved.Run File ABC.EXE:List File NUL.MAP:Libraries .LIB: (四) 程序的執(zhí)行當(dāng)我們建立了可執(zhí)行文件hello.EXE后,就可直接在DOS下執(zhí)行該程序: D>hello.exe 或者 hello從而顯示Hello World! 的結(jié)果五、實驗要求與提示(1)掌握匯編語言程序設(shè)計上機過程;(2)回答思考問題;(3)記錄實驗結(jié)果。六、思考與練習(xí)以及測評標(biāo)準(zhǔn)(1)匯編過程中 MASM hello和 MASM hello.

11、ASM的結(jié)果是否一致。(2)連接過程中 LINK hello和LINK hello.OBJ的結(jié)果是否一致。(3) 使用記事本如何錄入?yún)R編語言源程序。實驗二 Debug的使用(基礎(chǔ)與驗證型)一、實驗要求和目的熟練掌握動態(tài)調(diào)試程序DEBUG的使用;二、軟硬件環(huán)境1、硬件環(huán)境:微機CPU 486以上,500MB以上硬盤,32M以上內(nèi)存;2、軟件環(huán)境:裝有MASM6.0、Debug、LINK、EDIT等應(yīng)用程序。三、實驗涉及的主要知識單元通過編輯、匯編和連接后的程序是可以執(zhí)行的程序。但是,一個程序特別是比較復(fù)雜的程序不能保證沒有一點錯誤。因此,在投入正式運行前必須進行調(diào)試,以檢查程序的正確性。調(diào)試程序

12、Debug就是用來調(diào)試匯編語言程序的一種工具。Debug的主要功能有顯示和修改寄存器及內(nèi)存單元的內(nèi)容;按指定地址啟動并運行程序;設(shè)置斷點使程序分段運行,以便檢查程序運行過程中的中間結(jié)果或確定程序出錯的位置;反匯編被調(diào)試程序,它將一個可執(zhí)行文件中的指令機器碼反匯編成助記符指令并同時給出指令所在的內(nèi)存地址;單條追蹤或多條追蹤被調(diào)試程序,它可以逐條指令執(zhí)行或幾條指令執(zhí)行被調(diào)試程序,每執(zhí)行一條(或幾條)指令后,Debug程序?qū)⒅袛喑绦虻倪\行并提供有關(guān)結(jié)果信息;匯編一段程序,在Debug的匯編命令下可以直接輸入助記符指令,并將其匯編成可運行程序段。此外,Debug還可以將磁盤指定區(qū)的內(nèi)容或一個文件裝入到

13、內(nèi)存或?qū)?nèi)存的信息寫到磁盤上等等。啟動Debug程序:在DOS狀態(tài)下可以用下面的命令啟動Debug程序:DEBUG 路徑文件名.擴展名Debug后面的文件名及路徑是指被調(diào)試程序的文件名及路徑,Debug后面的文件必須是程序的可執(zhí)行文件,其擴展名可以是.EXE 或.COM。在此命令后,DOS將調(diào)試程序Debug調(diào)入內(nèi)存,Debug接著將被調(diào)程序送入內(nèi)存。比如:DEBUG 123.EXE 調(diào)試程序Debug的主要命令如下:(一)顯示內(nèi)存單元內(nèi)容的命令D格式(1):-D 地址從指定地址開始,顯示128個字節(jié)的內(nèi)容,每一行的左邊顯示段內(nèi)偏移地址,接著顯示16個單元的內(nèi)容,最右邊區(qū)域則顯示這一行的16個

14、單元所對應(yīng)的可顯示的字符。若無可顯示的字符,則用圓點(小數(shù)點)填充。 D命令中的地址可為段內(nèi)偏移量,也可為段基址和段內(nèi)偏移量兩部分,中間用冒號隔開,如1680:0110,即指段基址為1680H,段內(nèi)偏移量為0110H。Debug中所顯示的數(shù)據(jù)均為十六進制數(shù),且省去了后面的H標(biāo)志。 格式(2):-D 范圍將顯示指定地址范圍內(nèi)的內(nèi)存單元的內(nèi)容,起始地址可由段基址及段內(nèi)偏移量兩個部分組成,中間用冒號“:”隔開,也可以只指出段內(nèi)偏移量,而此時的段基址在DS中。這里所說的范圍包含起始地址和結(jié)束地址。比如 D DS:1000 1020 將顯示數(shù)據(jù)段偏移地址為1000H到1020H的內(nèi)容。 (二)修改內(nèi)存命

15、令E格式(1):E 地址從指定地址開始,修改(或連續(xù)修改)存儲單元內(nèi)容。DEBUG首先顯示指定單元內(nèi)容,如要修改,可輸入新數(shù)據(jù);空格鍵顯示下一個單元內(nèi)容并可修改,減號鍵顯示上一個單元內(nèi)容并可修改;如不修改,可直接按空格鍵或減號鍵;回車鍵結(jié)束命令。格式(2):E地址 數(shù)據(jù)表從指定的地址開始用數(shù)據(jù)表給定的數(shù)據(jù)修改存儲單元。 比如: E DS:100 F3 AB 8D。(三)檢查和修改寄存器內(nèi)容的命令R格式(1):R 將顯示所有寄存器的內(nèi)容和全部標(biāo)志位的狀態(tài),以及現(xiàn)行CS:IP所指的機器指令代碼和反匯編符號。 格式(2):R 寄存器名該格式可用于檢查和修改指定寄存器的內(nèi)容。若不修改其內(nèi)容,

16、可按<CR>鍵,若需要修改其內(nèi)容,可以輸入1-4 個十六進制數(shù),再按<CR>鍵。 (四)T =地址該命令可以在指令執(zhí)行中進行追蹤,若略去地址,則從CS:IP現(xiàn)行值執(zhí)行。每一次T命令都執(zhí)行一條指令。 (五)運行程序命令G格式:G =地址地址地址該命令可以在程序運行中設(shè)置斷點。它是Debug程序進行程序調(diào)試的主要命令之一。示例:-g 001a 則執(zhí)行從當(dāng)前cs:ip至001a的指令,注意:地址設(shè)置必須從指令的第一字節(jié)設(shè)起。 第一個參數(shù)“=地址”規(guī)定了程序執(zhí)行的起始地址,以CS內(nèi)容作段地址,等號后面的地址只需給出地址偏移量。此時,命令G與地址之間的等號不能省去。 如果在G命令

17、執(zhí)行前,已經(jīng)設(shè)置了CS值和IP值,則也可以直接用G命令,從指定地址執(zhí)行程序。 格式中后面給出的地址是指斷點地址,最多可設(shè)置10個斷點。當(dāng)程序執(zhí)行到一個斷點時,就停下來,顯示CPU各寄存器的內(nèi)容和標(biāo)志位的狀態(tài),以及下一條待執(zhí)行的指令,被調(diào)試程序的所有斷點全部被取消,并返回Debug。 地址參數(shù)所指的單元,必須包含有有效的8088指令的第一個字節(jié),否則將產(chǎn)生不可預(yù)料的結(jié)果。 堆棧必須至少包含有6個可用字節(jié),否則也將產(chǎn)生不可預(yù)料的結(jié)果。 若斷點地址只包括地址偏移量,則認(rèn)為段地址在CS寄存器中。 (六)反匯編命令U格式(1):U地址該命令從指定的地址開始,反匯編32個字節(jié)。若略去指定地址,則以上一個U

18、命令反匯編的最后一條指令地址的下一條指令地址作為起始地址;若沒有用過U命令,則以由Debug初始化的段寄存器的值作段地址,以100作為地址偏移量。 格式(2):U范圍這種格式的命令,可以對指定范圍的內(nèi)存單元進行反匯編,范圍可以由起始地址、結(jié)束地址(只能包含地址偏移量)或起始地址及長度來指定。其命令格式如:U 04BA:100 0108或 U 04BA:0100 L7兩者是等效的。 (七)退出Debug命令Q格式:Q該命令退出Debug程序并返回DOS。 Q命令并不把內(nèi)存中的文件存盤,若需要存盤的話,應(yīng)在退出前用W命令寫入磁盤。四、實驗內(nèi)容與步驟1、實驗內(nèi)容(1) 進入和退出Debug

19、程序(2) 學(xué)會Debug中的D命令、R命令、E命令、T命令、G命令、U命、Q命令等的使用。(3) 利用Debug,驗證程序中指令的功能和結(jié)果。 (4)使用Debug調(diào)試程序調(diào)試匯編程序。2、實驗步驟(1)   在DOS提示符下,進入Debug程序。(2)   詳細(xì)記錄每一步所用的命令,以及查看結(jié)果的方法和具體結(jié)果。(3)求從1開始連續(xù)50個奇數(shù)之和,并將結(jié)果存放在名字為SUM的字存儲單元中。匯編、連結(jié)生成了可執(zhí)行文件test1.EXE,存放在d:目錄下。請使用Debug對其進行調(diào)試。調(diào)試過程: DATASEGME

20、NT ;定義數(shù)據(jù)段SUMDW 0 ;定義變量并賦初值DATAENDS STACKSEGMENT STACK ;定義堆棧段DB 200 DUP(0)STACKENDSCODESEGMENT ;定義代碼段ASSUMEDS:DATA,SS:STACK,CS:CODE ;由ASSUM偽指令定義各段寄存器的內(nèi)容START: MOV AX,DATA MOV DS,AX MOV CX,50 ;累加次數(shù) MOV AX,0 ;存放累加和 MOV BX,1 NEXT: ADD AX,BX INC BX INC BX DECCX JNE NEXT MOV SUM,AX ;存放最終累加結(jié)果 MOV AH,4CH IN

21、T 21H ;返回dos狀態(tài)CODEENDS END START 進入Debug并裝入可執(zhí)行文件test1.EXED:MASM>Debug test1.EXE<Enter>- 觀察寄存器初始狀態(tài)-R <Enter>注:(1)以上顯示的寄存器值,可能和你的電腦顯示的不一樣。(2)Debug中默認(rèn)的進制是十六進制。 觀察數(shù)據(jù)段中相應(yīng)位置的值-D 數(shù)據(jù)段:偏移地址 <Enter>使用U命令反匯編 -U 從程序存放的位置開始<Enter>使用T命令進行單步執(zhí)行觀察結(jié)果使用G 命令執(zhí)行-G 地址(程序終止的偏移地址處)<Enter>五、實

22、驗要求與提示1、實驗要求(1)熟練掌握Debug的命令;(2)熟練掌握使用Debug調(diào)試匯編程序;(3)回答思考問題;(4)記錄實驗結(jié)果。2、實驗提示一般使用Debug調(diào)試匯編程序的步籌如下:(1) 調(diào)用DEBUG,裝入用戶程序(2) 觀察寄存器初始狀態(tài)(3) 以單步工作方式開始運行程序(4) 觀察用戶程序數(shù)據(jù)段初始內(nèi)容(5) 連續(xù)工作方式運行程序六、思考與練習(xí)以及測評標(biāo)準(zhǔn)(1) 如何啟動和退出Debug程序。(2) 整理每個Debug命令使用的方法,實際示例及執(zhí)行結(jié)果。(3)啟動Debug后,要裝入某一個.EXE文件,應(yīng)通過什么方法實現(xiàn)?實驗三 分支程序設(shè)計知識提要:本部分內(nèi)容主要對分支程序

23、加以介紹,其知識要點:1無條件轉(zhuǎn)移指令JMP無條件轉(zhuǎn)移指令JMP是使程序無條件轉(zhuǎn)移至目標(biāo)處,又分為段內(nèi)轉(zhuǎn)移、段間轉(zhuǎn)移。2條件轉(zhuǎn)移指令JXX條件轉(zhuǎn)移指令可分為三大類:1)簡單條件轉(zhuǎn)移指令指令。根據(jù)單個標(biāo)志位的狀態(tài)判斷轉(zhuǎn)移條件。標(biāo)志位指令轉(zhuǎn)移條件意義CFJCCF=1有進位/借位JNCCF=0無進位/借位ZFJE/JZZF=1相等/等于0JNE/JNZZF=0不相等/不等于0SFJSSF=1是負(fù)數(shù)JNSSF=0是正數(shù)OFJOOF=1有溢出JNOOF=0無溢出PFJP/JPEPF=1有偶數(shù)個1JNP/JPOPF=0有奇數(shù)個12)無符號數(shù)條件轉(zhuǎn)移指令。假設(shè)在條件轉(zhuǎn)移指令前使用比較指令,比較兩個無符號數(shù)A

24、,B,指令進行的的操作是A-B,其轉(zhuǎn)移指令如下:指令轉(zhuǎn)移條件意義JA/JNBECF=0 AND ZF=0A>BJAE/JNBCF=0 OR ZF=1A>=BJB/JNAECF=1 AND ZF=0A<BJBE/JNACF=1 OR ZF=1A<=B3)帶符號數(shù)條件轉(zhuǎn)移指令。 指令轉(zhuǎn)移條件意義JG/JNLESF=OF AND ZF=0A>BJGE/JNLSF=OF OR ZF=1A>=BJL/JNGESF OF AND ZF=0A<BJLE/JNGSF OF OR ZF=1A<=B一、實驗要求和目的1熟悉匯編語言程序設(shè)計結(jié)構(gòu);2熟悉匯編語言分支程序

25、基本指令的使用方法;3掌握利用匯編語言實現(xiàn)單分支、雙分支、多分支的程序設(shè)計方法。二、軟硬件環(huán)境1硬件環(huán)境:微機CPU 486以上,500MB以上硬盤,32M以上內(nèi)存;2軟件環(huán)境:裝有MASM6.0、DEBUG、LINK和EDIT等應(yīng)用程序。三、實驗涉及的主要知識單元在實際應(yīng)用中,經(jīng)常根據(jù)一些條件來選擇一條分支執(zhí)行。匯編語言的條件判斷主要是通過狀態(tài)寄存器中的狀態(tài)位、無符號數(shù)相減或有符號和相減而導(dǎo)致的結(jié)果來進行。下面就有符號數(shù)轉(zhuǎn)移指令來了解在匯編語言程序設(shè)計方法。四、實驗內(nèi)容與步驟1實驗內(nèi)容(1)編寫計算下面函數(shù)值的程序:設(shè)輸入數(shù)據(jù)為X、輸出數(shù)據(jù)Y,且皆為字節(jié)變量,使用Debug查看X、Y兩個變量

26、的數(shù)據(jù)。(2)以ARRAY為首地址的內(nèi)存單元中,存放若干個8位的帶符號數(shù),統(tǒng)計數(shù)組中大于等于0的數(shù)的個數(shù),并將結(jié)果存入RESULT字節(jié)單元中。2實驗步驟(1)編寫程序(2)對程序進行debug調(diào)試,觀察中間結(jié)果五、實驗要求1實驗要求(1)畫出各程序流程圖;(2)列出程序清單,加上適量注釋;(3)記錄實驗結(jié)果。實驗四 循環(huán)程序設(shè)計知識提要:本節(jié)主要對循環(huán)結(jié)構(gòu)的組成及其設(shè)計方法加以介紹,其知識要點有:1循環(huán)程序的基本結(jié)構(gòu)通常由3部分組成(1)初始化部分建立循環(huán)初始值,為循環(huán)做準(zhǔn)備,如設(shè)置地址指針,(BX/SI/DI/BP),初始化循環(huán)控制變量或計數(shù)器(CX),數(shù)據(jù)寄存器(AX/DX)初值等.(2)

27、循環(huán)體循環(huán)體是循環(huán)程序的主體,是程序中重復(fù)執(zhí)行的程序段.它是由循環(huán)工作部分、修改部分、和循環(huán)控制部分。循環(huán)工作部分:完成程序功能的主要程序段,用于執(zhí)行程序的實際任務(wù);修改部分:對循環(huán)參數(shù)進行修改,并為下一次循環(huán)做準(zhǔn)備;循環(huán)控制部分:判斷循環(huán)結(jié)束條件是否滿足。通常判斷循環(huán)結(jié)束方法:l 用計數(shù)控制循環(huán);循環(huán)是否進行了預(yù)定的次數(shù)。l 用條件控制循環(huán)。循環(huán)終止條件是否滿足。(3)結(jié)束處理處理部分 主要是對循環(huán)的結(jié)果進行處理。也可沒有此部分。2循環(huán)控制指令指令格式執(zhí)行操作循環(huán)結(jié)束條件LOOP標(biāo)號CX=CX-1;若CX=0,則循環(huán)CX=0LOOPNZ/LOOPNE 標(biāo)號CX=CX-1;若CX=0且ZF=0

28、,則循環(huán)CX=0或ZF=0LOOPZ/LOOPE標(biāo)號CX=CX-1;若CX=0且ZF=1,則循環(huán)CX=0或ZF=1JCXZ 標(biāo)號僅測試(CX)=0,若是,則轉(zhuǎn)移到目標(biāo)地址,否則就順序執(zhí)行3循環(huán)控制可以分為兩種 計數(shù)循環(huán)和條件循環(huán)。作為計數(shù)循環(huán),一般是指循環(huán)次數(shù)是已知的情況,在程序設(shè)計的的循環(huán)時,先應(yīng)將循環(huán)次數(shù)送入計數(shù)器CX中進行計數(shù),在循環(huán)體中使用LOOP等循環(huán)指令。當(dāng)然,也可以通過其他方式來進行,如cxcx-1,jnz 等結(jié)合實現(xiàn)。一、實驗要求和目的1了解匯編語言循環(huán)程序設(shè)計的基本流程;2熟悉匯編語言循環(huán)基本指令的使用方法;3掌握利用匯編語言的循環(huán)指令完成循環(huán)程序設(shè)計方法。二、軟硬件環(huán)境1硬

29、件環(huán)境:微機CPU 486以上,500MB以上硬盤,32M以上內(nèi)存;2軟件環(huán)境:裝有MASM 6.0、DEBUG、LINK和EDIT等應(yīng)用程序。三、實驗涉及的主要知識單元熟練使用循環(huán)指令和跳轉(zhuǎn)等指令來實現(xiàn)循環(huán),理解循環(huán)體結(jié)構(gòu)中的初始化部分、循環(huán)體、結(jié)束部分。能結(jié)合前面分支結(jié)構(gòu)相關(guān)的知識點,完成對循環(huán)結(jié)構(gòu)的理解和掌握。同時對循環(huán)結(jié)構(gòu)中地址指針的設(shè)置,(BX/SI/DI/BP),初始化循環(huán)控制變量或計數(shù)器(CX)和數(shù)據(jù)寄存器(AX/DX)初值的設(shè)置方法等。四、實驗內(nèi)容與步驟1實驗內(nèi)容編寫程序,設(shè)VARY中有一組8位的符號數(shù),編程統(tǒng)計其中 正數(shù)、負(fù)數(shù)、零的個數(shù),分別存 VM、VN、VK變量中。提示分

30、析:設(shè)定此數(shù)組的元素勻為字節(jié)數(shù)據(jù),則數(shù)組VARY中的數(shù)據(jù)個數(shù)用CNT EQU $-VARY求出,則循環(huán)次數(shù)為CNT次。在程序中,要將CNT的值送入CX中。將數(shù)組VARY中元素挨個與0比較,利用狀態(tài)標(biāo)志寄存器中的ZF位求出零的個數(shù),利用SF位求出正、負(fù)數(shù)的個數(shù)。2實驗步驟(1)預(yù)習(xí)循環(huán)程序設(shè)計的方法,根據(jù)實驗內(nèi)容,畫出流程圖;(2)利用EDIT或其他編輯軟件,編寫匯編源程序;(3)匯編、連接該源程序,產(chǎn)生.EXE文件;(4)對.EXE文件進行調(diào)試運行:利用DEBUG的T命令或G命令和D命令查看數(shù)據(jù)區(qū),看結(jié)果是否正確,并做好主要過程記錄。五、實驗要求1實驗要求(1)畫出各程序流程圖;(2)列出程序

31、清單,加上適量注釋;(3)回答思考問題;(4)記錄實驗過程和結(jié)果。六、 思考與練習(xí)1在上述程序基礎(chǔ)上,要求修改程序,增加在此數(shù)組中找出最大值放入MAX中的同時,找出最小值放入MIN中;實驗五 字符及字符串的輸入/輸出編程實驗一、實驗要求和目的1熟悉匯編語言程序設(shè)計結(jié)構(gòu);2熟悉匯編語言字符串處理基本指令的使用方法;3掌握利用匯編語言實現(xiàn)字符的輸入輸出程序設(shè)計方法;4掌握利用匯編語言實現(xiàn)字符串的輸入輸出程序設(shè)計方法。二、軟硬件環(huán)境1硬件環(huán)境:微機CPU 486以上,500MB以上硬盤,32M以上內(nèi)存;2軟件環(huán)境:裝有MASM 6.0、DEBUG、LINK和EDIT等應(yīng)用程序。三、實驗涉及的主要知識

32、單元在實際應(yīng)用中,經(jīng)常需要從鍵盤輸入數(shù)據(jù)并將結(jié)果等內(nèi)容顯示到屏幕上,方便程序控制及查看結(jié)果。匯編語言的數(shù)據(jù)輸入和輸出分成兩類,一是單個字符數(shù)據(jù)的輸入輸出,一是字符串?dāng)?shù)據(jù)的輸入輸出。都可以通過DOS功能調(diào)用來實現(xiàn),下面就分別介紹下用來實現(xiàn)數(shù)據(jù)輸入輸出的功能調(diào)用的使用方法。1單個字符輸入單個字符輸入可以利用DOS的1號功能調(diào)用來完成,使用方法為:MOV AH,1INT 21H這兩條語句執(zhí)行后,光標(biāo)會在屏幕上閃爍,等待輸入數(shù)據(jù),輸入的數(shù)據(jù)以ASCII碼形式存儲在AL寄存器中。下面簡單舉例說明單個字符輸入的使用,從鍵盤輸入一個數(shù)據(jù)并將其存儲到存儲器中,程序如下所示:DATA SEGMENTA DB ?

33、;保存鍵盤輸入的數(shù)據(jù)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AH,1;DOS1號功能調(diào)用 INT 21H MOV A,AL;將輸入數(shù)據(jù)保存到A中 MOV AH,4CH INT 21HCODE ENDSEND START2單個字符輸出單個字符輸出可利用DOS 的2號功能調(diào)用來完成,使用方法為:MOV DL,?MOV AH,2INT 21H單個字符輸出需要把要輸出字符的ASCII碼放在DL寄存器中。3、字符串輸入從鍵盤輸入一串字符串可以利用DOS的10號功能調(diào)用來完成,使用方法為:BU

34、F DB 50;預(yù)定義可以輸入的最大字符個數(shù) DB ? ;實際輸入字符個數(shù),根據(jù)輸入自動統(tǒng)計 DB 50 DUP (?);存放輸入字符串?dāng)?shù)據(jù)緩沖區(qū)LEA DX,BUFMOV AH,10INT 21H利用10號功能實現(xiàn)字符串輸入,需要在數(shù)據(jù)段中預(yù)定義緩沖區(qū)。4字符串輸出字符串輸出可由DOS 9號功能調(diào)用來完成,使用方法為:STRING DB HELLO$LEA DX,STRINGMOV AH,9INT 21H顯示字符串需要先在數(shù)據(jù)段中定義,例如STRING,然后調(diào)用9號功能來進行顯示輸出。需要注意的是,字符串要求以$作為結(jié)束標(biāo)志,如果不加$則會出現(xiàn)亂碼顯示效果。四、實驗內(nèi)容與步驟1實驗內(nèi)容(1)

35、自行編成驗證上面四個字符及字符串輸入和輸出的功能指令,并做好記錄。(2)編成在屏幕上顯示提示信息“Please input your number:”,從鍵盤輸入自己的學(xué)號,存入內(nèi)存中的數(shù)據(jù)段的某一區(qū)域,將輸入的學(xué)號回顯到屏幕上。2實驗步驟(1)預(yù)習(xí)字符串處理基本知識,以及字符/字符串輸入/輸出基本操作,根據(jù)實驗內(nèi)容,畫出流程圖;(2)利用EDIT或其他編輯軟件,編寫匯編源程序;(3)匯編、連接該源程序;(4)對文件進行調(diào)試運行:利用DEBUG的T命令或G命令和D命令查看數(shù)據(jù)區(qū),字符串是否正確保存到數(shù)據(jù)區(qū)。五、實驗要求與提示1實驗要求(1)畫出各程序流程圖;(2)列出程序清單,加上適量注釋;(

36、3)回答思考問題;(4)記錄實驗結(jié)果。2實驗提示(1)提示信息實際上也是一串字符串,可以利用9號功能顯示;(2)如果字符串結(jié)尾沒有$,顯示時會出現(xiàn)亂碼。六、思考與練習(xí)以及測評標(biāo)準(zhǔn)1字符串在內(nèi)存中是如何存儲的?2屏幕有多個字符串顯示時,如何換行?實驗六 并口通信實驗(驗證及設(shè)計性實驗)一、實驗?zāi)康募耙?學(xué)會使用TPC2003A集成開發(fā)環(huán)境軟件2. 掌握可編程并行接口芯片8255A控制方法二、實驗任務(wù)及操作過程 1. 讀取開關(guān)狀態(tài)并存入內(nèi)存某一單元 (1)實驗內(nèi)容 通過8255A的C口讀取4個開關(guān)狀態(tài),其中“1”代表亮、“0”代表滅,把讀進來的狀態(tài)存放到內(nèi)存的某個單元進去,并通過debug方式去

37、查看結(jié)果;(2)接線方法 將4個開關(guān)K1K4連接在PC0PC3,8255CS接譯碼電路的218H; (3)用C口將接收開關(guān)的狀態(tài)(工作在方式0),連接電路并進行程序設(shè)計2. 讀取開關(guān)狀態(tài)用小燈顯示 (1)實驗內(nèi)容 通過8255A的B口讀取4個開關(guān)狀態(tài)(方式0),通過8255A的C口將開關(guān)狀態(tài)用小燈顯示(方式0);(2)接線方法 將四個開關(guān)K1K4連接在PB4PB7,將四個小燈L1L4連接在PC0PC3,8255CS接譯碼電路的218H;(3)B口讀取四個開關(guān)狀態(tài)(方式0),C口將開關(guān)狀態(tài)用小燈顯示(方式0),連接電路并進行程序設(shè)計。三、具體過程設(shè)置1、8255讀取開關(guān)數(shù)據(jù)并存入寄存器用8255

38、A的C端口接開關(guān)K1-K4,各個開關(guān)向上為電平1,讀取開關(guān)數(shù)據(jù)通過寄存器BX存入定義的內(nèi)存單元。接線方法:將8255A的CS端與218-21F插孔相連,PC0-PC3接K1-K4此時8255A的端口地址為:A口地址:9400H+2B8H B口地址:9400H+219H C口地址:9400H+2BAH 控制口地址:9400H+2BBH部分程序設(shè)置參考:data segmentio equ 9400H-280Hbuff DB 0data endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,ax mov dx,io+2BBH mov al,8bh ; 8255控制字各口工作于輸入狀態(tài) 10001011 out dx,al ; 送8255控制字 mov dx,io+2BAH in al,dx ; 讀8255C口數(shù)據(jù)即開關(guān)K1-K4的狀態(tài) mov buff ,al ; 把開關(guān)K1-K8的狀態(tài)存入內(nèi)存中 mov ah,4ch int 21hcode endsend start2、 8255 C口工作在輸入狀態(tài),接收開關(guān)的值;A口工作在輸出狀態(tài),點亮LED燈,輸出“0” LED燈亮,輸出“1” LED燈滅。 部分參考代碼:

溫馨提示

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

評論

0/150

提交評論