微機(jī)原理實(shí)驗(yàn)報(bào)告1_第1頁
微機(jī)原理實(shí)驗(yàn)報(bào)告1_第2頁
微機(jī)原理實(shí)驗(yàn)報(bào)告1_第3頁
微機(jī)原理實(shí)驗(yàn)報(bào)告1_第4頁
微機(jī)原理實(shí)驗(yàn)報(bào)告1_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

微機(jī)原理實(shí)驗(yàn)報(bào)告班級(jí):電氣93姓名:黨堯?qū)W號(hào):09041059實(shí)驗(yàn)一:順序程序的設(shè)計(jì)實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)8086/8088指令系統(tǒng)中一些基本指令的用法和程序設(shè)計(jì)的基本方法。熟悉在PC機(jī)上建立、匯編、鏈接、調(diào)試和運(yùn)行8086、8088匯編語言程序的全過程。實(shí)驗(yàn)內(nèi)容:設(shè)a、b、c、d四個(gè)數(shù)分別以膽子解壓縮BCD碼形式存放在內(nèi)存NUM開始的四個(gè)單元,計(jì)算(a+b)-(c+d)并將結(jié)果放在Y1單元,將結(jié)果在屏幕上顯示出來。 在DEBUG中,不斷改變a,b,c,d內(nèi)容并查看結(jié)果。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ù)據(jù)段NUM DB 13H,27H,11H,12H :定義a,b,c,dY1 DB ?DSEG ENDS :數(shù)據(jù)段定義結(jié)束SSEG SEGMENTPARASTACK :定義堆棧段DB 20 DUP(?)SSEG ENDS :堆棧段定義結(jié)束CSEG SEGMENT :定義代碼段ASSUME CS:CSEG,DS:DSEG,SS:SSEG :各段定義START: MOV AX,DSEG MOV DS,AX :數(shù)據(jù)段段地址送DS MOV AX,SSEG MOV SS,AX :堆棧段段地址送SS根據(jù)程序流程編制計(jì)算(a+b)-(c+d)的指令序列,結(jié)果送AL將變成提示中,單字節(jié)壓縮BCD碼顯示程序放于此MOV AX,4C00HINT 21H CSEG ENDS END START程序內(nèi)容:DSEGSEGMENTNUMDB13H,27H,11H,12HY1DB?DSEGENDSSSEGSEGMENTPARASTACKDB20DUP(?)SSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEG,SS:SSEGSTART: MOV AX,DSEGMOV DS,AXMOV AX,SSEGMOV SS,AXMOV AL,NUM :數(shù)據(jù)a送ALADD AL,NUM+1 :將a+b存儲(chǔ)到ALDAA :壓縮BCD碼加法調(diào)整MOV CL,AL :保存AL內(nèi)容MOV AL,NUM+2 :數(shù)據(jù)c送ALADD AL,NUM+3 :將c+d存儲(chǔ)到ALDAA :壓縮BCD碼加法調(diào)整SUB CL,AL :將(a+b)-(c+d)存儲(chǔ)到CLMOV AL,CL :CL送ALDAS :壓縮BCD碼減法調(diào)整MOV Y1,AL :送出結(jié)果顯示壓縮BCD碼:MOV BL,AL :保存AL中的內(nèi)容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 :恢復(fù)(AL)AND AL,0FH :?。ˋL)低四位ADD AL,30H :(AL)30H得ASCII碼MOV DL,ALMOV AH,02HINT 21H :顯示(DL)返回DOS : MOV AX,4C00HINT 21HCSEGENDSENDSTART實(shí)驗(yàn)分析:運(yùn)用debug程序的-u命令可見程序反匯編內(nèi)容:之后用–g及–r命令可觀察每一步程序進(jìn)行后AL中存儲(chǔ)內(nèi)容的變化: 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可知此時(shí)程序已將(a+b)-(c+d)結(jié)果17存入到AL中。每組數(shù)據(jù)實(shí)驗(yàn)程序運(yùn)行結(jié)束后,應(yīng)用–e命令更改a,b,c,d數(shù)值繼續(xù)進(jìn)行實(shí)驗(yàn)內(nèi)容:-e0000得到:0BD6:0000 13.鍵入新的a值。同理更改b,c,d值后繼續(xù)實(shí)驗(yàn)。實(shí)驗(yàn)思考題:若a=90,b=34,c=33,d=44a=12,b=19,c=25,d=33觀察結(jié)果,改進(jìn)程序使結(jié)果正確。1.若a=90,b=34,c=33,d=44,則a+b=124,執(zhí)行(a+b)ADD后AL中存儲(chǔ)內(nèi)容顯示為24H,而c+d未出現(xiàn)近衛(wèi),執(zhí)行(c+d)后響應(yīng)的AL為77,因此執(zhí)行(a+b)-(c+d)時(shí)需要使用帶借位減法指令SBB,即將SUB CL,AL改為:SBB CL,AL即可,執(zhí)行結(jié)果為47正確。2.若a=12,b=19,c=25,d=33,則(a+b)-(c+d)結(jié)果為負(fù),這時(shí)候需要加入判斷語句:即在減法前加入:JL LESS即當(dāng)(a+b)小于(c+d)時(shí),減法改為(c+d)-(a+b),然后在顯示結(jié)果時(shí)在數(shù)字前加入負(fù)號(hào)。修改后程序即在減法進(jìn)行前加入判斷語句JL LESS,再在程序最后加入子程序LESS:SUB AL,CL 存儲(chǔ)結(jié)果至Y1 顯示部分程序在第一次顯示DL前加入:MOV DX,2DH :顯示負(fù)號(hào)即可,執(zhí)行結(jié)果為-27正確。實(shí)驗(yàn)二:分支程序的設(shè)計(jì)實(shí)驗(yàn)?zāi)康模簩W(xué)習(xí)提示信息的顯示及鍵盤輸入字符的方法。掌握分支程序的設(shè)計(jì)方法。實(shí)驗(yàn)內(nèi)容:在顯示信息下,從鍵盤上輸入原碼表示的二位十六進(jìn)制有符號(hào)數(shù):當(dāng)此數(shù)大于0時(shí),屏幕上顯示此數(shù)為正數(shù);當(dāng)此數(shù)等于0時(shí),屏幕上顯示此數(shù)為零;當(dāng)此數(shù)小于0時(shí),屏幕上顯示此數(shù)為負(fù)數(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,‘$’ :定義結(jié)果信息 DATABUF DB 3 :定義最大可能輸入字符長度 ACTLEN DB ? :實(shí)際輸入字符長度 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 …… 根據(jù)程序框圖編寫判斷輸入數(shù)據(jù)情況程序段 CODE ENDS :代碼段結(jié)束 END START :程序結(jié)束程序框圖:開始 初始化顯示提示信息從鍵盤接收字符接受字符高位送ALYSEYSEAL>=38H?NONO NOAL=30H?YSE接受字符低位送ALNONOAL=30H?YES 顯示此數(shù)為負(fù) 顯示此數(shù)為正 顯示此數(shù)為0結(jié)束程序內(nèi)容: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ù)為負(fù)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實(shí)驗(yàn)分析:運(yùn)用debug程序的-u命令可見程序反匯編內(nèi)容:之后用–g命令可觀察每一步程序進(jìn)行后的程序進(jìn)程: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ù)據(jù)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 :程序未跳轉(zhuǎn)0BDB:002B 3C30 CMP AL,300BDB:002D 7417 JZ 0046 :程序未跳轉(zhuǎn)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 :程序結(jié)束輸入負(fù)數(shù)0BDB:0016 CD21 INT 21 :輸入負(fù)數(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 :顯示為負(fù)0BDB:0044 EBF3 JMP 0039 :程序跳至00390BDB:0039 B44C MOV AH,4C0BDB:003B CD21 INT 21 :程序結(jié)束輸入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 :程序未跳轉(zhuǎn)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é)束注意:由于讀取長度以字節(jié)為單位,所以輸入零時(shí)需輸入00而非0。六、實(shí)驗(yàn)思考題: 若輸入的是非法字符而不是十六進(jìn)制數(shù),此程序會(huì)得到什么結(jié)果?如何改進(jìn)? 答:此時(shí)根據(jù)輸入字符的ASCII碼,程序會(huì)得到其為正數(shù)或?yàn)樨?fù)數(shù)的結(jié)果。 改進(jìn):須加入判斷語句,實(shí)驗(yàn)分別判斷輸入字符的每一位是否為0—9及A—F,若不是,則跳出至ER段,顯示錯(cuò)誤,若是,則跳至R段,繼續(xù)執(zhí)行判斷正負(fù)程序。改進(jìn)后部分程序如下:(JUG段即為判定段,LOW段為判定低位是否為0。) 數(shù)據(jù)段定義中添加信息:MESS5DB‘THISDATAISWEONG!’,0DH,0AH,‘$’START段改為: START:

溫馨提示

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

評(píng)論

0/150

提交評(píng)論