版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、微機系統(tǒng)及應用實驗指導書東華大學信息科學與技術學院自動化系2014年9月實驗一 基本程序編程和程序調(diào)試一、 實驗目的1、 掌握數(shù)碼轉(zhuǎn)換等基本程序設計的技巧和方法。2、 熟悉DEBUG命令。3、 學會和掌握用DEBUG調(diào)試程序的方法。二、 實驗設備PC機一臺,裝有DOS基本系統(tǒng)三、 實驗內(nèi)容及步驟用DEBUG建立、匯編和運行調(diào)試程序的操作。DEBUG是DOS系統(tǒng)支持的用于匯編語言源程序調(diào)試的系統(tǒng)軟件。它共有19條命令完成相應的功能,命令及其格式可參閱附錄一。(一) DEBUG操作練習1)實驗調(diào)試程序程序的功能是從3500H內(nèi)存單元開始建立0-15共16個數(shù)據(jù)。程序如下:地址(H)機器碼(H)助記
2、符2000BF0035MOVDI, 35002003B91000MOV CX, 00102006B80000MOVAX, 000020099ESAHF200A8805MOV BYTEDI,AL200C47INC DI200D40INC AX200E27DAA200FE2F9LOOP 200A2011F4HLT 2)實驗步驟:(1)輸入與修改 啟動DOS,在DOS提示符下輸入D E B U G后回車,屏幕立即顯示DEBUG提示符“”,表明已進入DEBUG狀態(tài),可以執(zhí)行DEBUG的各種命令。 用DEBUG中的匯編命令 “A 地址”將程序建立在內(nèi)存單元中。 在提示符“”下鍵入 : “A 2000 &
3、#191;” 此時顯示器上將會顯示程序的段地址CS和偏移地址IP,你就可以輸入以上的程序了。即顯示 169C :2000 鍵入 MOV DI, 3500 169C: 2003 MOV CX, 0010169C: 2011 HLT : : : 用反匯編命令 “U 地址”檢查程序在提示符“”下,鍵入 “U 2000¿”,將從2000內(nèi)存單元開始的內(nèi)容反匯編,屏幕上顯示 169C:2000 BF0035 MOV DI, 3500 169C:2003 B91000 MOV CX, 0010 169C:2006 B8000 MOV AX, 0000 : : : : : : 169C:2011
4、F4 HLT當發(fā)現(xiàn)程序有錯時,可用匯編命令“A 地址”進行修改,如要修改200A單元中的指令, 則鍵入“A 200A¿” ,屏幕顯示 169C:200A ,然后再鍵入MOV BYTEDI, AL¿,就把錯誤的程序改正了。(2)顯示和修改數(shù)據(jù)用修改內(nèi)存單元命令 “E 地址” 在指定內(nèi)存單元中存入一個數(shù)。如要在3500為首址的單元中存入14H和25H兩個數(shù)據(jù),可在提示符“”下,鍵入:“E 3500¿”顯示 169C:3500 ×× 鍵入14,按空格鍵 ×× 25,按空格鍵用顯示內(nèi)存命令 “D 地址” 檢查指定單元的內(nèi)容在提示符“
5、”下,鍵入 “D3500¿”顯示 1489:3500 14 25 48 02 1489:3510 * * * * : : : : 1489:3570 * * * * 若某單元內(nèi)容有錯則可用命令: “E 地址 ”進行修正。用顯示和修改命令 “R ”或“R 寄存器名”顯示寄存器或修改其內(nèi)容在提示符“”下,鍵入 “R¿”顯示 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE DS=169C ES=169C SS=169C CS=169C IP=2000要修改IP的內(nèi)容時,鍵入命令 “R IP”后, 顯示 IP 2000,在2000之后鍵入新內(nèi)容。(3
6、)程序運行程序的運行方式有單步運行、斷點運行和連續(xù)運行幾種方式。單步運行 輸入DEBUG跟蹤命令“T”或“T=地址”或“T=地址 指定次數(shù)”,可從指定地址處運行該單元中的一條指令,以后只要連續(xù)輸入“T”命令就能連續(xù)執(zhí)行一條一條指令。如在提示符“”下,鍵入 “T=2000 ¿”顯示 :AX=0000 BX=0000 CX=001D DX-0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=169C ES=169C SS=169C CS=169C IP=2000 NV169C:2003 B91000 MOV CX, 0010斷點運行用運行命令 “G=地址 地址
7、斷點 地址斷點”執(zhí)行指定地址的程序在提示符“”下,鍵入 “G=2000 2011 ¿”顯示 169C:2011 F4 HLT 表示這段程序已經(jīng)執(zhí)行完畢。連續(xù)運行輸入DEBUG命令“G=地址”,執(zhí)行指定地址的程序 (WIN系統(tǒng)下,不建議使用此方式)(4)用顯示內(nèi)存命令檢查運行結果在提示符“”下,鍵入命令 “D 地址¿”,根據(jù)其中的內(nèi)容判斷程序運行是否正確。如檢查以上程序執(zhí)行后的結果,在提示符“”下,鍵入“ D 3500¿”,可顯示169C:3500 00 01 02 03 04 15169C:3510 (二)數(shù)碼轉(zhuǎn)換程序及其調(diào)試1、 將ASCII碼表示的十進制數(shù)轉(zhuǎn)換
8、為二進制數(shù)1)程序設計的算法及其程序十進制數(shù)據(jù)可表示為:DI代表十進制數(shù)1,2,3,9,0 上式可轉(zhuǎn)換為: 由式(2)可歸納十進制數(shù)轉(zhuǎn)換為二進制數(shù)的方法:從十進制的最高位Dn開始乘10加次位的操作,將結果再乘10再加下一次位,如此重復,則可求出二進制數(shù)結果來。程序流程及參考程序如圖1-1。這里我們規(guī)定:被轉(zhuǎn)換的ASCII碼十進制數(shù)存放在3500H3504H單位中。而轉(zhuǎn)換結果存放在3510H3511H單元中。2)實驗步驟(1)輸入程序并檢查無誤。(2)在3500H3504H單元存入十進制數(shù)12的ASCII碼,即E3500H,并輸入3030303132H。(3)G=2000 201D,運行程序(4
9、)用D3510來查看結果,應為:3510 0C 00(5)反復試幾組數(shù),考查程序的正確性。地址(H) 助記符 注釋2000 MOV SI,3500 ;源地址2003 MOV DI,3510 ;結果地址2006 MOV BX,000A ;乘數(shù) 102009 MOV CX,0004 ;計數(shù)200C MOV AH,00 ;AH 清零200E MOV AL,SI ;取被轉(zhuǎn)換數(shù)2010 SUB AL,30 ;ASCII碼變十進制數(shù)2012 IMUL BX ;高位(AX)*(BX)送AX2014 ADD AL,SI+01 ;取下一位1017 SUB AL,30 ;ASCII碼減30變十進制數(shù)2019 IN
10、C SI ;源地址指針+1201A LOOP 2012 ;CX-1,若CX不等于零則繼續(xù)201C MOV DI,AX ;若CX不等于零則存結果201E INT 3 圖1-12 將十進制數(shù)的ASCII碼轉(zhuǎn)換為BCD碼1)程序流程和程序設從鍵盤輸入的五位十進制數(shù)的ASCII碼已存放在3500H起始的內(nèi)存單元內(nèi),把它轉(zhuǎn)換成BCD碼后,再按位分別存入350AH起始的內(nèi)存單元內(nèi)。若輸入的不是十進制數(shù)的ASCII碼,則對應存放結果的內(nèi)容為“FF”。一字節(jié)ASCII碼取其低四位即變?yōu)锽CD碼,程序流程圖及考程序如圖1-2所示。2)實驗步驟(1) 輸入程序并檢查無誤。(2) 在3500H3504H單元中存入五
11、位十進制數(shù)的ASCII碼,即E3500,并輸入31,32,33,34,35。(3) G=2000 201C,運行以上程序。(4) D350A,顯示結果為:0000:350A 01 02 03 04 05 CC(5) 反復試幾組數(shù),考查程序的正確性。地址(H) 助記符 注釋2000 MOV CX,0005;循環(huán)計數(shù)器賦初值2003 MOV DI,3500;ASCII碼首址2006 MOV BL,F(xiàn)F; 錯誤標志送BL2008 MOV AL,DI;送ASCII碼至AL200A CMP AL,3A; 比較AL與3AH200C JNB 2014; 不低于3A則轉(zhuǎn)2014200E SUB AL,30;
12、低于3A則取ASCII碼的低四位2010 JB 2014; 低于30則轉(zhuǎn)20142012 MOV BL,AL; 否則AL內(nèi)容送BL,取代FF2014 MOV AL,BL; 結果或錯誤標志送AL2016 MOV DI+0A,AL2019 INC DI201A LOOP 2006201C INT 3圖1-23 將十六位二進制數(shù)轉(zhuǎn)換為ASCII碼表示的十進制數(shù)1)程序及其流程十六位二進制數(shù)的值域為065535,最大可轉(zhuǎn)換為五位十進制數(shù)。算法:五位十進制數(shù)可表示為: Di:表示十進制數(shù)09。 因此,將十六位二進制數(shù)轉(zhuǎn)換為五位ASCII碼表示表示的十進制數(shù),就是求D1D4,并將它化為ASCII碼。程序流
13、程圖如圖1-3所示,設源數(shù)據(jù)存于35003501H單元中,結果數(shù)存于35103514H單元中。2)實驗步驟(1) 輸入程序并檢查無誤。(2) 在35003501H單元中存放0C00,運行程序并檢查結果,應看到35103514H單元中的數(shù)依次為3030303132。(3) 反復試幾組數(shù),并運行程序、觀察結果。地址(H) 助記符 注釋2000 MOV DX,3500;取二進制數(shù)2004 MOV SI,3515; 目標首址在35102007 DEC SI2008 MOV AX,DX200A MOV DX,0000200D MOV CX,000A 2010 DIV CX; ; 除102012 XCHG
14、 AX,DX2014 ADD AL,302016 MOV SI,AL2018 CMP DX,0000201B JNE 2007201D CMP SI,3510 ; 填余下高位為02021 JZ 202A; 2023 DEC SI2024 MOV AL,302026 MOV SI,AL2028 JMP 201D202A INT 3圖1-34、 十六進制數(shù)轉(zhuǎn)換為ASCII碼1) 程序及其流程經(jīng)過CPU處理后的十六進制數(shù)存放在起始地址為3500H的內(nèi)存單元中,把它們轉(zhuǎn)換成ASCII碼之后,再分別存入起始地址為350AH的內(nèi)存單元中。 從表2-1中可知,十六進制數(shù)加30H即可得到0H9H的ASCII碼
15、,而要得到AHFH的ASCII碼,則需再加7H。程序流程圖及參考程序如圖1-4所示。2)實驗步驟(1) 輸入程序并檢查無誤。(2) 在35003501H單元中存入四位十六進制數(shù)203B,即E3500,并輸入3B,20。(3) G=2000 2021,運行以上程序(4) D350A,顯示結果為:0000:350A 42 33 30 32 CC輸入數(shù)據(jù)與結果ASCII碼對應順序相反。(5) 反復試幾組數(shù)??疾槌绦虻恼_性。地址(H) 助記符 注釋2000 MOV CX,00042003 MOV DI,35002006 MOV DX,DI2008 MOV AX,DX200A AND AX,000F
16、;取低四位值200D CMP AL,0A; ; 判是否“0”-“9”200F JB 2013 ; 是“0”-“9”轉(zhuǎn)20132011 ADD AL,07; 是“A”-“F”,加72013 ADD AL,30; 轉(zhuǎn)換為ASCII碼2015 MOV DI+0A,AL2018 INC DI2019 PUSH CX ;保護循環(huán)計數(shù)器內(nèi)容201A MOV CL,04; 移位次數(shù)送CL201C SHR DX,CL201E POP CX201F LOOP 20082021 INT 3圖1-44 BCD碼轉(zhuǎn)換為二進制數(shù) 1) 程序及其流程設四個二位十進制數(shù)的BCD碼存放在起始地址為3500H,的單元中,轉(zhuǎn)換出
17、的二進制數(shù)碼存入起始地址為3510H的內(nèi)存單元中,程序流程圖及參考程序如圖1-5所示。地址(H) 助記符 注釋2000 MOV CX,00042003 MOV DI,35002006 MOV AL,DI2008 ADD AL,AL ;乘2200A MOV BL,AL200C ADD AL,AL ;乘2200E ADD AL,AL ;乘22010 ADD AL,BL ;乘102012 INC DI2013 MOV AH,002015 ADD AL,DI; BCD碼十位與個位加2017 MOV DI+0F,AX;存結果 圖1-5201A INC DI201B LOOP 2006201D INT 3
18、2)實驗步驟(1) 輸入程序并檢查無誤。(2) 在35003507單元中存入四個十進制數(shù)(12,34,56,78)的BCD碼,即E3500 輸入01,02,03,04,05,06,07,08。(3) G=2000 201D,運行以上程序。(4) D3510,顯示結果為3510 0C 00 22 00 38 00 4E 00(5) 反復試幾組數(shù),考查程序的正確性。四、思考題1、 圖1-1程序,將一個五位十進制數(shù)轉(zhuǎn)換為二進制數(shù)(十六位)時,這個十進制數(shù)最小可為多少,最大又可為多少?為什么?2、 將一個十六位二進制數(shù)轉(zhuǎn)換為ASCII碼十進制數(shù)時,如何確定D1的值?3、 在十六進制數(shù)轉(zhuǎn)換為ASCII碼
19、時,存轉(zhuǎn)換結果后,為什么要把DX向右移四次?4、 自編ASCII碼十六進制、十進制小數(shù)二進制、二進制BCD碼的程序,并調(diào)試運行。實驗二 程序設計和PC機上程序調(diào)試操作實驗一、實驗目的掌握常用程序設計的基本技巧和方法。學會和熟悉使用MASM匯編程序和LINK連接程序。掌握使用PC機上編程和調(diào)試程序的方法。二、實驗設備PC機一臺,裝有DOS基本系統(tǒng)和MASM宏匯編軟件三、實驗內(nèi)容及步驟(一)按要求編寫程序并在DEBUG下建立、匯編和調(diào)試程序、 四字節(jié)二進制數(shù)的加法1)程序設計要求兩個字的被加數(shù)存放于3500H3503H單元,加數(shù)存于3504H3507H單元(存放格式為高位存高地址單元,低位存低地址
20、單元),兩數(shù)之和(如不超過四字節(jié))存放于3508H350BH單元。2)實驗步驟()編寫程序。()在DEBUG下輸入程序并檢查(程序可存放于2000H8000H單元)。()在3500H3507H單元中存入被加數(shù)014527和加數(shù)146758。()運行程序后,檢查3508H350BH單元中內(nèi)容。()反復選擇幾組被加數(shù)和加數(shù),檢查結果,驗證程序正確性。2、數(shù)據(jù)塊的搬移1)程序設計思想和要求將內(nèi)存中一數(shù)據(jù)區(qū)中數(shù)據(jù)(源數(shù)據(jù)塊)傳送到另一數(shù)據(jù)區(qū)(目的數(shù)據(jù)塊)。源數(shù)據(jù)塊和目的數(shù)據(jù)塊區(qū)在內(nèi)存中的位置有兩種情況:兩區(qū)重疊和不重疊,如下圖所示。對于兩個數(shù)據(jù)塊不重疊的情況,數(shù)據(jù)的傳送可從數(shù)據(jù)塊的首址開始,也可從數(shù)據(jù)
21、塊的末址開始;對于兩個數(shù)據(jù)塊重疊的情況,則要加以分析,否則重疊部分會因搬移而遭破壞。處理方法可以是:在源數(shù)據(jù)塊首址目的數(shù)據(jù)塊首址時,從數(shù)據(jù)塊的首址開始傳送,在數(shù)據(jù)塊首址目的數(shù)據(jù)塊首址時,從數(shù)據(jù)塊的末址開始傳送。若源數(shù)據(jù)塊首址存放于SI 中,目的數(shù)據(jù)塊首址存放于DI 中,塊字節(jié)數(shù)存放于CX中。要求設計的程序能夠?qū)崿F(xiàn)不同情況下的數(shù)據(jù)塊傳送。源數(shù)源據(jù)塊數(shù)據(jù)目的塊數(shù)據(jù)目的數(shù)塊據(jù)塊)實驗步驟()編寫程序。()在DEBUG下鍵入程序并檢查(程序可存放于2000H8000H單元)。()確定源數(shù)據(jù)塊和目的數(shù)據(jù)塊區(qū)不重疊時的首址,確定數(shù)據(jù)塊個數(shù)為16個。并在源數(shù)據(jù)區(qū)送入任意個數(shù)據(jù)。()運行程序后,檢查目的數(shù)據(jù)區(qū)
22、的內(nèi)容。()確定源數(shù)據(jù)塊和目的數(shù)據(jù)塊區(qū)重疊時, 源區(qū)首址目的區(qū)首址時的首址, 以及數(shù)據(jù)塊個數(shù)為16個,并在源數(shù)據(jù)區(qū)送入任意個數(shù)據(jù)。運行程序后,檢查目的數(shù)據(jù)區(qū)的內(nèi)容。()確定源數(shù)據(jù)塊和目的數(shù)據(jù)塊區(qū)重疊時, 源區(qū)首址目的區(qū)首址時的首址, 以及數(shù)據(jù)塊個數(shù)為16個,并在源數(shù)據(jù)區(qū)送入任意個數(shù)據(jù)。運行程序后,檢查目的數(shù)據(jù)區(qū)的內(nèi)容。3、無序數(shù)據(jù)塊的遞增排序)程序設計思想和要求在首址為3000H 的數(shù)據(jù)區(qū)中存放著一組無符號數(shù), 數(shù)據(jù)的長度存于3500H單元內(nèi),要求用冒泡法對該區(qū)中的數(shù)據(jù)按遞增次序排列。冒泡法的基本思想是從最后一個數(shù)(或從第一個數(shù))開始,依次把相鄰兩個數(shù)比較,即第個數(shù)與第個數(shù)比較,若大則交換,否
23、則不交換,直到個數(shù)都比較完為止。此時,其中最小數(shù)排在最前列。然后將剩下的-1個數(shù)再按前述方法進行,找到N-1個數(shù)中最小的數(shù)。以后重復進行,直到全部按序排列。)實驗步驟()編寫程序。()在DEBUG下鍵入程序并檢查(程序可存放于2000H8000H單元,只要不與數(shù)據(jù)區(qū)重疊即可)。()確定數(shù)據(jù)個數(shù)并輸入3500H單元中,在首址為3500H的數(shù)據(jù)區(qū)中存入任意無符號數(shù)。()運行程序并檢查運行結果。()反復修改數(shù)據(jù)個數(shù)和數(shù)據(jù)區(qū)中的數(shù),運行程序、觀察結果,驗證程序的正確性。4、求數(shù)的平方根)程序設計思想和要求減奇數(shù)法是一種求取近似平方根和平方根的整數(shù)部分的方法。有公式:nS(2K-1)=N2=1若要求數(shù)S
24、的平方根ÖS, 則可以從S中減去奇數(shù)1、3、5直到減為零或不夠減下一個奇數(shù)為止,然后統(tǒng)計減去的奇數(shù)個數(shù),它就是S的近似平方根。被開方數(shù)為一個足夠大的二進制數(shù), 存于首址為4000H的單元內(nèi),它的方根存放在以4500H為首的單元內(nèi)。)實驗步驟()編寫程序。()在DEBUG下輸入程序并檢查(程序可存放于2000H8000H單元,和數(shù)據(jù)存放單元不要重疊)。()在4000H為首的單元中存入一個任意大的數(shù)。()運行程序并檢查運行結果。()反復修改被開方數(shù),運行程序、觀察結果,驗證程序的正確性。5、思考題 如果二進制加數(shù)和被加數(shù)不限于四字節(jié)而為任意字節(jié)時,程序應作如何改動? 修改原有的無符號數(shù)的
25、排序程序為帶符號數(shù)的排序程序。 被開方數(shù)是一壓縮型的BCD碼十進制數(shù)時,程序應作如何修改?(二)MASM匯編程序和LINK連接程序的使用操作在DEBUG中,使用A命令建立程序,一般不能使用標號和偽指令,并不能保存匯編語言源程序,適用于簡單程序。MASM宏匯編程序可以將編輯程序建立的源程序文件進行匯編,匯編后在盤上建立目標文件、列表文件和交叉參考文件。而目標文件經(jīng)LINK程序連接以后成為可執(zhí)行的文件,它可以在DOS下執(zhí)行也可在DEBUG下調(diào)試。1、計算機鋼琴程序1)實驗內(nèi)容根據(jù)樂曲中不同的音符是由輸出不同頻率的聲波而產(chǎn)生的原理,通過設置PC機中 8253定時器不同的計數(shù)值,可由揚聲器發(fā)出不同的曲
26、調(diào)。 以下是實現(xiàn)PC機作為一架可彈奏的鋼琴演奏預定的曲調(diào)。程序中采用了INT 21H軟中斷調(diào)用了DOS的常用子程序。源程序為:DATA SEGMENTMESS DB Push any key to stop!,0dH,0aH,$TABLE DW 524,588,660,698,784,880,988,1048,1176,1320,0TABLEL DB 31H,31H,32H,31H,34H,33H,3BH DB 31H,31H,32H,31H,35H,34H,3BH DB 31H,31H,38H,36H,34H,33H,32H,3BH DB 36H,36H,36H,34H,35H,34H,3B
27、H,0AAHDATA ENDSSTACK SEGMENT PARA STACK STACKSTA DB 256 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK, ES: DATASTART PROC FAR DIV WORD PTR TABLE+BX PUSH DS MOV BX, AX XOR AX, AX MOV AL, 10110110B PUSH AX OUT 43H, AL MOV AX, DATA MOV AX, BX MOV DS, AX OUT 42H, AL MOV ES, AX MOV AL
28、, AH MOV AH, 09H OUT 42H, AL LEA DX, MESS IN AL, 61H INT 21H OR AL, 03HKK: LEA SI, TABLEL OUT 61H, AL CALL DELAY IN AL, 61H AND AL, 0FCH OUT 61H, AL QQ: INC SISING: MOV AH, 06H JMP SING MOV DL, 0FFH FINISH: RET INT 21H START ENDP JNE FINISH MOV AL, SI DELAY PROC NEAR ; 延時子程序 CMP AL, 3BH PUSH CX JNE
29、DDD PUSH AX CALL DELAY MOV AX, 500H ; 大循環(huán)次數(shù) JMP QQ X1: MOV CX, 0FFFFH ; 小循環(huán)次數(shù)DDD: CMP AL, 0AAH X2: DEC CX JE KK JNZ X2 SUB AL, 31H DEC AX SHL AL, 01H JNZ X1 MOV BL, AL POP AX MOV AX, 0000H POP CX MOV DX, 12H RET MOV BH, 00H DELAY ENDP CODE ENDS END START2)實驗步驟(1)利用EDIT 全屏幕編輯程序或TURBO PASCAL中的編輯功能或任何一
30、款文本編輯程序輸入以上程序,以文件名為 PLAYPIA.ASM存盤。(2)在DOS系統(tǒng)下執(zhí)行子目錄MASM中的執(zhí)行文件MASM.EXE ,用宏匯編程序?qū)LAYPIA.ASM.匯編成目標文件PLAYPIA.OBJ。操作過程如下:顯示 鍵入 C:MASM> MASM ¿ MICROSOFT(R) COPYRIGHT(C)SOURCE FILENAME .ASM PLAYPIA ¿OBJECT FILENAME PLAYPIA.OBJ SOURCE LISTINGNUL.LST PLAYPIA ¿CROSS-REFERENCENUL.CRF WARNIING E
31、RRORS 0SEVERE ERRORS 0如ERRORS 均為0 表示匯編正確,如不為0,則必須在編輯狀態(tài)下重新修改源程序。(3)運行子目錄DOS下LINK執(zhí)行文件將目標文件PLAYPIA.OBJ連接成為可執(zhí)行的文件PLAYPIA.EXE。操作如下:顯示 鍵入 C: LINK ¿ MICROSOFT(R) COPYRIGHT(C) OBJECT MODULES.OBJ: PLAYPIA ¿ RUN FILEPLAYPIA.EXE ¿ LIST FILENUL.MAP PLAYPIA ¿ LIBRARIES.LIB ¿ C: (4)在DOS下直
32、接鍵入由MASM宏匯編和LINK連接程序生成的可執(zhí)行文件文件名PLAYPIA,運行程序觀察運行結果。(6) 修改程序中延時子程序的循環(huán)次數(shù),重新匯編、連接后運行。2、求數(shù)據(jù)塊的最小值和最大值)實驗內(nèi)容在以BUFFER為首址的內(nèi)存中存放了若干個帶符號數(shù), 其個數(shù)存放在首單元,尋找出它們最大值放到存儲單元MAXVAL中, 最小值放到存儲單元MINVAL中。匯編語言源程序如下: DATA SEGMENT BUFFER DB 10,22,33,-80,127,-76,0,90,-45,60,-1 MINVAL DB ? MAXVAL DB ? DATA ENDS STACK SEGMENT PARA
33、STACK STACK STA DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK START PROC FAR PUBH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX MOV ES, AX LEA BX, BUFFER MOV CH, 0 MOV CL, BX INC BX MOV AL, BX MOV MINVAL, AL MOV MAXVAL, AL INC BX DEC CX AGAIN: MOV AL, BX CMP AL, MIN
34、VAL JE NEXT JG A1 MOV MINVAL, AL JMP NEXT A1: CMP AL, MAXVAL JL NEXT MOV MAXVAL, AL NEXT: INC BX DEC CX JNE AGAIN RETF START ENDP CODE ENDS END START)實驗步驟()用編輯程序建立源程序文件,文件名自定。()用MASM宏匯編程序和LINK連接程序?qū)⒃闯绦蛭募R編生成以EXE為擴展名的執(zhí)行文件。(3)用DEBUG調(diào)試程序?qū)⒂缮袭a(chǎn)生的EXE可執(zhí)行文件送入內(nèi)存,先用反匯編命令檢查程序內(nèi)容和首末地址,然后檢查以BUFFER為首址的存儲單元中數(shù)據(jù)塊和MINVA
35、L、MAXVAL單元的內(nèi)容。BUFFER 地址單元的段地址和偏移地址是由系統(tǒng)在匯編和連接時指定的。各個不同的系統(tǒng)都不一樣,一般來說,偏移地址為零,段地址可在反匯編程序時,根據(jù)指令MOV AX, DATA 對應機器碼中DATA的值來確定。(4)在DEBUG下運行程序,檢查運行結果。(5)修改源程序中BUFFER數(shù)據(jù)區(qū)的各數(shù)據(jù),重新匯編后再運行,檢查結果。3、從無序數(shù)列中刪除一個元素1)實驗內(nèi)容在BUFFER為首址的內(nèi)存區(qū)中存放了一個無序字符串,其長度存放在第一個字節(jié)單元,在KEY單元內(nèi)存放了要刪除的一個字符,查找此無序字串,若找到則刪除并作相應調(diào)整,若字串中無此字符則在FLAG單元內(nèi)置FFH標志
36、。其程序流程圖如下。2)實驗步驟()按以上框圖編寫程序,并任意設定字符個數(shù)和字符串。()輸入?yún)R編語言源程序,文件名自定。()用MASM和LINK程序匯編和連接生成EXE執(zhí)行程序。(4)運行該程序,并檢查結果。(5)修改字符串及其個數(shù),再運行程序,驗證程序的正確性。 設地址指針, 取串長度ÞCX KEY內(nèi)容ÞAL 搜索字串 找到否? N Y CX1 串搜索 N 完否? 以要刪除的數(shù)據(jù)的地址 為目的地址,下一個數(shù) Y 據(jù)的地址為源地址,以 剩下的數(shù)據(jù)個數(shù)為傳送 置 次數(shù)進行傳送 FLAGE單元 返回 4、思考題 計算機鋼琴程序中,INT 21 的作用是什么?指令DIV WORD
37、 PTRTABLE+BX中為什么要用操作符WORD PTR?延時子程序DELAY中為什么要把AX、CX壓入棧? 在求最大和最小值的程序中,有指令MOV MINVAL,AL和MOV MAX MAXVAL,AL將第一個數(shù)存入這兩個單元,可以用哪兩個立即數(shù)直接存入這兩個單元也可達到同樣效果? 若求無符號數(shù)據(jù)塊的最大和最小值,那么程序要作哪些修改? 刪除一個升序或降序字符串中一個字符時,程序應如何修改可使在找不到這個字符時搜集次數(shù)減少?四、實驗報告要求1對所有程序?qū)懮陷^詳細的注釋。2整理出實驗中數(shù)據(jù)和運行結果。3總結DEBUG程序、MASM宏匯編、LINK連接程序的調(diào)試程序的方法和經(jīng)驗。4根據(jù)思考題寫
38、出答案和運行結果。實驗三 DOS系統(tǒng)功能調(diào)用及模塊化程序設計一、實驗目的2、 熟悉DOS系統(tǒng)中基本功能子程序的作用及其調(diào)用方法。3、 結合DOS系統(tǒng)中鍵盤和顯示功能子程序的調(diào)用和匯編語言源程序結構設計有關程序。4、 掌握復雜程序的設計思想模塊化程序設計的方法。二、實驗設備PC機一臺,裝有DOS基本系統(tǒng)和MASM宏匯編軟件。三、實驗內(nèi)容及步驟(一)DOS鍵盤、顯示基本功能子程序調(diào)用DOS提供了許多系統(tǒng)功能子程序可由程序設計者調(diào)用,其中最基本的是鍵盤和顯示操作功能的調(diào)用,具體調(diào)用的方法可參閱教科書。1、 顯示緩沖區(qū)的字符串 1)實驗程序:DSEGSEGMENTSTRINGDBWelcome to
39、DONG HUA University!,0dH,0aH,$DSEGENDSSTACK SEGMENTPARA STACK STACKDB256DUP (?)STACKENDSCSEGSEGMENTMAINPROCFARASSUME CS: CSEG, DS: DSEG SS: STACKSTART:PUSHDSMOVAX,0PUSHAXMOVAH,9MOVDX,SEG STRINGMOVDS, DXMOVDX,OFFSET STRINGINT21HRETMAINENDPCSEGENDSENDSTART2) 實驗步驟: (1)建立源程序文件。(2)用MASM宏匯編程序和LINK連接程序生成執(zhí)行
40、程序。(3)運行執(zhí)行程序,輸入不同字母,觀察結果。2、鍵盤輸入小寫字母,顯示器顯示大寫字母 1)實驗程序: CSEGSEGMENTMAIN PROCFAR ASSUMECS:CSEGSTART:PUSHDSMOV AX, 0PUSH AXBEGIN:MOVAH,1INT21HCMPAL,aJBSTOPCMPAL,zJASTOPSUBAL,20HMOVDL,ALMOVAH,2INT21HJMP BEGINSTOP:RETMAINENDPCSEGENDSENDSTART 2) 實驗步驟: (1)建立源程序文件。(2)用MASM宏匯編程序和LINK連接程序生成執(zhí)行程序。(3)運行執(zhí)行程序,輸入不同字母,觀察結果。3、從鍵盤輸入一個二位十進制的月份數(shù)(01-12),顯示相應月份的英文縮寫名1)程序及其結構 程序采用子程序的結構形式,子程序有:將輸入的二位月份數(shù)轉(zhuǎn)換為二進制數(shù)的子程序;從字符表中查找相應的英文縮寫的子程序;將月份的英文字母顯示在屏幕上的子程序。程序如下:DATASGSEGMENTPARADATATHREEDB3MONINDB3,4 DUP(?)ALFMONDB ?,$MONTABDB JAN,FEB,MAR,APR,MAY,J
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西藏大學《電氣控制技術綜合設計》2023-2024學年第一學期期末試卷
- 家庭財富傳承與遺產(chǎn)規(guī)劃
- 實驗教育對培養(yǎng)學生實踐能力的推動作用
- 個人勞務外派協(xié)議范本2024版一
- 教育信息化下的教學資源整合技巧
- 四川幼兒師范高等??茖W?!斗蛇壿嬇c方法》2023-2024學年第一學期期末試卷
- 幼兒園愛國衛(wèi)生月活動策劃方案四篇
- 上海杉達學院《俄語機械工程基礎》2023-2024學年第一學期期末試卷
- 2025年度行政主體優(yōu)益權在環(huán)境保護合同中的應用探討3篇
- 山東師范大學《工程測量學》2023-2024學年第一學期期末試卷
- 華電考試初級理論復習試題及答案
- 第十七屆山東省職業(yè)院校技能大賽市場營銷賽項賽卷第一套
- 塔吊司機和指揮培訓
- 紅色簡約2025蛇年介紹
- 專題3-6 雙曲線的離心率與常用二級結論【12類題型】(解析版)-A4
- 光伏電站運維課件
- 糧庫工程合同范本
- 江蘇省蘇州市2023-2024學年高一上學期期末學業(yè)質(zhì)量陽光指標調(diào)研試題+物理 含解析
- 農(nóng)業(yè)合作社線上線下營銷方案
- 研發(fā)實驗室安全培訓
- 電信公司網(wǎng)絡安全管理制度
評論
0/150
提交評論