




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
-.z.微機系統及應用實驗實驗報告實驗一DEBUG的啟動及其基本命令的使用實驗內容:6:設堆棧指針SP=2000H,A*=3000H,B*=5000H;請仿照例程的格式編一程序段將A*和B*的內容進行交換。請用堆棧作為兩寄存器交換內容的中間存儲單元,用DEBUG調試程序進行匯編與調試。寫出在DEBUG狀態下編寫、運行步驟6所要求的程序過程(要求包含源程序)以及調試所中遇到的問題是如何解決的,并對調試過程中的問題進行分析,對執行結果進行分析。程序清單:STACKSEGMENTSTACKDB2003HDUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,SS:STACKSTART:MOVA*,STACK MOVSS,A* MOVSP,2000H MOVA*,3000H MOVB*,5000H PUSHA* MOVA*,B* POPB* MOVAH,4CH INT21HCODEENDSENDSTART運行及調試:進入調試后,運行正常。進行反匯編調試:通過追蹤指令觀察SP、A*、B*變化可知對SP、A*、B*賦值正確。將A*入棧后用顯示內存單元內容的命令D觀察堆棧段中SP為1FFF,2000的內容[1FFF]=00,[2000]=30說明已經A*=3000已經放入到堆棧段中。結果可以看出:A*=5000,B*=3000結果完成正確!實驗二內存操作數及尋址方法實驗內容:1、設堆棧指針SP=2000H,A*=3000H,B*=5000H;請編一程序段將A*和B*的內容進行交換。請用堆棧作為兩寄存器交換內容的中間存儲單元,用字處理程序編輯程序,用masm.e*e和link.e*e對源程序進行匯編程和連接,用DEBUG調試程序。2、用masm和link對以下程序進行匯編和連接,調試程序在DEBUG調試程序狀態下進行。用單步執行的方法,分析每條指令源地址的形成過程,當數據傳送完畢時,A*中的內容是什么。程序清單如下:DATASEGMENTORG0300HADB12H,23H,34H,45H,56H,67H,78H,89H,9AHDATAENDSPROGNAMSEGMENTASSUMECS:PROGNAM,DS:DATASTART:MOVA*,DATAMOVDS,A*MOVA*,B*MOVA*,0300HMOVA*,[0300H]MOVA*,[B*]MOVSI,2MOVA*,0001[B*]MOVA*,[B*][SI]MOVA*,0001[B*][SI]MOVAH,4CHINT21HPROGNAMENDSENDSTART對源程序文件匯編,生成目標文件將目標文件LINK后,生成可執行文件如下:進入debug調試單步追蹤執行:A*=0B91,為數據段的首地址。A*不變,將數據段的首地址送至DS。執行MOVA*,B*A*同B*,清零。執行MOVA*,0300HA*=0300執行MOVA*,[0300H]A*=0300可知MOVA*,0300H與MOVA*,[0300H]得到同樣結果A*均為0000.將原文中的指令清單改為DATASEGMENTADB12H,23H,34H,45H,56H,67H,78H,89H,9AHORG0300HBDB0BH,0CHDATAENDSPROGNAMSEGMENTASSUMECS:PROGNAM,DS:DATASTART:MOVA*,DATAMOVDS,A*MOVA*,B*MOVA*,0300HMOVA*,[0300H]MOVA*,[B*]MOVSI,2MOVA*,0001[B*]MOVA*,[B*][SI]MOVA*,0001[B*][SI]MOVAH,4CHINT21HPROGNAMENDSENDSTART單步執行后:可知:隨著程序進行,A*發生變化。實驗三算術運算指令實驗內容編寫三個完整的匯編語言源程序,完成以下計算。其中*、Y、Z、R、W均為存放16位帶符號數單元的地址。(1)Z←W+(Z-*)(2)Z←W-(*+6)-(R+9)(3)Z←(W**)/(Y+6),R←余數實驗前要做好充分準備,包括匯編程序清單、調試步驟、調試方法,以及對程序結果的分析等1、程序說明。說明程序的功能、結構。2、調試說明。包括上機調試的情況、上機調試步驟、調試所遇到的問題是如何解決的,并對調試過程中的問題進行分析,對執行結果進行分析。3、寫出源程序清單和執行結果。(1)Z←W+(Z-*)匯編程序清單DATASEGMENT*DW10ZDW20WDW10DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVA*,DATA MOVDS,A* MOVA*,Z SUBA*,* ADDA*,W MOVZ,A* MOVAH,4CH INT21HCODEENDSENDSTART進入debug調試:使用追蹤指令T單步執行:執行結果是將20放入A*中。A*=0014H執行結果A*=0014H-000AH=000A,結果正確。執行結果顯示:A*=0014H,即為20,正確。然后將結果保存至Z存儲字中。最后觀察數據組中的數據;顯示為*=10,Z=20,W=10。程序運行結果正確(2)Z←W-(*+6)-(R+9)匯編程序清單:DATASEGMENTWDW100*DW20RDW30ZDW"DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVA*,DATA MOVDS,A* MOVA*,W MOVB*,* ADDB*,6 SUBA*,B* MOVB*,R ADDB*,9 SUBA*,B* MOVZ,A* MOVAH,4CH INT21HCODEENDSENDSTART對程序進行匯編后調試:單步執行:此時,對DS的段基址賦值為數據組的首地址此時,對A*B*分別賦值為100,20(3)Z←(W**)/(Y+6),R←余數匯編程序清單:DATASEGMENT*DW10HZDW"WDW10HYDW3HRDW"DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVA*,DATA MOVDS,A* MOVA*,W IMUL* MOVB*,Y ADDB*,6 IDIVB* MOVZ,A* MOVR,D* MOVAH,4CH INT21HCODEENDSENDSTART編譯執行結果如下:單步執行結果如下:執行結果可得:商的整數部分z所指向的字單元內容為001CH,余數本分R指向的字單元內容為0004H。實驗四查表程序設計實驗內容:用查表的方法將一位十六進制數轉換成與它相應的ASCII碼,并將結果存放到ASCI單元中。匯編程序清單:DATASEGMENTTABLEDB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46HHE*DB0AHASCIDB"DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVA*,DATA MOVDS,A* MOVB*,OFFSETTABLE MOVAL,HE* *LAT MOVASCI,AL MOVAH,4CH INT21HCODEENDSENDSTART對程序進行編譯進入debug調試使用t追蹤指令觀察數據變化ASCI所指向的字節單元的內容正是十六進制數0AH的ASCII值41。實驗五系統功能調用實驗內容:試編寫一個匯編語言程序,要求對鍵盤輸入的小寫字母用大寫字母顯示出來。匯編程序清單:CODESEGMENTASSUMECS:CODESTART:MOVAH,1 INT21H SUBAL,20H MOVDL,AL MOVAH,2 INT21H MOVAH,4CH INT21HCODEENDSENDSTART對源程序編譯并進入debug狀態調試結果正確。實驗六分支程序設計:實驗內容假設有一組數據:5,-4,0,3,100,-51,請編一程序,判斷:每個數大于0,等于0,還是小于0;并輸出其判斷結果。即:1當*>0y=0當*=0-1當*<0匯編程序清單:DATASEGMENTTABLEDB5,-4,0,3,100,-51GDB'1',13,10,'$'ZDB'0',13,10,'$'LDB'-1',13,10,'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVA*,DATAMOVDS,A* LEASI,TABLE MOVCL,6COMP:CMPBYTEPTR[SI],0JGGREAT JZEQUAL LEAD*,L JMPSHORTDISPGREAT:LEAD*,G JMPSHORTDISPEQUAL:LEAD*,ZDISP:MOVAH,9INT21H INCSI LOOPCOMP MOVAH,4CH INT21HCODEENDSENDSTART對源程序進行編譯并進入調試狀態分布調試:從結果可知:經過第一次循環,D*所代表的要輸出的字符串的地址0006H即為數據段中Z字符串的EA,所以輸出內容為1。且SI自增1,CL減1。以下循環原理同上。全部運行的:程序運行正確。思考題:程序中的原始數據是以怎樣的形式存放在數據區中的?請用DEBUG調試程序觀察并分析。答:程序中的原始數據是以補碼的十六進制的形式存放在數據區中的。實驗七循環程序設計實驗內容與要求編制程序計算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200為止,并將結果由屏幕上顯示出來。其程序的流程圖如圖7.1所示。將從3000H內存單元開始的100個字節存儲單元全部清0。本實驗要求在DEBUG調試狀態下進行,包括匯編程序、運行程序、檢查結果。程序框圖圖7.1程序框圖實驗步驟實驗內容一:1)按程序流程圖編制實驗程序。2)輸入源程序。3)匯編、連接程序,執行程序,檢查結果。實驗內容二:1)輸入源程序并檢查無誤。2)對內存單元3000H開始的100個存儲單元用E命令輸入任意數。3)程序的執行可用DEBUG的G命令,也可用T命令單步跟蹤執行。4)用D命令檢查執行結果。實驗內容1的程序清單:DATASEGMENTSTRDB5DUP(0)DB'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVA*,DATA MOVDS,A*MOVD*,1 MOVBL,2LOP:MOVAL,BL INCBL MULBL ADDD*,A* CMPA*,200 JBELOP MOVA*,D*LEADI,STR+4LOP2:MOVCL,10 DIVCL ADDAH,30H MOV[DI],AH ANDA*,00FFH DECDI CMPAL,0 JNELOP2 LEAD*,STR MOVAH,9 INT21H MOVAH,4CH INT21HCODEENDSENDSTART程序運行及結果:程序循環體如下圖:結束循環:下部分程序為利用除10取余法將計算結果用十進制在屏幕上顯示:計算結果在DS的存儲:實驗內容與要求將從3000H內存單元開始的100個字節存儲單元全部清0。本實驗要求在DEBUG調試狀態下進行,包括匯編程序、運行程序、檢查結果。實驗步驟實驗內容二:1)輸入源程序并檢查無誤。2)對內存單元3000H開始的100個存儲單元用E命令輸入任意數。3)程序的執行可用DEBUG的G命令,也可用T命令單步跟蹤執行。4)用D命令檢查執行結果。匯編程序清單:CODESEGMENTASSUMECS:CODESTART:PUSHDSMOVA*,0 PUSHA* MOVB*,3000HMOVCL,100LOP:MOVBYTEPTR[B*],0 INCB* LOOPLOP MOVAH,4CH INT21HCODEENDSENDSTART運行及調試:E命令修改:T追蹤:實驗八子程序設計1、程序說明:編制一程序,要求鍵入一個班的學生成績,并存放于50字的ERADE數組中,然后根據ERADE中的成績,把學生名次填入50字的RANK數組中,再按**順序把名次從終端上顯示出來。提示:程序MAIN功能:根據輸入的學生成績,計算并顯示出學生名次。子程序INPUT功能:接收一個班級學生的成績,各成績之間用空格隔開。子程序RANKP功能:計算一個班級學生的名次。子程序OUTPUT功能:輸出(顯示)一個班級的學生名次子程序DECIBIN功能:十進制轉換二進制,存入B*子程序BINDEC功能:十進制轉換二進制,并在屏幕上顯示。子程序DEC_DIV功能:B*的內容除以C*的內容,并在屏幕上顯示一位商。源程序:DATASEGMENTGRADEDW50DUP()RANKDW50DUP()ENTERDB'Grades:',24H;提示用戶輸入成績ERRORDB13,10,'Error!',13,10,24H;用戶輸入的格式出錯SHOWDB'Rank:',24HCOUNTDW0;統計輸入的成績個數CRDB13,10,24h;換行DATAENDSSTACKSEGMENTSTACKDB400DUP(0)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVA*,DATAMOVDS,A*MOVES,A*CALLINPUTCALLRANKPCALLOUTPUTMOVAH,01HINT21HMOVA*,4CHINT21H;INPUT程序段;以**為序從鍵盤輸入一個班的學生成績,各個成績之間用逗號格開,最后以回車符結束。;然后把一個班的成績存入grade數組。INPUTPROCNEARLEAD*,ENTERMOVAH,9INT21H;提示用戶輸入MOVSI,0MOVCOUNT,0;將輸入用戶的輸入個數置0_ENTER:;對用戶的輸入進行監視,對錯誤輸入立即進行出錯處理CALLDECIBIN;調用DECIBIN;對用戶輸入進行處理INCCOUNTCMPDL,',';與','比較,相同則保存成績,不同出錯JE_STORECMPDL,0DH;與回車鍵進行比較,回車則成績輸入結束JE_ENDENTERJNE_ERROR;出錯處理:顯示出錯信息_STORE:;保存成績MOVGRADE[SI],B*ADDSI,2JMP_ENTER_ERROR:LEAD*,ERRORMOVAH,9INT21H_ENDENTER:;用戶結束成績輸入MOVGRADE[SI],B*MOVD*,OFFSETCR;換行MOVAH,9INT21HRETINPUTENDP;RANKP程序段;從grade數組取得一個班的成績,以**為序計算出該班每個學生的名次存入rank數組。;算法為:一個學生的名次等于成績高于該生的學生人數加1RANKPPROCNEARMOVDI,COUNTMOVB*,0_LOOP:MOVA*,GRADE[B*];取學生成績MOVWORDPTRRANK[B*],0;初始化RANK[B*]的值為0MOVC*,COUNTLEASI,GRADE;第一個學生的成績_NE*T1:CMPA*,[SI];比較兩個成績JG_JUMP;成績大于被比較的跳過INCWORDPTRRANK[B*]_JUMP:ADDSI,2;取下一個被比較成績的地址LOOP_NE*T1ADDB*,2;下一個成績DECDI;未比較成績個數減1JNE_LOOPRETRANKPENDP;OUTPUT程序段;從rank數組取得一個班的學生名次。把一個班的學生名次以**為序在終端顯示出來;調用子模塊binidec,以便把rank數組中的二進制數轉成十進制數并在終端上顯示出來.調用子模塊crlf完成回車,換行功能.OUTPUTPROCNEARLEAD*,SHOWMOVAH,09HINT21HMOVSI,0MOVDI,COUNT_NE*T2:MOVB*,RANK[SI];將成績保存到B*中CALLBINIDEC;調用BINIDECCMPDI,1;將剩余的成績個數與1比較,若為1則不顯示','JE_NOCOMMAMOVDL,','MOVAH,02HINT21H;顯示','_NOCOMMA:ADDSI,02H;取下一個成績名次DECDIJNZ_NE*T2MOVD*,OFFSETCR;換行MOVAH,9INT21HRETOUTPUTENDP;DECIBIN程序段;從鍵盤取得一個十進制數。把該數轉換成二進制數并存入B*寄存器中。DECIBINPROCNEARMOVB*,0_CATCH:MOVAH,01HINT21HMOVDL,ALSUBAL,30HJL_ENDCHANGE;小于則結束SFVOF=1CMPAL,39HJG_ENDCHANGE;大于則結束CBW*CHGA*,B*;A*與B*值交換MOVC*,10MULC*;無符號數乘法指令,(A*)<----(AL)*(C*)*CHGA*,B*ADDB*,A*;(B*)<------(B*)+(A*)JMP_CATCH_ENDCHANGE:RETDECIBINENDP;BINIDEC程序段;把b*寄存器中的二進制數轉換成10進制數,并在終端屏幕上顯示出來。調用dec_div來作除法運算并顯示字符。BINIDECPROCNEARPUSHB*PUSHC*PUSHSIPUSHDI;壓棧MOVC*,10CALLDEC_DIV;調用DEC_DIVMOVC*,1CALLDEC_DIV;調用DEC_DIVPOPDIPOPSIPOPC*POPB*;出棧RETBINIDECENDP;DEC_DIV程序段;把b*中二進制數除以相應的十的冪,并在屏幕上顯示一位商。余數保存在b*寄存器中。DEC_DIVPROCNEARMOVA*,B*MOVD*,0DIVC*MOVB*,D*MOVDL,ALADDDL,30HMOVAH,02HINT21H;顯示RETDEC_DIVENDPCODEENDSENDSTART運行結果:思考題:(1)寫出4位BCD碼轉二進制數的算法。設A*寄存器中存放著4位BCD碼BCDTO2PROCNEARPUSHB*PUSHC*PUSHD*MOVB*,A*;保存A*中的BCD碼到B*MOVA*,0;結果單元清0MOVC*,4;共處理4位BCD碼RETRY:PUSHC* MOVCL,4 ROLB*,CL;最高1位BCD碼移到B*中的低半字節 POPC* MULW10;累加和A**10->D*:A* PUSHB* ANDB*,000FH;取出B*中的1位BCD碼 ADDA*,B*;累加到A*中 POPB* LOOPRETRY POPD* POPC* POPB* RETBCDTO2ENDP(2)寫出A*中進二制數轉BCD碼的算法。W1000DW1000,100,10,1;十進制數千,百,十,個位權值;入口參數:A*=二進制數。出口參數:A*=壓縮BCD碼A*2TOBCDPROCNEAR*ORB*,B*;BCD碼暫存單元清0MOVSI,OFFSETW1000;權值首地址送SIMOVC*,4;循環次數4->C*RETRY:PUSHC*MOVCL,4SHLB*,CLMOVD*,0;D*:A*組成被除數DIVWORDPTR[SI];除以權值,商,余數在A*,D*中ORB*,A*;壓縮BCD碼MOVA*,D*;余數送A*POPC*ADDSI,2;地址加2,指向下一權值LOOPRETRYMOVA*,B*;BCD碼由B*->A*RETA*2TOBCDENDP實驗九綜合程序設計實驗內容:設有十個學生成績分別是76,69,84,90,73,88,99,63,100和80分。試編制一個子程序,統計低于60分,60~69分,70~79分,80~89分,90~99分和100分的人數,并輸出顯示統計結果。編程提示:1、成績分等部分采用分支結構,統計所有成績則用循環結構完成,顯示統計結果采用DOS功能調用。2、統計學生成績和顯示
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年常州工程職業技術學院高職單招職業技能測試近5年常考版參考題庫含答案解析
- 2025年山東商務職業學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- icl相關知識課件
- 2025年寧夏職業技術學院高職單招(數學)歷年真題考點含答案解析
- 2025年北京市順義區高三一模數學試卷(含答案解析)
- 血友病的護理
- 腦血栓的診斷
- AFP防治知識培訓課件
- 護理文化與護士
- 2019交通安全課件
- 山東省臨沂市河東區2023-2024學年七年級下學期期中測試歷史試題
- 江蘇省昆山、太倉、常熟、張家港市2023-2024學年下學期七年級數學期中試題
- MOOC 敦煌文學藝術-浙江師范大學 中國大學慕課答案
- 生物地球化學性疾病試題
- 休閑與旅游農業課件
- 珍惜生命遠離水域
- 比例知識講座
- 40篇詳細的機械頂崗實習周記
- 社會組織年檢培訓課件
- 感覺障礙護理課件
- (正式版)實習崗位-OFFER通知書
評論
0/150
提交評論