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

下載本文檔

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

文檔簡介

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

2、若不正確可使用DEBUG的設置斷點,單步執(zhí)行等功能發(fā)現錯誤所在并加以改正。二程序流程圖 設置被除數、商的地址指針 設置單位除法次數計數器 取被除數一位作十進制調整 作字節(jié)除法、存商 N 被除數各位已除完? Y 顯示運算結果 結束 三程序代碼修改后的程序代碼如下:DATA SEGMENT A DB 9,6,8,7,5 B DB 5 C DB 5 DUP (0) N EQU 5 DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV AX,DATA MOV DS,AX MOV ES,AX CLD LEA SI,A LEA DI,

3、C MOV CX,N MOV AH,0LP1: LODSB AAD DIV B STOSB LOOP LP1 MOV CX,N LEA DI,CLP2: MOV DL,DI ADD DL,30H MOV AH,2 INT 21H INC DI LOOP LP2 MOV AH,4CH INT 21HCODE ENDSEND START四實驗感想和收獲通過這次試驗,我對微機原理上級試驗環(huán)境有了初步的認識,可以較為熟練地對匯編語言進行編譯,匯編及連接,同時也學會了用DEBUG調試程序,收獲很大。在這次試驗中我也遇到了一些困難。在剛開始我發(fā)現自己無法打開MASM.EXE,計算機提示是由于版本不兼容。我

4、這才想起來我的操作系統(tǒng)是64位的,和該軟件版本不兼容。不過我并沒有放棄,經過我的摸索之后,我發(fā)現用DOSBOX這個程序可以解決我的電腦運行不了該程序的問題。在解決了第一個難題后,我開始著手改正試驗1.3中的語法錯誤和邏輯錯誤,但是無論我怎么修改卻始終都無法通過編譯,并且基本上每句話都有編譯錯誤。根據我多年編程的經驗來看,這應該是中文輸入法在搞鬼,之后我耐心地把程序重新輸了一遍,果然通過了編譯,并且之后的連接也進行的很順利。在用DEBUG調試時發(fā)現得出的結果也很正確。盡管這次的實驗內容非常簡單,僅僅是教會我們一些基本的操作,但我卻明顯感覺到了匯編語言和C語言等高級語言所不同的地方。越是底層,基礎

5、的東西就越不人性化,用C語言一行代碼就能實驗的功能在匯編語言中可能要花上數十行。看來匯編語言的學習不是幾周就能速成的,必須要有長年累月的積淀才能掌握。 實驗二 設計匯編語言程序一功能說明練習1. 實驗題目:編程計算下列表達式:A=90,B=-70,C=5,Y均為有符號數,計算Y=2(A+B)+(AC)5要編寫一些稍微復雜的程序,我們會遇到一段程序被反復執(zhí)行,這樣,我們會用到LOOP指令。使用該指令時,需在CX中裝入循環(huán)次數。練習2.碼轉換程序設計編制程序,把十進制數15786轉化成二進制數。提示:15786=110101010+510+710+810+6,循環(huán)CX=5練習3.編制程序,從鍵盤輸

6、入最多5個數,求他們的和,存入SUM。練習4.用“冒泡“法對一組數300,250,280,240,260,按從小到大的順序排列。提示:用冒泡的方法對一組數據元素排序,它的基本方法是:將相鄰的兩個元素通過比較進行排序,通過多次,多遍的鄰元素排序,實現整個一組數的排序。對于5(N)個元素,整個排序通過4遍(=N-1)鄰元素排序完成。每一遍的排序由若干次鄰元素的排序組成。4遍排序中,鄰元素的排序依次為4,3,2,1遍。完成第一遍排序后,最大數沉底,已經到達它應占據的位置,不需要參加下一遍的排序。外循環(huán)的次數為CX=4次(N-1),內循環(huán)的次數為4,3,2,1(DEC CX)排序遍數本遍排序前第一次排

7、序后第二次排序后第三次排序后第四次排序后1300,250,280,240,260250,300,280,240,260250,280,300,240,260250,280,240,300,260250,280,240,260,3002250,280,240,260,300250,280,240,260,300250,240,280,260,300250,240,260,280,3003250,240,260,280,300250,240,260,280,300240,250,260,280,3004240,250,260,280,300240,250,260,280,300實驗要求:1. 編制

8、程序,從鍵盤輸入300,250,280,240,260這五個數,并思考如何輸入任意五個數,五個數可以有一位數,二位數,三位數,四位數,五位數,混合輸入比較大小;2. 對這組數用冒泡法進行排序,并輸出原始數據及排序后數據,兩兩數據之間用空格分隔;3. 利用DEBUG調試工具,用D0命令,查看排序前后,內存數據的變化,以及會用調試命令查看程序運算中寄存器中的值;4. 去掉最大和最小的兩個值,求出其余值的平均值,并輸出最大值,最小值和平均值;5. 用壓棧PUSH和出棧POP指令“先進后出”的特點,設計算法將平均值按位逐個輸出(即輸出263);6. 用移位指令將平均值以二進制串的形式輸出。7. 設計程

