四川大學微機原理實驗報告_第1頁
四川大學微機原理實驗報告_第2頁
四川大學微機原理實驗報告_第3頁
四川大學微機原理實驗報告_第4頁
四川大學微機原理實驗報告_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、微機原理實驗報告學院:專業(yè)班級:姓名學號實驗一匯編語言編程基礎1.3匯編語言程序上機操作和調試訓練一功能說明運用8086匯編語言,編輯多字節(jié)非壓縮型BCD數除法的簡單程序,文件名取為*.ASM。運用MASMEXE文件進行匯編,修改程序中的各種語法錯誤,直至正確,形成*.OBJ文件。運用LINK.EXE文件進行連接,形成*.EXE文件。仔細閱讀和體會DEBUG調試方法,掌握各種命令的使用方法。運用DEBUG。EXE文件進行調試,使用單步執(zhí)行命令一T兩次,觀察寄存器中內容的變化,使用察看存儲器數據段命令一D,觀察存儲器數據段內數值。再使用連續(xù)執(zhí)行命令一G,執(zhí)行程序,檢查結果是否正確,若不正確可使用

2、DEBUG的設置斷點,單步執(zhí)行等功能發(fā)現錯誤所在并加以改正。匚結束二程序流程圖三程序代碼修改后的程序代碼如下:DATASEGMENTADB9,6,8,7,5BDB5CDB5DUP(0)NEQU5DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOVAX,DATAMOVDS,AXMOVES,AXCLDLEASI,ALEADI,CMOVCX,NMOVAH,0LP1:LODSBAADDIVBSTOSBLOOPLP1MOVCX,NLEADI,CLP2:MOVDL,DIADDDL,30HMOVAH,2INT21HINCDILOOPLP2MOVA

3、H,4CHINT21HCODEENDSENDSTART四實驗感想和收獲通過這次試驗,我對微機原理上級試驗環(huán)境有了初步的認識,可以較為熟練地對匯編語言進行編譯,匯編及連接,同時也學會了用DEBUG調試程序,收獲很大。在這次試驗中我也遇到了一些困難。在剛開始我發(fā)現自己無法打開MASM.EXE,計算機提示是由于版本不兼容。我這才想起來我的操作系統(tǒng)是64位的,和該軟件版本不兼容。不過我并沒有放棄,經過我的摸索之后,我發(fā)現用DOSBOX這個程序可以解決我的電腦運行不了該程序的問題。在解決了第一個難題后,我開始著手改正試驗1.3中的語法錯誤和邏輯錯誤,但是無論我怎么修改卻始終都無法通過編譯,并且基本上每句

4、話都有編譯錯誤。根據我多年編程的經驗來看,這應該是中文輸入法在搞鬼,之后我耐心地把程序重新輸了一遍,果然通過了編譯,并且之后的連接也進行的很順利。在用DEBUG調試時發(fā)現得出的結果也很正確。盡管這次的實驗內容非常簡單,僅僅是教會我們一些基本的操作,但我卻明顯感覺到了匯編語言和C語言等高級語言所不同的地方。越是底層,基礎的東西就越不人性化,用C語言一行代碼就能實驗的功能在匯編語言中可能要花上數十行??磥韰R編語言的學習不是幾周就能速成的,必須要有長年累月的積淀才能掌握。實驗二設計匯編語言程序一功能說明練習1.實驗題目:編程計算下列表達式:A=90,B=-70,C=5,Y均為有符號數,計算Y=2X(

5、A+B)+(AXC)三5要編寫一些稍微復雜的程序,我們會遇到一段程序被反復執(zhí)行,這樣,我們會用到LOOP指令。使用該指令時,需在CX中裝入循環(huán)次數。練習2.碼轉換程序設計編制程序,把十進制數15786轉化成二進制數。提示:15786=1X10X10X10X10+5X103+7X102+8X10+6,循環(huán)CX=5練習3.編制程序,從鍵盤輸入最多5個數,求他們的和,存入SUM。練習4.用“冒泡“法對一組數300,250,280,240,260,按從小到大的順序排列。提示:用冒泡的方法對一組數據元素排序,它的基本方法是:將相鄰的兩個元素通過比較進行排序,通過多次,多遍的鄰元素排序,實現整個一組數的排

