微機(jī)原理與嵌入式系統(tǒng)實(shí)驗(yàn)_第1頁
微機(jī)原理與嵌入式系統(tǒng)實(shí)驗(yàn)_第2頁
微機(jī)原理與嵌入式系統(tǒng)實(shí)驗(yàn)_第3頁
微機(jī)原理與嵌入式系統(tǒng)實(shí)驗(yàn)_第4頁
微機(jī)原理與嵌入式系統(tǒng)實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

2、已編輯好的源程序文件(.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)中包含了源程序的全部信息(包括注釋)和匯編后的目標(biāo)程序,列表文件可以打印輸出,可供調(diào)試檢查用。交叉索引文件(.CRF)是用來了解源程序中各符號(hào)的定義和引用情況的。

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

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

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

6、ello World!”,該源程序取名為hello.asm。2、實(shí)驗(yàn)步驟匯編語言程序設(shè)計(jì)上機(jī)過程如圖1.1所示。圖1.1 匯編語言程序上機(jī)過程(一)用編輯程序EDIT建立匯編語言源程序文件(ASM文件)在Windows 2000或者在Windows XP環(huán)境下鼠標(biāo)單擊“開始”“運(yùn)行”,在“運(yùn)行”中輸入“CMD”進(jìn)入DOS模式,運(yùn)行EDIT軟件,例如:D> EDIT hello.ASM進(jìn)入EDIT的程序編輯畫面時(shí),輸入?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文件)

8、當(dāng)源程序建立以后,仍以hello.asm程序?yàn)槔?,我們用匯編程序MASM對(duì)hello.asm源程序文件進(jìn)行匯編,以便產(chǎn)生機(jī)器碼的目標(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 + 45

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

10、 Version 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é)果五、實(shí)驗(yàn)要求與提示(1)掌握匯編語言程序設(shè)計(jì)上機(jī)過程;(2)回答思考問題;(3)記錄實(shí)驗(yàn)結(jié)果。六、思考與練習(xí)以及測(cè)評(píng)標(biāo)準(zhǔn)(1)匯編過程中 MASM hello和 MASM

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

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

13、外,Debug還可以將磁盤指定區(qū)的內(nèi)容或一個(gè)文件裝入到內(nèi)存或?qū)?nèi)存的信息寫到磁盤上等等。啟動(dòng)Debug程序:在DOS狀態(tài)下可以用下面的命令啟動(dòng)Debug程序:DEBUG 路徑文件名.擴(kuò)展名Debug后面的文件名及路徑是指被調(diào)試程序的文件名及路徑,Debug后面的文件必須是程序的可執(zhí)行文件,其擴(kuò)展名可以是.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個(gè)字節(jié)的內(nèi)容,每一行的左邊顯示段內(nèi)偏移地址,接

14、著顯示16個(gè)單元的內(nèi)容,最右邊區(qū)域則顯示這一行的16個(gè)單元所對(duì)應(yīng)的可顯示的字符。若無可顯示的字符,則用圓點(diǎn)(小數(shù)點(diǎn))填充。 D命令中的地址可為段內(nèi)偏移量,也可為段基址和段內(nèi)偏移量?jī)刹糠郑虚g用冒號(hào)隔開,如1680:0110,即指段基址為1680H,段內(nèi)偏移量為0110H。Debug中所顯示的數(shù)據(jù)均為十六進(jìn)制數(shù),且省去了后面的H標(biāo)志。 格式(2):-D 范圍將顯示指定地址范圍內(nèi)的內(nèi)存單元的內(nèi)容,起始地址可由段基址及段內(nèi)偏移量?jī)蓚€(gè)部分組成,中間用冒號(hào)“:”隔開,也可以只指出段內(nèi)偏移量,而此時(shí)的段基址在DS中。這里所說的范圍包含起始地址和結(jié)束地址。比如 D DS:1000 1020 將顯示數(shù)據(jù)段偏移

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

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

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

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

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