9、序要有模塊化的思想,用子程序實現不同的功能;所有數據輸出前要用字符串的輸出指令,進行輸出提示(如:zui da zhi shi : 300等),所有數據結果能清晰地顯示在電腦屏幕上。二程序流程圖三程序代碼練習一:DATA SEGMENTA DB 90B DB -70C DB 5Y DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BL,A MOV CL,B ADD BL,CL ;A+B MOV AL,02H IMUL BL ;2*(A+B) MOV BX,AX MOV AL,A MOV

10、 CL,C IMUL CL ;A*C IDIV CL ;A*C/5 ADD AX,BX MOV Y,AX MOV AH,4CH INT 21HCODE ENDS END START練習二:DATA SEGMENTA DW 15786DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BX,A MOV CX,16LEFT: TEST BX,8000H JNZ L1 ;當首位為1,執(zhí)行L1 MOV DL,0 ;輸出0 MOV AH,02H INT 21HSHL: SHL BX,1 LOOP LEFT

11、 MOV AX,4CH INT 21HL1: MOV DL,1 ;輸出1 MOV AH,02H INT 21H JMP SHLCODE ENDS END START運行結果:練習三:DATA SEGMENTSUM DW ?HEHE DB ?,?,?,?,?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,HEHE MOV BL,0 MOV CX,5LOOP1: MOV AH,01H INT 21H SUB AL,30H MOV SI,AL INC SI LOOP LOOP1 MOV CX

12、,5 MOV AX,0 SUB SI,5LOOP2: ADD AL,SI AAA INC SI LOOP LOOP2 MOV BX,AX MOV SUM,AX MOV DL,BH ADD DL,30H MOV AH,2 INT 21H MOV DL,BL ADD DL,30H MOV AH,2 INT 21H MOV AH,4CH INT 21HCODE ENDS END START運行結果:冒泡排序法程序:DATAS SEGMENTSHURU DB QING SHU RU 5 GE SHU JU,13,10,$SHU1 DB 4,?,3 DUP(?)SHU2 DB 4,?,3 DUP(?)S

13、HU3 DB 4,?,3 DUP(?)SHU4 DB 4,?,3 DUP(?)SHU5 DB 4,?,3 DUP(?)AVER DB 3 DUP(?)SHUCHU DB PAI XU HOU DE SHU JU SHUN XU SHI,:,$MAX DB ZUI DA ZHI SHI,:,$MIN DB ZUI XIAO ZHI SHI,:,$AVERAGE DB PING JUN ZHI SHI,:,$CHUSHU DB 100,10HE DW ?STR1 DB 16 DUP(30H)STR2 DB PING JUN ZHI DE ER JIN ZHI CHUAN SHU CHU,:,$DA

14、TAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX MOV ES,AX LEA DX,SHURU;顯示QING SHU RU 5 GE SHU JU: MOV AH,9 INT 21H MOV CX,5;輸入五個數字 MOV SI,0INPUT: LEA DX,SHU1+SI;輸入要排序的原始數據 MOV AH,10 INT 21H MOV DL,10;輸入后換行 MOV AH,2 INT 21H ADD SI,5;指針加5,指向下一個變量 LOOP INPUT CLD MOV CX,4;設定排

15、序外循環(huán)次數A: MOV BP,0 PUSH CX;外循環(huán)次數入棧PX: PUSH CX MOV CX,3 LEA SI,SHU1+BP+2;逐位比較兩個數大小 LEA DI,SHU1+BP+7 REPZ CMPSB JB B;如果小于直接比較下一個數,否則兩個數對換位置 MOV CX,3Jh: MOV AL,SHU1BP+2 XCHG AL,SHU1BP+7;將兩個字節(jié)對換位置,循環(huán)3次即完成這兩個數的交換 XCHG AL,SHU1BP+2 INC BP LOOP Jh SUB BP,3B: ADD BP,5;指向后面兩個數字 POP CX LOOP PX POP CX;外循環(huán)次數出棧 LO

16、OP A LEA DX,SHUCHU;輸出字符串PAI XU HOU DE SHU JU SHUN XU SHI: MOV AH,9 INT 21H MOV CX,5 MOV SI,2OUTPUT:PUSH CX;計數器入棧實現循環(huán)嵌套 MOV CX,3L: MOV AL,SHU1+SI;輸出排序后的5個數字 MOV DL,AL MOV AH,2 INT 21H INC SI LOOP L MOV DL,2CH MOV AH,2 INT 21H ADD SI,2 POP CX;計數器出棧 LOOP OUTPUT MOV DL,10 MOV AH,2 INT 21H MOV DL,0DH MOV