6、序。對于5(N)個元素,整個排序通過4遍(=N-1)鄰元素排序完成。每一遍的排序由若干次鄰元素的排序組成。4遍排序中,鄰元素的排序依次為4,3,2,1遍。完成第一遍排序后,最大數沉底,已經到達它應占據的位置,不需要參加下一遍的排序。外循環(huán)的次數為CX=4次(N-1),內循環(huán)的次數為4,3,2,1(DECCX)排序遍數本遍排序前第一次排序后第二次排序后第三次排序后第四次排序后11300,250,280,1250,300,280,240,260250,280,300,240,260250,280,240,300,260250,280,240,260,300240,26021250,280,240,

7、250,280,240,260,300250,240,280,260,300250,240,260,280,3001260,30031250,240,260250,240,260,280,300240,250,260,280,300280,3004240,250,260240,250,260,280,300280,300實驗要求:編制程序,從鍵盤輸入300,250,280,240,260這五個數,并思考如何輸入任意五個數,五個數可以有一位數,二位數,三位數,四位數,五位數,混合輸入比較大?。粚@組數用冒泡法進行排序,并輸出原始數據及排序后數據,兩兩數據之間用空格分隔;利用DEBUG調試工具,用

8、D0命令,查看排序前后,內存數據的變化,以及會用調試命令查看程序運算中寄存器中的值;去掉最大和最小的兩個值,求出其余值的平均值,并輸出最大值,最小值和平均值;用壓棧PUSH和出棧POP指令“先進后出”的特點,設計算法將平均值按位逐個輸出(即輸出263);用移位指令將平均值以二進制串的形式輸出。設計程序要有模塊化的思想,用子程序實現不同的功能;所有數據輸出前要用字符串的輸出指令,進行輸出提示(如:zuidazhishi:300等),所有數據結果能清晰地顯示在電腦屏幕上。二程序流程圖輸出ZUIDAZHISHI:輸出第5個數即最大值輸出ZUIXIAOZHISHt輸出第1個數即最小值輸出PINGJUN

9、ZHISH:HE=OCX=3指針指向第二個數將其由ASCI碼轉換成2進制數/設置X=1,SI=0數據段設置變量TR1DB16DUP(30H)f將平均值(二進制)帶進位左移一位.將STR+加1指針指向下一個數he=he+亥二進制數T加忸CX減1將STR+對應的字符輸出CX=0?”Cx=0、YHE除以3得到平均值三程序代碼練習一:DATASEGMENTTOC o 1-5 h zADB90BDB-70CDB5YDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBL,AMOVCL,B;A+B;2*(A+B);A*