20、Debug對(duì)其進(jìn)行調(diào)試。調(diào)試過程: DATASEGMENT ;定義數(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

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

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

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

24、。假設(shè)在條件轉(zhuǎn)移指令前使用比較指令,比較兩個(gè)無符號(hào)數(shù)A,B,指令進(jìn)行的的操作是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)帶符號(hào)數(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一、實(shí)驗(yàn)要求和

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

26、據(jù)Y,且皆為字節(jié)變量,使用Debug查看X、Y兩個(gè)變量的數(shù)據(jù)。(2) 以ARRAY為首地址的內(nèi)存單元中,存放若干個(gè)8位的帶符號(hào)數(shù),統(tǒng)計(jì)數(shù)組中大于等于0的數(shù)的個(gè)數(shù),并將結(jié)果存入RESULT字節(jié)單元中。 data segment xx dw 12 yy dw ?data endsstack segment stack 'stack' db 100h dup (?)stack endscode segment assume cs:code,ds:data,ss:stackstart:mov ax,data mov ds,ax mov ax,xx 將xx轉(zhuǎn)移給ax cmp ax,0 x

27、與0比較 jge bigpr x大于等于0,轉(zhuǎn)bigpr mov yy,0ffffh jmp exitbigpr:je equpr x=0,轉(zhuǎn)equpr mov yy,1 jmp exitequpr:mov yy,0 exit: mov ax,4ch int 21hcode ends end start2實(shí)驗(yàn)步驟(1)編寫程序(2)對(duì)程序進(jìn)行debug調(diào)試,觀察中間結(jié)果五、實(shí)驗(yàn)要求1實(shí)驗(yàn)要求(1)畫出各程序流程圖;(2)列出程序清單,加上適量注釋;(3)記錄實(shí)驗(yàn)結(jié)果。實(shí)驗(yàn)四 循環(huán)程序設(shè)計(jì)知識(shí)提要:本節(jié)主要對(duì)循環(huán)結(jié)構(gòu)的組成及其設(shè)計(jì)方法加以介紹,其知識(shí)要點(diǎn)有:1循環(huán)程序的基本結(jié)構(gòu)通常由3部分組成(

28、1)初始化部分建立循環(huán)初始值,為循環(huán)做準(zhǔn)備,如設(shè)置地址指針,(BX/SI/DI/BP),初始化循環(huán)控制變量或計(jì)數(shù)器(CX),數(shù)據(jù)寄存器(AX/DX)初值等.(2)循環(huán)體循環(huán)體是循環(huán)程序的主體,是程序中重復(fù)執(zhí)行的程序段.它是由循環(huán)工作部分、修改部分、和循環(huán)控制部分。循環(huán)工作部分:完成程序功能的主要程序段,用于執(zhí)行程序的實(shí)際任務(wù);修改部分:對(duì)循環(huán)參數(shù)進(jìn)行修改,并為下一次循環(huán)做準(zhǔn)備;循環(huán)控制部分:判斷循環(huán)結(jié)束條件是否滿足。通常判斷循環(huán)結(jié)束方法:l 用計(jì)數(shù)控制循環(huán);循環(huán)是否進(jìn)行了預(yù)定的次數(shù)。l 用條件控制循環(huán)。循環(huán)終止條件是否滿足。(3)結(jié)束處理處理部分 主要是對(duì)循環(huán)的結(jié)果進(jìn)行處理。也可沒有此部分。2

29、循環(huán)控制指令指令格式執(zhí)行操作循環(huán)結(jié)束條件LOOP標(biāo)號(hào)CX=CX-1;若CX=0,則循環(huán)CX=0LOOPNZ/LOOPNE 標(biāo)號(hào)CX=CX-1;若CX=0且ZF=0,則循環(huán)CX=0或ZF=0LOOPZ/LOOPE標(biāo)號(hào)CX=CX-1;若CX=0且ZF=1,則循環(huán)CX=0或ZF=1JCXZ 標(biāo)號(hào)僅測(cè)試(CX)=0,若是,則轉(zhuǎn)移到目標(biāo)地址,否則就順序執(zhí)行3循環(huán)控制可以分為兩種 計(jì)數(shù)循環(huán)和條件循環(huán)。作為計(jì)數(shù)循環(huán),一般是指循環(huán)次數(shù)是已知的情況,在程序設(shè)計(jì)的的循環(huán)時(shí),先應(yīng)將循環(huán)次數(shù)送入計(jì)數(shù)器CX中進(jìn)行計(jì)數(shù),在循環(huán)體中使用LOOP等循環(huán)指令。當(dāng)然,也可以通過其他方式來進(jìn)行,如cxcx-1,jnz 等結(jié)合實(shí)現(xiàn)。

30、一、實(shí)驗(yàn)要求和目的1了解匯編語言循環(huán)程序設(shè)計(jì)的基本流程;2熟悉匯編語言循環(huán)基本指令的使用方法;3掌握利用匯編語言的循環(huán)指令完成循環(huán)程序設(shè)計(jì)方法。二、軟硬件環(huán)境1硬件環(huán)境:微機(jī)CPU 486以上,500MB以上硬盤,32M以上內(nèi)存;2軟件環(huán)境:裝有MASM 6.0、DEBUG、LINK和EDIT等應(yīng)用程序。三、實(shí)驗(yàn)涉及的主要知識(shí)單元熟練使用循環(huán)指令和跳轉(zhuǎn)等指令來實(shí)現(xiàn)循環(huán),理解循環(huán)體結(jié)構(gòu)中的初始化部分、循環(huán)體、結(jié)束部分。能結(jié)合前面分支結(jié)構(gòu)相關(guān)的知識(shí)點(diǎn),完成對(duì)循環(huán)結(jié)構(gòu)的理解和掌握。同時(shí)對(duì)循環(huán)結(jié)構(gòu)中地址指針的設(shè)置,(BX/SI/DI/BP),初始化循環(huán)控制變量或計(jì)數(shù)器(CX)和數(shù)據(jù)寄存器(AX/DX)

31、初值的設(shè)置方法等。四、實(shí)驗(yàn)內(nèi)容與步驟1實(shí)驗(yàn)內(nèi)容編寫程序,設(shè)VARY中有一組8位的符號(hào)數(shù),編程統(tǒng)計(jì)其中 正數(shù)、負(fù)數(shù)、零的個(gè)數(shù),分別存 VM、VN、VK變量中。stack segment para 'stack' dw 20H dup(0)stack endsdata segment vary db 23h,78h,56h,0abh,00h,0cdh,59h,14h,98h,0efh,00h,0c0hcnt equ $-varyvm db ?vn db ?vk db ?data endscode segment assume cs:code,ds:data,ss:stackstar

32、t: mov ax,datamov ds,axmov bx,0mov dl,0lea si,varymov cx,cntlop1:cmp byte ptrsi,0je zerojs lop2inc bhjmp nextlop2:inc bljmp nextzero:inc dlnext:inc siloop lop1mov vm,bhmov vn,blmov vk,dlmov ah,4chint 21hcode endsend start提示分析:設(shè)定此數(shù)組的元素勻?yàn)樽止?jié)數(shù)據(jù),則數(shù)組VARY中的數(shù)據(jù)個(gè)數(shù)用CNT EQU $-VARY求出,則循環(huán)次數(shù)為CNT次。在程序中,要將CNT的值送入CX中