17、 AH,2 INT 21H LEA DX,MAX;輸出字符串ZUI DA ZHI SHI: MOV AH,9 INT 21H MOV CX,3 MOV SI,2 D: MOV DL,SHU5+SI;輸出最大值 MOV AH,2 INT 21H INC SI LOOP D MOV DL,10;換行 MOV AH,2INT 21H MOV DL,0DH MOV AH,2 INT 21H LEA DX,MIN;輸出字符串ZUI XIAO ZHI SHI: MOV AH,9 INT 21H MOV CX,3 MOV SI,2 E: MOV DL,SHU1+SI;輸出最小值 MOV AH,2 INT 2

18、1H INC SI LOOP E MOV DL,10 MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H LEA DX,AVERAGE;輸出字符串PING JUN ZHI SHI: MOV AH,9 INT 21H MOV CX,3 MOV BX,10;除數10 MOV SI,2 AD: MOV DX,0 MOV AH,0 PUSH CX MOV CX,3 ZH: MOV AL,SHU2+SI;將十進制數轉換為二進制數,為后面求平均值做準備 SUB AL,30H PUSH AX MOV AX,DX MUL BX MOV DX,AX POP AX ADD D

19、X,AX INC SI LOOP ZH;執(zhí)行3次完成3個十進制數的轉換 ADD SI,2 POP CX ADD HE,DX;將DX的數放在HE中 LOOP AD;循環(huán)后得到三個十進制數轉換為二進制數之后的相加和 MOV DX,HE; MOV AX,DX XOR DX,DX MOV BX,3 DIV BX;除3取平均值,結果將商放在AX中,余數放在DX中 MOV BX,AX;給BX賦值平均數,然后將BX中表示的十進制數轉換為對應的字符串 DIV CHUSHU;除100取最高位 ADD AL,30H;轉換為ASCII碼 MOV AVER,AL MOV AL,AH XOR AH,AH DIV CHU

20、SHU+1;除10取十位 ADD AL,30H ADD AH,30H;余數就是個位 MOV AVER+1,AL MOV AVER+2,AH MOV CX,3 MOV SI,0 F: MOV DL,AVER+SI;輸出平均值 MOV AH,2 INT 21H INC SI LOOP F MOV DL,10 MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H LEA DX,STR2 ;輸出字符串PING JUN ZHI DE ER JIN ZHI CHUAN SHU CHU: MOV AH,9INT 21H MOV CX,16 MOV SI,0 G: RCL

21、BX,1;將平均數轉換為二進制串 JNC H ADD STR1+SI,1;如果不為0就將其加1變成1的ASCII碼值 H: MOV DL,STR1+SI;將二進制串逐個輸出 MOV AH,2 INT 21H INC SI LOOP G MOV AH,4CH INT 21HCODES ENDS END START運行結果:4 實驗感想和收獲 本次實驗相較于第一次難度增大了很多,本人花了大約12個小時才做完。第一個練習很簡單,從編譯到連接都是一次通過,在用DEBUG調試發(fā)現結果卻實正確。不過在做第二個練習時我遇到了困難,完全沒有思路。當時不知道怎么對一位一位的數據進行操作,在看書的過程中無意中發(fā)現

22、了循環(huán)指令,我才意識到用SHL指令可以實現這個功能。第三個聯系主要考查我們對中斷指令的了解程度,我實現地是一位數的加法,不過后來老師發(fā)給了我們他自己編的版本,我感慨道編程真是一門大學問,要考慮到各種各樣的功能,人機互動,可能出錯的地方。這都是需要大量的實踐積累才行。在編寫冒泡排序法這個程序時我遇到了很多困難。起初在編寫一段循環(huán)指令時,未把寄存器CX入宅,所以影響了其他部分的循環(huán)次數,導致結果出錯。所以今后編程時一定要把有用的信息入宅,防止被其他指令所改變。在輸出字符時,必須記得把要輸出字符的值轉變成ASCI碼,我期初輸出數字時就忘記了這一步導致出了很多差錯。同時在將二進制數轉變成BCD嗎輸出時

23、可以通過除10來實現,將得到的商繼續(xù)除10,而得到的余數就是個位的值,同理,再次除10得到的余數就是10位。所以通過適當此處的出發(fā)可以將二進制數轉變?yōu)锽CD碼。通過親身實踐這次試驗,對匯編語言編程有了初步的認識,也體會到了編程的整個過程。從讀題,設計程序框架到寫代碼,步步承接,同時將課堂上所學的知識運用起來,在加深理解的同時也發(fā)現了自己很多不懂的地方,于是通過自己查資料,問老師終于將程序一步步地調試正確得出期望的結果,那種自豪和滿足感油然而生。 第三次實驗 8253定時器/計數器與接口實驗 樂曲程序 一功能說明計算機是如何產生音樂和聲響的呢?原來在計算機中有一個可編程時間間隔定時器8253,它