10、C;A*C/5ADDBL,CLMOVAL,02HIMULBLMOVBX,AXMOVAL,AMOVCL,CIMULCLIDIVCLADDAX,BXMOVY,AXMOVAH,4CHINT21HCODEENDSENDSTARTL-1J-E:OKDOStioxu./4,Cpuspeed:SCIOUcycles,lrramieskip,Program:DtBUtiJJX=0G5ABX=0GE80S=G76AES=G75ACX=00G5DX=0000SF=000OSS=G769CS=G76BIF=0G(Z0BF=0000SI=0000DI=0000OUUPElPLNZACPECY976B:0GE003C3

11、-tADDAX.BXX=0G8ZBX=0GE80S=G76AES=G75A3?6B:0G2ZA3030O-tCX=00G5DX=000OSF=000OSS=G769CS=G76BIF=0G(ZZMOU00031.AXBF=0000SI=0000DI=0000NUUPElPLNZACPENCDS:0003=0000X=0G8ZBX=0GE80S=G?6AES=G?5A3?6B:0G25-ds:0000eErrorB44CCX=00G5DX=000OSP=000OSS=G?69CS=G?6BIP=0G(25MOUBP=0000SI=0000DI=0000MUUPElPLMZACPEMCAH.4C-

12、dds:03?6A:00005ABAG58200000000-000000000000003?6A:0010B86AG?8ED88AIE00-000E0100G2D9BO3?6A:0GE0GEF6EB8BD8AO0000-8AGE00F6E9F6F93?6A:0G3003C3A30300B44CCD-Z10000000000003?6A:00400000000000000000-000000000000003?6A:0G500000000000000000-000000000000003?6A:00600000000000000000-00000000000000976A:0G70-A0000

13、000000000000-00000000000000練習二:DATASEGMENTADW15786DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,AMOVCX,16;當首位為1,執(zhí)行L1;輸出0LEFT:TESTBX,8000HJNZL1MOVDL,OMOVAH,02HINT21HSHL:SHLBX,1LOOPLEFTMOVAX,4CHINT21H;輸出1L1:MOVDL,1MOVAH,02HINT21HJMPSHLCODEENDSENDSTART運行結果:練習三:DATASEGMENTSUMDW?H

14、EHEDB?,?,?,?,?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,HEHEMOVBL,0MOVCX,5LOOP1:MOVAH,01HINT21HSUBAL,30HMOVSI,ALINCSILOOPLOOP1MOVCX,5MOVAX,0SUBSI,5LOOP2:ADDAL,SIAAAINCSILOOPLOOP2MOVBX,AXMOVSUM,AXMOVDL,BHADDDL,30HMOVAH,2INT21HMOVDL,BLADDDL,30HMOVAH,2INT21HMOVAH,4CHINT21HCO

15、DEENDSENDSTART運行結果:SHU1SHU2SHU3SHU4SHU5AVERSHUCHUMAXMINAVERAGECHUSHUHESTR1STR2DATASCODESDBQINGSHURU5GESHUJU,13,10,$DBDBDBDBDBDBDBDBDBDBDBDWDBDB4,4,4,4,4,3?,?,?,?,?,33333DUP(?)DUP(?)DUP(?)DUP(?)DUP(?)START:XUHOUDESHUJUZUIDAZHISHI,:SHI,SHI,SHUNXUSHI,:,$XIAOZHIZUIPINGJUNZHI100,1016DUP(30H)PINGJUNZHIDEE

16、RJINZHICHUANSHUCHU,:,$ENDSSEGMENTASSUMECS:CODES,DS:DATASMOVMOVMOVLEAAX,DATASDS,AXES,AXDX,SHURU;顯示QINGSHURU5GESHUJU:MOVAH,9INT21HMOVCX,5;輸入五個數字MOVSI,0INPUT:LEADX,SHU1+SI;輸入要排序的原始數據MOVAH,10INT21HMOVDL,10;輸入后換行MOVAH,2INT21HADDSI,5;指針加5,指向下一個變量LOOPINPUTCLDMOVCX,4;設定排序外循環(huán)次數A:MOVBP,0PUSHCX;外循環(huán)次數入棧PX:PUSHC

17、XMOVCX,3LEASI,SHUl+BP+2;逐位比較兩個數大小LEADI,SHUl+BP+7REPZCMPSBJBB;如果小于直接比較下一個數,否則兩個數對換位置MOVCX,3Jh:MOVAL,SHUlBP+2XCHGAL,SHU1BP+7;將兩個字節(jié)對換位置,循環(huán)3次即完成這兩個數的交換XCHGAL,SHUlBP+2INCBPLOOPJhSUBBP,3B:ADDBP,5;指向后面兩個數字POPCXLOOPPXPOPCX;外循環(huán)次數出棧LOOPALEADX,SHUCHU;輸出字符串PAIXUHOUDESHUJUSHUNXUSHI:MOVAH,9INT21HMOVCX,5MOVSI,2OUT

18、PUT:PUSHCX;計數器入棧實現循環(huán)嵌套MOVCX,3L:MOVAL,SHU1+SI;輸出排序后的5個數字MOVDL,ALMOVAH,2INT21HINCSILOOPLMOVDL,2CHMOVAH,2INT21HADDSI,2POPCX;計數器出棧LOOPOUTPUTMOVDL,10MOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HLEADX,MAX;輸出字符串ZUIDAZHISHI:MOVAH,9INT21HMOVCX,3MOVSI,2D:MOVDL,SHU5+SI;輸出最大值MOVAH,2INT21HINCSILOOPDMOVDL,10;換行MOVAH,2INT21

19、HMOVDL,0DHMOVAH,2INT21HLEADX,MIN;輸出字符串ZUIXIAOZHISHI:MOVAH,9INT21HMOVCX,3MOVSI,2E:MOVDL,SHU1+SI;輸出最小值MOVAH,2INT21HINCSILOOPEMOVDL,10MOVAH,2INT21HMOVDL,ODHMOVAH,2INT21HLEADX,AVERAGE;輸出字符串PINGJUNZHISHI:MOVAH,9INT21HMOVCX,3MOVBX,10;除數10MOVSI,2AD:MOVDX,0MOVAH,0PUSHCXMOVCX,3ZH:MOVAL,SHU2+SI;將十進制數轉換為二進制數,為

20、后面求平均值做準備SUBAL,30HPUSHAXMOVAX,DXMULBXMOVDX,AXPOPAXADDDX,AXINCSILOOPZH;執(zhí)行3次完成3個十進制數的轉換ADDSI,2POPCXADDHE,DX;將DX的數放在HE中LOOPAD;循環(huán)后得到三個十進制數轉換為二進制數之后的相加和MOVDX,HE;MOVAX,DXXORDX,DXMOVBX,3DIVBX;除3取平均值,結果將商放在AX中,余數放在DX中MOVBX,AX;給BX賦值平均數,然后將BX中表示的十進制數轉換為對應的字符串DIVCHUSHU;除100取最高位ADDAL,30H;轉換為ASCII碼MOVAVER,ALMOVA

21、L,AHXORAH,AHDIVCHUSHU+1;除10取十位ADDAL,30HADDAH,30H;余數就是個位MOVAVER+1,ALMOVAVER+2,AHMOVCX,3MOVSI,0F:MOVDL,AVER+SI;輸出平均值MOVAH,2INT21HINCSILOOPFMOVDL,10MOVAH,2INT21HMOVDL,0DHMOVAH,2INT21HLEADX,STR2;輸出字符串PINGJUNZHIDEERJINZHICHUANSHUCHU:MOVAH,9INT21HMOVCX,16MOVSI,0G:RCLBX,1;將平均數轉換為二進制串JNCHADDSTR1+SI,1;如果不為0就

22、將其加1變成1的ASCII碼值H:MOVDL,STR1+SI;將二進制串逐個輸出MOVAH,2INT21HINCSILOOPGMOVAH,4CHINT21HCODESENDSENDSTART運行結果:DOSBom0.74rCpuspeed:3000cycles,FrameskipOrProgram!DOSBOXL=IFormoreinformationreadthuREADMEfileinthuDOSBoxdirectory.HAUEFUM?TheDOSBoxTeam HYPERLINK Z:SETBLASTER=AZZ0I?DIH5T6Z:mountee:/workstudy/masmDri

23、ueEismountedaslocaldirectorye:/workstudy/masmZ:e:E:maopao.exeQINGSHURU5GESHUJU300E50280E40E60PAIXUHOUDESHUJUSHUNXUSHI:240,250,260,280,300,ZUIDAZHISHI:300ZUIXIAOZHISHI:Z40PIMGJUNZHISHI:Z63PIMGJUNZHIDEERJINZHICHUANSHUCHU:0000000100000111E:四實驗感想和收獲本次實驗相較于第一次難度增大了很多,本人花了大約12個小時才做完。第一個練習很簡單,從編譯到連接都是一次通過,

24、在用DEBUG調試發(fā)現結果卻實正確。不過在做第二個練習時我遇到了困難,完全沒有思路。當時不知道怎么對一位一位的數據進行操作,在看書的過程中無意中發(fā)現了循環(huán)指令,我才意識到用SHL指令可以實現這個功能。第三個聯(lián)系主要考查我們對中斷指令的了解程度,我實現地是一位數的加法,不過后來老師發(fā)給了我們他自己編的版本,我感慨道編程真是一門大學問,要考慮到各種各樣的功能,人機互動,可能出錯的地方。這都是需要大量的實踐積累才行。在編寫冒泡排序法這個程序時我遇到了很多困難。起初在編寫一段循環(huán)指令時,未把寄存器CX入宅,所以影響了其他部分的循環(huán)次數,導致結果出錯。所以今后編程時一定要把有用的信息入宅,防止被其他指令

25、所改變。在輸出字符時,必須記得把要輸出字符的值轉變成ASCI碼,我期初輸出數字時就忘記了這一步導致出了很多差錯。同時在將二進制數轉變成BCD嗎輸出時可以通過除10來實現,將得到的商繼續(xù)除10,而得到的余數就是個位的值,同理,再次除10得到的余數就是10位。所以通過適當此處的出發(fā)可以將二進制數轉變?yōu)锽CD碼。通過親身實踐這次試驗,對匯編語言編程有了初步的認識,也體會到了編程的整個過程。從讀題,設計程序框架到寫代碼,步步承接,同時將課堂上所學的知識運用起來,在加深理解的同時也發(fā)現了自己很多不懂的地方,于是通過自己查資料,問老師終于將程序一步步地調試正確得出期望的結果,那種自豪和滿足感油然而生。第三

26、次實驗8253定時器/計數器與接口實驗樂曲程序一功能說明計算機是如何產生音樂和聲響的呢?原來在計算機中有一個可編程時間間隔定時器8253,它能根據程序提供的計數值和工作模式,產生各種形狀和各種頻率的計數/定時脈沖,提供給系統(tǒng)的各個部件使用。它還可以產生不同頻率的脈沖作為揚聲器的聲源。在8253定時器內部有3個獨立工作的計數器:Counter0,Counterl,Countre2,每個計數器都分配有一個端口地址,分別是40H,41H,42H。8253內部還有一個公用的控制寄存器,端口地址為43H,端口地址輸入到8253的CS,A1,A0端,分別對三個計數器和控制器尋址。對8253編程時,先要設定

27、控制字,以選擇計數器,確定工作模式和計數值的格式,每個計數器由三個引腳與外部聯(lián)系,CLK為時鐘輸入端,GATA為門控制信號輸入端,OUT為計數/定時信號輸入端。每個計數器是以倒計數的方式計數,也就是說,從計數初值開始逐次減1,直到減為0為止。端口地址與計數器的關系:40H選中計數器0:作為定時器為系統(tǒng)日時鐘提供計時基準41H選中計數器1:作為定時器使用42H選中計數器2:用來控制揚聲器發(fā)聲43H公用的控制器:分別對三個寄存器和控制器尋址那么,如何觸動揚聲器發(fā)出聲音呢?原來PC機的主音箱上裝有一只小喇叭,由定時器8253和并行接口芯片8255(可編程外圍接口芯片)控制其發(fā)聲,8255包括三個8位

28、寄存器,兩個用于輸入功能,一個用于輸出功能。輸入寄存器分配的I/O端口地址為60H和62H,輸出寄存器分配的I/O端口地址為61H。8253定時器計數器2連接到揚聲器,其電路如下:8253DRIVER裝入計數器2的計數初值為533H(1.19318MHz/896Hz=1331=533H),這樣,得到的控制字為10110110B=0B6H,即選中計數器2,讀/寫,工作方式三(方波發(fā)聲器),二進制。計數器2的初始化程序為:MOVAL,0B6HOUT43H,AL1)計算計數值程序段:MOVDI,給定頻率MOVDX,12HMOVAX,34DCHDIVDIAX中即為計數值。2)打開揚聲器發(fā)聲,8255P