33、。將數(shù)組VARY中元素挨個(gè)與0比較,利用狀態(tài)標(biāo)志寄存器中的ZF位求出零的個(gè)數(shù),利用SF位求出正、負(fù)數(shù)的個(gè)數(shù)。2實(shí)驗(yàn)步驟(1)預(yù)習(xí)循環(huán)程序設(shè)計(jì)的方法,根據(jù)實(shí)驗(yàn)內(nèi)容,畫出流程圖;(2)利用EDIT或其他編輯軟件,編寫匯編源程序;(3)匯編、連接該源程序,產(chǎn)生.EXE文件;(4)對(duì).EXE文件進(jìn)行調(diào)試運(yùn)行:利用DEBUG的T命令或G命令和D命令查看數(shù)據(jù)區(qū),看結(jié)果是否正確,并做好主要過程記錄。五、實(shí)驗(yàn)要求1實(shí)驗(yàn)要求(1)畫出各程序流程圖;(2)列出程序清單,加上適量注釋;(3)回答思考問題;(4)記錄實(shí)驗(yàn)過程和結(jié)果。六、 思考與練習(xí)1在上述程序基礎(chǔ)上,要求修改程序,增加在此數(shù)組中找出最大值放入MAX中

34、的同時(shí),找出最小值放入MIN中;實(shí)驗(yàn)五 字符及字符串的輸入/輸出編程實(shí)驗(yàn)一、實(shí)驗(yàn)要求和目的1熟悉匯編語言程序設(shè)計(jì)結(jié)構(gòu);2熟悉匯編語言字符串處理基本指令的使用方法;3掌握利用匯編語言實(shí)現(xiàn)字符的輸入輸出程序設(shè)計(jì)方法;4掌握利用匯編語言實(shí)現(xiàn)字符串的輸入輸出程序設(shè)計(jì)方法。二、軟硬件環(huán)境1硬件環(huán)境:微機(jī)CPU 486以上,500MB以上硬盤,32M以上內(nèi)存;2軟件環(huán)境:裝有MASM 6.0、DEBUG、LINK和EDIT等應(yīng)用程序。三、實(shí)驗(yàn)涉及的主要知識(shí)單元在實(shí)際應(yīng)用中,經(jīng)常需要從鍵盤輸入數(shù)據(jù)并將結(jié)果等內(nèi)容顯示到屏幕上,方便程序控制及查看結(jié)果。匯編語言的數(shù)據(jù)輸入和輸出分成兩類,一是單個(gè)字符數(shù)據(jù)的輸入輸出