24、能根據程序提供的計數值和工作模式,產生各種形狀和各種頻率的計數/定時脈沖,提供給系統(tǒng)的各個部件使用。它還可以產生不同頻率的脈沖作為揚聲器的聲源。在8253定時器內部有3個獨立工作的計數器:Counter0, Counter1, Countre2,每個計數器都分配有一個端口地址,分別是40H,41H,42H。8253內部還有一個公用的控制寄存器,端口地址為43H,端口地址輸入到8253的CS,A1,A0端,分別對三個計數器和控制器尋址。對8253編程時,先要設定控制字,以選擇計數器,確定工作模式和計數值的格式,每個計數器由三個引腳與外部聯系,CLK為時鐘輸入端,GATA為門控制信號輸入端,OUT

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

26、53定時器計數器2連接到揚聲器,其電路如下: 8253 DRIVER 1.9318MHZ CLK 喇叭與門門22門1門 OUT2 8255 PB0 GATE2 PB1 裝入計數器2的計數初值為533H(1.19318MHz/896Hz=1331=533H),這樣,得到的控制字為10110110B=0B6H,即選中計數器2,讀/寫,工作方式三(方波發(fā)聲器),二進制。計數器2的初始化程序為: MOV AL,0B6H OUT 43H,AL 1) 計算計數值程序段:MOV DI, 給定頻率 MOV DX, 12HMOV AX, 34DCHDIV DIAX中即為計數值。2) 打開揚聲器發(fā)聲,8255PB

27、0,PBI送出高電平:IN AL , 61HOR AL , 3OUT 61H , AL3)關閉揚聲器,停止發(fā)聲:IN AL ,61HAND AL , 0FCHOUT 61H, AL 兩只老虎的音頻表定義在數據段中,如下:STACK SEGMENT DW 100 DUP(?)STACK ENDSDATA SEGMENTMUSIC DW 2 DUP(262,294,330,262) ; 頻率表,1231;1231 DW 2 DUP(330,349,392) ;345;345; DW 2 DUP(392,440,392,349,330,262) ;565431;565431 dw 2 dup(294

28、,196,262),0 ;251;251,0表示結束 TIME DW 10 DUP(250*50),500*50,250*50,250*50,500*50 ;節(jié)拍表 DW 2 DUP(120*50,120*50,120*50,120*50,250*50,250*50) DW 2 DUP(250*50,250*50,500*50)N EQU 32 ;32個音符DATA ENDS二實驗目的: 學習8253計數器2輸出方波信號用以驅動揚聲器發(fā)聲的原理,通過程序設置計數器2的輸出波形的頻率和延續(xù)時間,控制揚聲器的音調和發(fā)生長短。三.實驗內容:1.設計程序讓微機演奏一段兩只老虎的樂曲。2.思考如何讓PC

29、機演奏一遍,兩遍以及數遍這段兩只老虎的樂曲,并修改程序實現。四.實驗報告:整理出運行正確的源程序清單(加以中文注釋),并給出詳細程序流程圖。三程序代碼DATAS SEGMENTBG DB 0AH,0DH,”TWO TIGER:$” FREQ DW 2 DUP(262,294,330,262) DW 2 DUP(330,349,392) DW 2 DUP(392,440,392,349,330,262) DW 2 DUP(294,196,262),0 ;頻率表TIME DW 10 DUP(250*50),500*50,250*50,250*50,500*50 DW 2 DUP(120*50,12

30、0*50,120*50,120*50,250*50,250*50) DW 2 DUP(250*50,250*50,500*50) NUM DB 3DATAS ENDSSTACK SEGMENT PARA STACK STACK DB 200 DUP(?) ;堆棧段定義并分配存儲空間STACK ENDS ASSUME CS:CODE,DS:DATA,SS:STACKSTAT PROC FAR PUSH DS ;DS中包含的是程序段前綴的起始地址 MOV AX,0 PUSH AX MOV AX ,DATA MOV DS,AX MOV DX,OFFSET BG MOV AH,09 INT 21H ; 輸出字符串“TWO TIGER”LP0: MOV SI,OFFSET FREQ MOV BP,OFFSET TIME CALL SING ;調用子程序,開始演奏 DEC NUM CMP NUM,0 JNZ LP0 RETSTAT ENDPSING PROC NEAR ;演奏子程序 PUSH DI PUSH SI PUSH BP PUSH BXREPTO: MOV DI,SI ;DI指向頻率表首地址 CMP DI,0 JE END_SING 若DI=0,則演奏結束 MOV BX,DS:BP CALL SOUND ADD SI,2 ADD BP,2 JMP REPTOEN

溫馨提示

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

評論

0/150

提交評論