




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2/19《微機原理與接口技術實驗報告》學院:電氣信息學院班級:109班老師:羅江陶學號:1143031270姓名:實驗一匯編語言程序的上機步驟實驗目的:1、了解匯編語言程序的執行流程。2、熟悉和使用DEBUG調試工具,分析和讀懂一些與硬件相關的小程序。3、通過對程序的分析,理解計算機程序的執行過程。4、了解并逐步熟悉匯編語言的編輯方法及特點.5、復習8086匯編語言的段結構、常用的指令與偽指令、存儲空間的分配等。6、掌握匯編語言的編輯、匯編及連接的過程。7、了解并逐步掌握運用DEBUG進行調試匯編語言程序二、實驗內容:以文件名為1.asm源程的序為例,學習匯編語言的上機步驟。匯編語言程序MASM軟件由EDIT.COM編輯器,匯編MASM.EXE程序,連接LINK.EXE程序以及DUEBUG.EXE調試程序四個部分組成。匯編語言編制完成后,在計算機上的操作過程就分為四個階段。1.編輯EDIT.COM:首先輸入源程序:在記事本里錄入,注意在保存時文件格式必須選擇所有文件,文件后綴名為.ASM,即保存時文件名為XXX.asm。2.用匯編程序MASM.Exe對源程序.ASM文件匯編,生成目標文件.OBJ:雙擊MASM軟件中的MASM.Exe文件框,在命令行后鍵入源程序名XXX.asm,(如果源程序與MASM軟件在同一路徑下,可以只鍵入文件名,而不要后綴)3.連接LINK.EXE雙擊MASM軟件中的LINK.Exe文件框,在命令行后鍵入目標文件名XXX.OBJ(如果源程序,目標文件與MASM軟件在同一路徑下,可以只鍵入文件名,而不要后綴)如果連接沒有錯誤,就會產生一個XXX.EXE的可執行文件,如果.OBJ文件有錯誤,連接時會指出錯誤的原因。4.運行和調試DEBUG.exe運行可執行文件,即雙擊XXX.EXE文件框即可,或在DOS下運行此程序,E:\XXX.EXE。程序流程圖:匯編程序匯編匯編語言源程序編輯程序匯編程序匯編匯編語言源程序編輯程序編輯匯編語言源文件機器語言執行文件連接程序機器語言執行文件連接程序連接機器語言目標文件結果計算機結果計算機程序清單與注釋:DATA SEGMENTNUM1 DB 35,35HNUM2 DW35,35HNUM3 DB 4DUP(34,3DUP(34H))NUM4 DB'34AB' NUM5 DW'34','AB'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETNUM1MOVAL,[BX]MOVBX,OFFSETNUM5MOVAX,[BX]MOVAH,4CHINT21HCODEENDSENDSTART五、運行結果:將以上程序在筆記本中保存為xueyuan1.ASM編譯后顯示編譯成功:運行結果如下:運行可執行文件出現此界面后“閃退”六、實驗心得:通過本次實驗,我了解了一個匯編程序在計算機上的執行步驟,如何實現一個匯編程序的編輯、連接、運行。能看懂一些十分簡單的匯編小程序。匯編語言是一種面向機器的“低級”語言,是計算機能夠提供給用戶的最快而最有效的語言,也是能夠利用計算機所有硬件特性并能直接控制硬件的唯一語言。要真正理解計算機的工作過程,理解計算機程序的執行過程,就必須學習匯編語言。也正是因為如此,匯編語言程序設計是計算機專業和電子,自動控制等相關專業的重要課程。實驗二匯編語言程序設計循環結構程序一、實驗目的:1.理解8086各種指令的功能。2.進一步學習程序的調試。3.掌握循環結構程序的設計編程。二、實驗內容:用“冒泡“法對一組數300,250,280,240,260,按從小到大的順序排列。提示:用冒泡的方法對一組數據元素排序,它的基本方法是:將相鄰的兩個元素通過比較進行排序,通過多次,多遍的鄰元素排序,實現整個一組數的排序。對于5(N)個元素,整個排序通過4遍(=N-1)鄰元素排序完成。每一遍的排序由若干次鄰元素的排序組成。4遍排序中,鄰元素的排序依次為4,3,2,1遍。完成第一遍排序后,最大數沉底,已經到達它應占據的位置,不需要參加下一遍的排序。外循環的次數為CX=4次(N-1),內循環的次數為4,3,2,1(DECCX)排序遍數本遍排序前第一次排序后第二次排序后第三次排序后第四次排序后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. 編制程序,從鍵盤輸入300,250,280,240,260這五個數,并思考如何輸入任意五個數,五個數可以有一位數,二位數,三位數,四位數,五位數,混合輸入比較大小;2. 對這組數用冒泡法進行排序,并輸出原始數據及排序后數據,兩兩數據之間用空格分隔;3. 利用DEBUG調試工具,用D0命令,查看排序前后,內存數據的變化,以及會用調試命令查看程序運算中寄存器中的值;4. 去掉最大和最小的兩個值,求出其余值的平均值,并輸出最大值,最小值和平均值;5. 用壓棧PUSH和出棧POP指令“先進后出”的特點,設計算法將平均值按位逐個輸出(即輸出263);6. 用移位指令將平均值以二進制串的形式輸出。7. 設計程序要有模塊化的思想,用子程序實現不同的功能;8. 所有數據輸出前要用字符串的輸出指令,進行輸出提示(如:zuidazhishi:300等),所有數據結果能清晰地顯示在電腦屏幕上。三、程序流程圖:開始開始從鍵盤輸入待排序的字符從鍵盤輸入待排序的字符調用子程序SRZH調用子程序SRZH(輸入轉化)進行轉化,循環5次調用子程序XS調用子程序XS(顯示)進行未排序的數據顯示,循環5次調用子程序PAIXU調用子程序PAIXU(排序)進行排序調用子程序XS調用子程序XS(顯示)進行排序后結果顯示,循環5次輸出最大值輸出最大值,其中SI要進行加8處理后指向排在最后的最大值,輸出最小值輸出最小值,其中SI指向VAR就了個輸出最小值取中間三個數據,相加起來除以3,取中間三個數據,相加起來除以3,輸出去掉最大最小值的平均值采用不斷除以二并壓入棧的方式得到數據的二進制表示,并輸出采用不斷除以二并壓入棧的方式得到數據的二進制表示,并輸出子程序有:SRZH(輸入轉化)子程序,XS(顯示)子程序,PAIXU(排序)子程序。四、程序清單與注釋:DSEGSEGMENTSRDB40,?,20DUP(?)VARDW5DUP(0)AVGDW?MDW10PDW3DDW2SHURUDB'QINGSHURUSHUJU:','$'XS1DB0DH,0AH,'YUANSHISHUJU:','$'XS2DB0DH,0AH,'PAIXUHOUSHUJU:','$' XS3 DB 0DH,0AH,'ZUIDAZHISHI:','$' XS4 DB 0DH,0AH,'ZUIXIAOZHISHI:','$'XS5DB0DH,0AH,'PINGJUNZHISHI:','$'XS6DB0DH,0AH,'ERJINZHIPINGJUNZHISHI:','$'DSEGENDSSTACK SEGMENT DW 100DUP(?)STACKENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,SS:STACK,ES:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVES,AXMOV DX,OFFSETSHURU ;顯示輸入的提示符 MOV AH,09H INT 21HLEADX,SRMOVAH,0AH;輸入待排序的字符INT21HCLDMOV CX,5 LEA SI,SRADDSI,2LEADI,VARLOOPS: CALL SRZH ;調用子程序SRZH進行轉化 LOOP LOOPS ;循環5次MOV DX,OFFSETXS1 ;顯示未排序的提示符 MOV AH,09H INT 21H MOV CX,5 LEA SI,VARLOOP1: CALL XS ;調用子程序XS進行未排序的數據顯示 LOOP LOOP1 ;循環5次CLDMOVCX,4MOVDX,1LOOP2:CALLPAIXU;調用子程序PAIXU進行排序INCDXLOOPLOOP2MOV DX,OFFSETXS2 MOV AH,09H INT 21H MOV CX,5 ;計數寄存器CX置5才能顯示5個數 LEA SI,VARLOOP3:CALLXS;調用子程序XS進行排序后結果顯示LOOPLOOP3MOV DX,OFFSETXS3;輸出最大值 MOV AH,09H INT 21H LEA SI,VARADDSI,8 ;SI要進行加8處理后指向排在最后的最大值 CALL XSMOV DX,OFFSETXS4;輸出最小值 MOV AH,09H INT 21H LEA SI,VAR CALLXSMOVDX,OFFSETXS5;輸出去掉最大最小值的平均值 MOV AH,09H INT 21HMOVAX,[SI] MOVBX,[SI+2] ;取第二個數據 ADD AX,BX MOVBX,[SI+4] ;取第三個數據(這樣相加相當于去掉了最大最小值) ADD AX,BXCWDIDIVP ;把相加和除以三來求得平均值LEASI,AVG MOV[SI],AX ;把求得的平均值存入AVGCALLXSMOVDX,OFFSETXS6;輸出2進制的平均數 MOV AH,09H INT21H MOV CX,16 LEA SI,AVG MOV AX,[SI]LP2: CWD IDIV D;采用不斷除以二并壓入棧的方式得到數據的二進制表示方式 PUSH DX LOOPLP2 MOV CX,16LP3: POP DX ADD DL,30H ;將數據彈出站并且加30H進行ASCII的轉換顯示 MOV AH,2 INT 21H LOOP LP3MOVAH,4CHINT21HSRZHPROC;輸入轉化子程序MOVBX,2;BX取2,可以循環3次,相當于把3個字節的數轉化為1個字MOVDX,0ZH1:MOVAX,0LODSB;從SR串中讀出數據SUBAL,30HADDDX,AXMOVAX,DXMULMMOVDX,AXDECBXJNZZH1MOVAX,DXSTOSW;把字數據以16進制存入VAR數據串中INCSIINCSI;跳過3位數后面的空格或逗號RET;輸入轉化子程序結束SRZHENDPXS PROC ;顯示子程序 LODSW MOV BX,3 ;數據在十進制時的是三位數所以計數部分BX置三ZL1: CWD IDIVM ;采用除以16的方法不斷得到每一位數 PUSH DX ;將每一位壓入棧 DEC BX JNZ ZL1 MOV BX,3ZL2: POP DX ;壓完一個數后立即出棧進行顯示 ADD DL,30H DEC BX MOV AH,2 INT 21H JNZ ZL2MOVDL,20H ;每個數據間由空格隔開MOVAH,2 INT 21H RET ;顯示子程序結束XS ENDPPAIXUPROC;排序子程序PUSHCXMOVCX,5SUBCX,DXMOVSI,0RECMP:MOVAX,VAR[SI]CMPAX,VAR[SI+2]JLENOCHXCHGAX,VAR[SI+2]XCHGAX,VAR[SI]NOCH:INCSIINCSILOOPRECMPPOPCXRET;排序子程序結束PAIXUENDPCSEGENDSENDSTART五、運行結果:六、實驗心得:因為很容易出錯,編輯的錯誤很容易找,通過masm.exe和edit.exe就能找到。難的是算法和邏輯上的錯誤,看了很多遍程序總覺得沒有錯誤,但是就是1個小問題就導致全部出錯,比如我的這個程序里的SRZH(輸入轉化)子程序最后是有2行的INCSI,相當于SI加了2,就直接跳過數中間的空格或者逗號,但是如果只加了1行的話,程序能運行,但是最后輸出的全是亂碼。實驗三8253定時器/計數器與接口實驗樂曲程序一、實驗目的:學習8253計數器2輸出方波信號用以驅動揚聲器發聲的原理,通過程序設置計數器2的輸出波形的頻率和延續時間,控制揚聲器的音調和發生長短。二、實驗內容:1.設計程序讓微機演奏一段兩只老虎的樂曲。2.思考如何讓PC機演奏一遍,兩遍以及數遍這段兩只老虎的樂曲,并修改程序實現。三、程序流程圖:讀取8253計數初值和音長讀取8253計數初值和音長8253置初值開啟與門和8253GATE延時關閉與門和8253GATE返回四、程序清單與注釋:DATASSEGMENTDATASENDSSTACKSEGMENTPARASTACK'STACK'SSSDW100DUP(?);堆棧段代碼STACKENDSCODESSEGMENTASSUMECS:CODES,DS:DATASSTART:MOVAH,1INT21HMOVAH,0SUBAX,30HMOVCX,AXAGAIN:PUSHCXMOVAX,DATASMOVDS,AXMOVCX,2A:MOVBX,262 ;兩只老虎CALLYINYUEMOVBX,294CALLYINYUEMOVBX,330CALLYINYUEMOVBX,262CALLYINYUEMOVBX,50CALLDELAYLOOPAMOVCX,2A1:MOVBX,330;跑得快CALLYINYUEMOVBX,349CALLYINYUEMOVBX,392CALLYINYUEMOVBX,250CALLDELAYLOOPA1MOVCX,2A2:MOVBX,392;一只沒有耳朵,一直沒有尾巴CALLYINYUE1MOVBX,440CALLYINYUE1MOVBX,392CALLYINYUE1MOVBX,349CALLYINYUE1MOVBX,330CALLYINYUEMOVBX,262CALLYINYUEMOVBX,50CALLDELAYLOOPA2MOVCX,2A3:MOVBX,294;真奇怪CALLYINYUEMOVBX,196CALLYINYUEMOVBX,262CALLYINYUEMOVBX,250CALLDELAYLOOPA3POPCXDECCXCMPCX,0JNZAGAINMOVAH,4CHINT21HYINYUEPROCNEARMOVAX,34DCH;輸出音符的特定頻率MOVDX,12HDIVBXOUT42H,ALMOVAL,AHOUT42H,ALINAL,61H;開揚聲器ORAL,3OUT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高層建筑施工材料供應計劃
- 地下室砌筑防潮措施與設計
- 公共交通設施玻璃門施工流程
- 銷售團隊案例分析提升業績心得體會
- 文化產業行政后勤崗位職責
- 房地產公司戰略規劃職責
- 房地產公司綜合辦公室安全職責
- 隧道施工管理措施及其環境保護方案
- 親子教育培訓創業計劃書
- 大學英語課程線上線下混合教學方案
- 2025屆遼寧省葫蘆島市第二次模擬考試二模英語試題(原卷版+解析版)
- 2025新疆交投集團所屬子公司招56人筆試參考題庫附帶答案詳解
- 2025-2030年中國銅合金散熱器材料行業市場現狀供需分析及投資評估規劃分析研究報告
- 醫療器械銷售流程與技巧
- 黑龍江省農村信用社聯合社員工招聘考試真題2024
- 2025上海車展專題報告
- 紡織承包合同協議書
- 軟件轉讓合同協議書
- 2025年北京市豐臺區中考數學一模試卷
- 續簽采購合同范本(標準版)
- 智能垃圾分類箱項目投資商業計劃書范本(投資融資分析)
評論
0/150
提交評論