35、,一是字符串?dāng)?shù)據(jù)的輸入輸出。都可以通過DOS功能調(diào)用來實(shí)現(xiàn),下面就分別介紹下用來實(shí)現(xiàn)數(shù)據(jù)輸入輸出的功能調(diào)用的使用方法。1單個(gè)字符輸入單個(gè)字符輸入可以利用DOS的1號(hào)功能調(diào)用來完成,使用方法為:MOV AH,1INT 21H這兩條語句執(zhí)行后,光標(biāo)會(huì)在屏幕上閃爍,等待輸入數(shù)據(jù),輸入的數(shù)據(jù)以ASCII碼形式存儲(chǔ)在AL寄存器中。下面簡(jiǎn)單舉例說明單個(gè)字符輸入的使用,從鍵盤輸入一個(gè)數(shù)據(jù)并將其存儲(chǔ)到存儲(chǔ)器中,程序如下所示:DATA SEGMENTA DB ?;保存鍵盤輸入的數(shù)據(jù)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV

36、 DS,AX MOV AH,1;DOS1號(hào)功能調(diào)用 INT 21H MOV A,AL;將輸入數(shù)據(jù)保存到A中 MOV AH,4CH INT 21HCODE ENDSEND START2單個(gè)字符輸出單個(gè)字符輸出可利用DOS 的2號(hào)功能調(diào)用來完成,使用方法為:MOV DL,?MOV AH,2INT 21H單個(gè)字符輸出需要把要輸出字符的ASCII碼放在DL寄存器中。3、字符串輸入從鍵盤輸入一串字符串可以利用DOS的10號(hào)功能調(diào)用來完成,使用方法為:BUF DB 50;預(yù)定義可以輸入的最大字符個(gè)數(shù) DB ? ;實(shí)際輸入字符個(gè)數(shù),根據(jù)輸入自動(dòng)統(tǒng)計(jì) DB 50 DUP (?);存放輸入字符串?dāng)?shù)據(jù)緩沖區(qū)LEA

37、 DX,BUFMOV AH,10INT 21H利用10號(hào)功能實(shí)現(xiàn)字符串輸入,需要在數(shù)據(jù)段中預(yù)定義緩沖區(qū)。4字符串輸出字符串輸出可由DOS 9號(hào)功能調(diào)用來完成,使用方法為:STRING DB HELLO$LEA DX,STRINGMOV AH,9INT 21H顯示字符串需要先在數(shù)據(jù)段中定義,例如STRING,然后調(diào)用9號(hào)功能來進(jìn)行顯示輸出。需要注意的是,字符串要求以$作為結(jié)束標(biāo)志,如果不加$則會(huì)出現(xiàn)亂碼顯示效果。四、實(shí)驗(yàn)內(nèi)容與步驟1實(shí)驗(yàn)內(nèi)容(1)自行編成驗(yàn)證上面四個(gè)字符及字符串輸入和輸出的功能指令,并做好記錄。(2)編成在屏幕上顯示提示信息“Please input your number:”,

38、從鍵盤輸入自己的學(xué)號(hào),存入內(nèi)存中的數(shù)據(jù)段的某一區(qū)域,將輸入的學(xué)號(hào)回顯到屏幕上。STACK SEGMENT STACK DB 256 DUP(?)STACK ENDSDATA SEGMENT INPUT DB 'Input the your number: $' FINISH DB 13,10,'$' OUTPUT1 DB 'Output the number:$' ERROR DB 'ERROR $'DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKERROR1 PROC

39、 ;報(bào)錯(cuò) MOV DX,OFFSET FINISH ;屏幕顯示換行 MOV AH,9 INT 21H MOV DX,OFFSET ERROR ;屏幕顯示error MOV AH,9 INT 21H JMP DONE RETERROR1 ENDPSTART: MOV AX,DATA MOV DS,AX MOV DX,OFFSET INPUT ;顯示輸入第一個(gè)數(shù)的提示信息 MOV AH,9 INT 21H MOV BX,0 ;讀數(shù) 或者可以說是輸入數(shù)地下自己看 應(yīng)該可以動(dòng)LOOP1: MOV AH,1 INT 21H CMP AL,0DH ;師傅是回車 JZ NEXT1 ;回車則跳轉(zhuǎn) CMP AL

