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

付費下載

下載本文檔

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

文檔簡介

微機原理實驗報告班級:電氣93姓名:黨堯學號:09041059實驗一:順序程序的設計實驗目的:學習8086/8088指令系統(tǒng)中一些基本指令的用法和程序設計的基本方法。熟悉在PC機上建立、匯編、鏈接、調試和運行8086、8088匯編語言程序的全過程。實驗內容:設a、b、c、d四個數(shù)分別以膽子解壓縮BCD碼形式存放在內存NUM開始的四個單元,計算(a+b)-(c+d)并將結果放在Y1單元,將結果在屏幕上顯示出來。 在DEBUG中,不斷改變a,b,c,d內容并查看結果。a=09,b=06,c=04,d=07a=38,b=41,c=29,d=34a=70,b=23,c=42,d=41a=63,b=73,c=62,d=50程序框架:DESG SEGMENT :定義數(shù)據段NUM DB 13H,27H,11H,12H :定義a,b,c,dY1 DB ?DSEG ENDS :數(shù)據段定義結束SSEG SEGMENTPARASTACK :定義堆棧段DB 20 DUP(?)SSEG ENDS :堆棧段定義結束CSEG SEGMENT :定義代碼段ASSUME CS:CSEG,DS:DSEG,SS:SSEG :各段定義START: MOV AX,DSEG MOV DS,AX :數(shù)據段段地址送DS MOV AX,SSEG MOV SS,AX :堆棧段段地址送SS根據程序流程編制計算(a+b)-(c+d)的指令序列,結果送AL將變成提示中,單字節(jié)壓縮BCD碼顯示程序放于此MOV AX,4C00HINT 21H CSEG ENDS END START程序內容:DSEGSEGMENTNUMDB13H,27H,11H,12HY1DB?DSEGENDSSSEGSEGMENTPARASTACKDB20DUP(?)SSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,SSEGMOV SS,AXMOV AL,NUM :數(shù)據a送ALADD AL,NUM+1 :將a+b存儲到ALDAA :壓縮BCD碼加法調整MOV CL,AL :保存AL內容MOV AL,NUM+2 :數(shù)據c送ALADD AL,NUM+3 :將c+d存儲到ALDAA :壓縮BCD碼加法調整SUB CL,AL :將(a+b)-(c+d)存儲到CLMOV AL,CL :CL送ALDAS :壓縮BCD碼減法調整MOV Y1,AL :送出結果顯示壓縮BCD碼:MOV BL,AL :保存AL中的內容AND AL,0F0H :取AL中高四位MOV CL,4SHR AL,CL :BCD碼高位移到低位ADD AL,30H :(AL)加30H得ASCII碼MOV DL,ALMOV AH,02HINT 21H :顯示(DL)MOV AL,BL :恢復(AL)AND AL,0FH :取(AL)低四位ADD AL,30H :(AL)30H得ASCII碼MOV DL,ALMOV AH,02HINT 21H :顯示(DL)返回DOS : MOV AX,4C00HINT 21HCSEGENDSENDSTART實驗分析:運用debug程序的-u命令可見程序反匯編內容:之后用–g及–r命令可觀察每一步程序進行后AL中存儲內容的變化: 0BD9:0000 B8D60B MOV AX,0BD6 0BD9:0003 8ED8 MOV DS,AX 0BD9:0005 B8D70B MOV AX,0BD7 0BD9:0008 8ED0 MOV SS,AX 0BD9:000A A00000 MOV AL,[0000] :AL=13 0BD9:000D 02060100 ADD AL,[0001] :AL=3A 0BD9:0011 27 DAA :AL=40 0BD9:0012 8AC8 MOV CL,AL 0BD9:0014 A00200 MOV AL,[0002] :AL=11 0BD9:0017 02060300 ADD AL,[0003] :AL=23 0BD9:001B 27 DAA :AL=23 08D9:001C 2AC8 SUB CL,AL 0BD9:001E 8AC1 MOV AL,CL :AL=1D 0BD9:0020 2F DAS :AL=17 08D9:0021 A20400 MOV [0004],AL-g24后-r命令可見: AX=0B17 BX=0000 CX=0012 DX=0000 SP=0014 BP=0000 SI=0000 DS=0BD6 SS=0BD7 CS=0BD9 IP=0024可知此時程序已將(a+b)-(c+d)結果17存入到AL中。每組數(shù)據實驗程序運行結束后,應用–e命令更改a,b,c,d數(shù)值繼續(xù)進行實驗內容:-e0000得到:0BD6:0000 13.鍵入新的a值。同理更改b,c,d值后繼續(xù)實驗。實驗思考題:若a=90,b=34,c=33,d=44a=12,b=19,c=25,d=33觀察結果,改進程序使結果正確。1.若a=90,b=34,c=33,d=44,則a+b=124,執(zhí)行(a+b)ADD后AL中存儲內容顯示為24H,而c+d未出現(xiàn)近衛(wèi),執(zhí)行(c+d)后響應的AL為77,因此執(zhí)行(a+b)-(c+d)時需要使用帶借位減法指令SBB,即將SUB CL,AL改為:SBB CL,AL即可,執(zhí)行結果為47正確。2.若a=12,b=19,c=25,d=33,則(a+b)-(c+d)結果為負,這時候需要加入判斷語句:即在減法前加入:JL LESS即當(a+b)小于(c+d)時,減法改為(c+d)-(a+b),然后在顯示結果時在數(shù)字前加入負號。修改后程序即在減法進行前加入判斷語句JL LESS,再在程序最后加入子程序LESS:SUB AL,CL 存儲結果至Y1 顯示部分程序在第一次顯示DL前加入:MOV DX,2DH :顯示負號即可,執(zhí)行結果為-27正確。實驗二:分支程序的設計實驗目的:學習提示信息的顯示及鍵盤輸入字符的方法。掌握分支程序的設計方法。實驗內容:在顯示信息下,從鍵盤上輸入原碼表示的二位十六進制有符號數(shù):當此數(shù)大于0時,屏幕上顯示此數(shù)為正數(shù);當此數(shù)等于0時,屏幕上顯示此數(shù)為零;當此數(shù)小于0時,屏幕上顯示此數(shù)為負數(shù)。程序框架:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTMESS1 DB‘INPUTDATA:’,0DH,0AH,‘$’MESS2 DB‘THISDATAIS+’,0DH,0AH,‘$’MESS3 DB‘THISDATAIS-’,0DH,0AH,‘$’MESS4 DB‘THISDATAISZERO’,0DH,0AH,‘$’ :定義結果信息 DATABUF DB 3 :定義最大可能輸入字符長度 ACTLEN DB ? :實際輸入字符長度 STRING DB 3 DUP(?) :輸入字符緩沖區(qū) DATA ENDS SSEG SEGMENT PARA STACK‘STACK DB 50 DUP(0) SSEG ENDS CODE SEGMENTASSUME CS:CODE,SS:SSEG,DS:DATA :各段定位START MOV AX,DATA MOV DS,AX :DS段寄存器賦值 MOV AX,SSEG MOV SS,AX :SS段寄存器賦值 MOV DX,OFFSETMESSI MOV AH,09H INT 21H MOV AH,AH :顯示提示信息 MOV DX,OFFSETDATABUF INT 21H :接受鍵入的字符串 CRLF :回車換行 MOV AL,STRING CMP AL,38H …… 根據程序框圖編寫判斷輸入數(shù)據情況程序段 CODE ENDS :代碼段結束 END START :程序結束程序框圖:開始 初始化顯示提示信息從鍵盤接收字符接受字符高位送ALYSEYSEAL>=38H?NONO NOAL=30H?YSE接受字符低位送ALNONOAL=30H?YES 顯示此數(shù)為負 顯示此數(shù)為正 顯示此數(shù)為0結束程序內容:CRLF MACROMOV AH,02HMOV DL,0DHINT21HMOV AH,02HMOV DL,0AHINT 21HENDMDATASEGMENTMESS1DB'INPUTDATA:',0DH,0AH,'$'MESS2DB'THISDATAIS+',0DH,0AH,'$'MESS3DB'THISDATAIS-',0DH,0AH,'$'MESS4DB'THISDATAIS0',0DH,0AH,'$'DATABUFDB 3ACTLENDB ?STRINGDB 3DUP(?)DATAENDSSSEGSEGMENTPARASTACK'STACK'DB 50DUP(0)SSEGENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:SSEGSTART:MOVAX,DATAMOVDS,AXMOVAX,SSEGMOVSS,AXMOVDX,OFFSETMESS1MOVAH,09HINT 21HMOVAH,0AHMOVDX,OFFSETDATABUFINT 21HCRLFMOVAL,STRINGCMPAL,38H :比較輸入數(shù)的ASCII碼與38HJGE NEGT :大于0則跳到NEGT程序段CMPAL,30H :比較輸入數(shù)與00的ASCII碼JZ GOON :為0跳到GOON程序段MOVDX,OFFSETMESS2 :上述不成立則顯示此數(shù)為正MOVAH,09HINT 21HJMP DONEDONE:MOV AH,4CHINT 21HNEGT:MOV DX,OFFSETMESS3 :顯示此數(shù)為負MOV AH,09HINT 21HJMP DONEGOON:MOV AL,STRING+1CMP AL,30HJZ ZERO :為0則跳到ZERO程序段MOV DX,OFFSETMESS2 :顯示此數(shù)為正MOV AH,09HINT 21HJMP DONEZERO:MOV DX,OFFSETMESS4 :顯示此數(shù)為0MOV AH,09HINT21HJMP DONECODEENDSENDSTART實驗分析:運用debug程序的-u命令可見程序反匯編內容:之后用–g命令可觀察每一步程序進行后的程序進程:0BDB:0000 B8D60B MOV AX,0BD60BDB:0003 8ED8 MOV DS,AX0BDB:0005 B8E10B MOV AX,0BE10BDB:0008 8ED0 MOV SS,AX0BDB:000A BA0000 MOV DX,00000BDB:000D B409 MOV AH,090BDB:000F CD21 INT 21 :顯示INPUTDATA0BDB:0011 B40A MOV AH,0A0BDB:0013 BA4100 MOV DX,00410BDB:0016 CD21 INT 21 :輸入數(shù)據0BDB:0018 B402 MOV AH,020BDB:001A B20D MOV DL,0D0BDB:001C CD21 INT 210BDB:001E B402 MOV AH,020BDB:0020 B20A MOV DL,0A0BDB:0022 CD21 INT 210BDB:0024 A04300 MOV AL,[0043]0BDB:0027 3C38 CMP AL,380BDB:0029 7D12 JGE 003D0BDB:002B 3C30 CMP AL,300BDB:002D 7417 JZ 00460BDB:002F BA0E00 MOV DX,000E0BDB:0032 B409 MOV AH,090BDB:0034 CD21 INT 210BDB:0036 EB01 JMP 00390BDB:0039 B44C MOV AH,4C 0BDB:003B CD21 INT 21分3步觀測此段程序:輸入正數(shù)0BDB:0016 CD21 INT 21 :輸入正數(shù)370BDB:0018 B402 MOV AH,020BDB:001A B20D MOV DL,0D0BDB:001C CD21 INT 210BDB:001E B402 MOV AH,020BDB:0020 B20A MOV DL,0A0BDB:0022 CD21 INT 210BDB:0024 A04300 MOV AL,[0043] :AL=33,為輸入數(shù)字高位3的ASCII碼0BDB:0027 3C38 CMP AL,38 0BDB:0029 7D12 JGE 003D :程序未跳轉0BDB:002B 3C30 CMP AL,300BDB:002D 7417 JZ 0046 :程序未跳轉0BDB:002F BA0E00 MOV DX,000E0BDB:0032 B409 MOV AH,090BDB:0034 CD21 INT 21 :顯示為正0BDB:0036 EB01 JMP 0039 0BDB:0039 B44C MOV AH,4C0BDB:003B CD21 INT 21 :程序結束輸入負數(shù)0BDB:0016 CD21 INT 21 :輸入負數(shù)DD0BDB:0018 B402 MOV AH,020BDB:001A B20D MOV DL,0D0BDB:001C CD21 INT 210BDB:001E B402 MOV AH,020BDB:0020 B20A MOV DL,0A0BDB:0022 CD21 INT 210BDB:0024 A04300 MOV AL,[0043] :AL=64,為輸入數(shù)字高位D的ASCII碼0BDB:0027 3C38 CMP AL,38 0BDB:0029 7D12 JGE 003D :程序跳至003D0BDB:003D BA1F00 MOV DX,001F0BDB:0040 B409 MOV AH,090BDB:0042 CD21 INT 21 :顯示為負0BDB:0044 EBF3 JMP 0039 :程序跳至00390BDB:0039 B44C MOV AH,4C0BDB:003B CD21 INT 21 :程序結束輸入00BDB:0016 CD21 INT 21 :輸入零000BDB:0018 B402 MOV AH,020BDB:001A B20D MOV DL,0D0BDB:001C CD21 INT 210BDB:001E B402 MOV AH,020BDB:0020 B20A MOV DL,0A0BDB:0022 CD21 INT 210BDB:0024 A04300 MOV AL,[0043] :AL=30,為輸入數(shù)字高位0的ASCII碼0BDB:0027 3C38 CMP AL,38 0BDB:0029 7D12 JGE 003D :程序未跳轉0BDB:002B 3C30 CMP AL,300BDB:002D 7417 JZ 0046 :程序跳至00460BDB:0046 A04400 MOV AL,[0044]0BDB:0049 3C30 CMP AL,300BDB:004B 7409 JZ 0056 :程序跳至00560BDB:0056 BA3000 MOV DX,00300BDB:0059 B409 MOV AH,090BDB:005B CD21 INT 21 :顯示為00BDB:005D EBDA JMP 0039 :程序跳至00390BDB:0039 B44C MOV AH,4C0BDB:003B CD21 INT 21 :程序結束注意:由于讀取長度以字節(jié)為單位,所以輸入零時需輸入00而非0。六、實驗思考題: 若輸入的是非法字符而不是十六進制數(shù),此程序會得到什么結果?如何改進? 答:此時根據輸入字符的ASCII碼,程序會得到其為正數(shù)或為負數(shù)的結果。 改進:須加入判斷語句,實驗分別判斷輸入字符的每一位是否為0—9及A—F,若不是,則跳出至ER段,顯示錯誤,若是,則跳至R段,繼續(xù)執(zhí)行判斷正負程序。改進后部分程序如下:(JUG段即為判定段,LOW段為判定低位是否為0。) 數(shù)據段定義中添加信息:MESS5DB‘THISDATAISWEONG!’,0DH,0AH,‘$’START段改為: START:

溫馨提示

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

評論

0/150

提交評論