29、B0,PBI送出高電平:INAL,61HORAL,3OUT61H,AL3)關閉揚聲器,停止發(fā)聲:INAL,61HANDAL,OFCHOUT61H,AL兩只老虎的音頻表定義在數據段中,如下:STACKSEGMENTDW100DUP(?)STACKENDSDATASEGMENTMUSICDW2DUP(262,294,330,262)頻率表,1231;1231DW2DUP(330,349,392)DW2DUP(392,440,392,349,330,262)dw2dup(294,196,262),0;345;345;565431;565431;251;251,0表示結TIMEDW10DUP(250*

30、50),500*50,250*50,250*50,500*50;節(jié)拍表DW2DUP(120*50,120*50,120*50,120*50,250*50,250*50)DW2DUP(250*50,250*50,500*50)NEQU32;32個音符DATAENDS二.實驗目的:學習8253計數器2輸出方波信號用以驅動揚聲器發(fā)聲的原理,通過程序設置計數器2的輸出波形的頻率和延續(xù)時間,控制揚聲器的音調和發(fā)生長短。三實驗內容:1.設計程序讓微機演奏一段兩只老虎的樂曲。2思考如何讓PC機演奏一遍,兩遍以及數遍這段兩只老虎的樂曲,并修改程序實現。四實驗報告:整理出運行正確的源程序清單(加以中文注釋),并

31、給出詳細程序流程圖。三程序代碼DATASSEGMENTBGDBOAH,ODH,”TWOTIGER:$”FREQDW2DUP(262,294,330,262)DW2DUP(330,349,392)DW2DUP(392,440,392,349,330,262)DW2DUP(294,196,262),0;頻率表TIMEDW10DUP(250*50),500*50,250*50,250*50,500*50DW2DUP(120*50,120*50,120*50,120*50,250*50,250*50)DW2DUP(250*50,250*50,500*50)NUMDB3DATASENDSSTACKSEGMENTPARASTACKSTACKDB200DUP(?);堆棧段定義并分配存儲空間STACKENDSASSUMECS:CODE,DS:DATA,SS:STACKSTATPROCFARPUSHDS;DS中包含的是程序段前綴的起始地址MOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVDX,OFFSETBGMOVAH,09INT21H;輸出字符串“TWOTIGER”LP0:MOVSI,OFFSETFREQMOVBP,OFFSETTIMECALLSING;調用子程序,開始演奏DECNUMCMPNUM,0JNZLP0RETSTATENDPSINGPROCNEARPUSHDIPUSH

溫馨提示

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

評論

0/150

提交評論