40、,040H ;是否大于F JA NEXT2 ;大于則跳轉(zhuǎn) SUB AL,30H ;是否小于0 JB NEXT2 ;小于則跳轉(zhuǎn) MOV AH,0 XCHG AX,BX MOV CX,16D MUL CX ADD BX,AX JMP LOOP1NEXT2: CALL ERROR1 ;call指令NEXT1: MOV DX,OFFSET FINISH ;屏幕顯示換行 MOV AH,9 INT 21H MOV DX,OFFSET OUTPUT1 ;屏幕顯示換行 MOV AH,9 INT 21H MOV AX,BX ;轉(zhuǎn)換成二進(jìn)制輸出 MOV CX,16BIN: SHL AX,1 ;左移一位 JNC N

41、EXT MOV DL,31H ;若進(jìn)位為1,輸出'1' JMP OUTPUTNEXT: MOV DL,30H ;若進(jìn)位為0,輸出'0'OUTPUT: PUSH AX MOV AH,2 ;輸出一個(gè)'0'或'1'的字符 INT 21H POP AX LOOP BINDONE: MOV AH,4CH INT 21HCODE ENDS END START2實(shí)驗(yàn)步驟(1)預(yù)習(xí)字符串處理基本知識(shí),以及字符/字符串輸入/輸出基本操作,根據(jù)實(shí)驗(yàn)內(nèi)容,畫出流程圖;(2)利用EDIT或其他編輯軟件,編寫匯編源程序;(3)匯編、連接該源程序;(4)對(duì)文

42、件進(jìn)行調(diào)試運(yùn)行:利用DEBUG的T命令或G命令和D命令查看數(shù)據(jù)區(qū),字符串是否正確保存到數(shù)據(jù)區(qū)。五、實(shí)驗(yàn)要求與提示1實(shí)驗(yàn)要求(1)畫出各程序流程圖;(2)列出程序清單,加上適量注釋;(3)回答思考問題;(4)記錄實(shí)驗(yàn)結(jié)果。2實(shí)驗(yàn)提示(1)提示信息實(shí)際上也是一串字符串,可以利用9號(hào)功能顯示;(2)如果字符串結(jié)尾沒有$,顯示時(shí)會(huì)出現(xiàn)亂碼。六、思考與練習(xí)以及測(cè)評(píng)標(biāo)準(zhǔn)1字符串在內(nèi)存中是如何存儲(chǔ)的?2屏幕有多個(gè)字符串顯示時(shí),如何換行?實(shí)驗(yàn)六 并口通信實(shí)驗(yàn)(驗(yàn)證及設(shè)計(jì)性實(shí)驗(yàn))一、實(shí)驗(yàn)?zāi)康募耙?學(xué)會(huì)使用TPC2003A集成開發(fā)環(huán)境軟件2. 掌握可編程并行接口芯片8255A控制方法二、實(shí)驗(yàn)任務(wù)及操作過程 1.

43、 讀取開關(guān)狀態(tài)并存入內(nèi)存某一單元 (1)實(shí)驗(yàn)內(nèi)容 通過8255A的C口讀取4個(gè)開關(guān)狀態(tài),其中“1”代表亮、“0”代表滅,把讀進(jìn)來的狀態(tài)存放到內(nèi)存的某個(gè)單元進(jìn)去,并通過debug方式去查看結(jié)果;(2)接線方法 將4個(gè)開關(guān)K1K4連接在PC0PC3,8255CS接譯碼電路的218H; (3)用C口將接收開關(guān)的狀態(tài)(工作在方式0),連接電路并進(jìn)行程序設(shè)計(jì)2. 讀取開關(guān)狀態(tài)用小燈顯示 (1)實(shí)驗(yàn)內(nèi)容 通過8255A的B口讀取4個(gè)開關(guān)狀態(tài)(方式0),通過8255A的C口將開關(guān)狀態(tài)用小燈顯示(方式0);(2)接線方法 將四個(gè)開關(guān)K1K4連接在PB4PB7,將四個(gè)小燈L1L4連接在PC0PC3,8255CS接譯碼電路的218H;(3)B口讀取四個(gè)開關(guān)狀態(tài)(方式0),C口將開關(guān)狀態(tài)用小燈顯示(方式0),連接電路并進(jìn)行程序設(shè)計(jì)。三、具體過程設(shè)置1、8255讀取開關(guān)數(shù)據(jù)并存入寄存器用8255A的C端口接開關(guān)K1-K4,各個(gè)開關(guān)向上為電平1,讀取開關(guān)數(shù)據(jù)通過寄存器BX存入定義的內(nèi)存單元。接線方法:將8255A的CS端與218-21F插孔相連,PC0-PC3接K1-K4此時(shí)8255A的端口地址為:A口地

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論