《匯編語言》實驗講義講解1_第1頁
《匯編語言》實驗講義講解1_第2頁
《匯編語言》實驗講義講解1_第3頁
《匯編語言》實驗講義講解1_第4頁
《匯編語言》實驗講義講解1_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PagePageof26四、實驗步驟1認(rèn)真閱讀程序,自己編寫十進制到二進制轉(zhuǎn)換子程序和輸出回車換行子程序?qū)⒊绦蜓a充完整,然后匯編、鏈接、生成可執(zhí)行文件。2用的斷點命令和命令運行此程序,觀察并記錄每次過程調(diào)用和進出棧指令前后帶的語句的和堆棧內(nèi)容,如記錄執(zhí)行,,三條指令后,以及的值。3.記錄數(shù)據(jù)段各變量的最后結(jié)果。五、實驗報告或作業(yè).畫出,和模塊的流程圖。2.匯編,連接及調(diào)試時產(chǎn)生的錯誤,其原因及解決辦法。3記錄執(zhí)行,,三條指令后,以及的值,并指出指向哪條指令。4.畫出堆棧滿時堆棧存儲區(qū)域的示意圖。5.記錄最后的輸出結(jié)果。6.思考:如果想用堆棧傳遞參數(shù),源程序應(yīng)做何修改?實驗六程序設(shè)計AA實驗一、預(yù)習(xí)內(nèi)容1程序直接控制方式。2程序設(shè)計方法。3.子程序設(shè)計方法二、目的要求1掌握程序直接控制方式。2熟悉程序設(shè)計方法。3.繼續(xù)熟悉子程序設(shè)計方法。三、實驗內(nèi)容用位觸發(fā)方式(也即程序直接控制輸出控制寄存器(端口為)的第一位,使該位按所需要的頻率進行1和0的交替變化,從而控制開關(guān)電路產(chǎn)生一串脈沖波形,這些脈沖經(jīng)放大后驅(qū)動揚聲器發(fā)聲音)模擬槍響程序。程序如下,但其中有些語句錯誤,需要修改后才能正確運行。實驗步驟1.認(rèn)真閱讀程序,將源程序中的錯誤找出后修改。2.編譯,鏈接,生成可執(zhí)行文件,記錄編譯過程中的錯誤,并分析原因。3.執(zhí)行程序,調(diào)式程序,直到可以清楚聽到槍響的聲音。四、實驗報告或作業(yè)1.分析程序,畫出程序流程圖。2.匯編,連接及調(diào)試時產(chǎn)生的錯誤,其原因及解決辦法。3.思考:試將程序中的黑體部分修改為,再編譯運行程序,是否能聽到槍聲,為什么?AA實驗選做實驗?zāi)康恼莆蛰斎胼敵龀绦蛟O(shè)計的概念和方法。了解(機外圍芯片、的功能。學(xué)習(xí)如何在(機上編寫具有輸入輸出功能的程序,包括、芯片的使用方法實驗說明本實驗要求自行編寫一個鍵盤輸入處理程序,它可以完成鍵盤字符的讀入并進行屏幕顯示,本實驗要利用一(系統(tǒng)的硬件結(jié)構(gòu),分別使用外圍芯片及。在本例中,利用的A端做數(shù)據(jù)輸入,對應(yīng)的端口地址為0利用端口作控制端輸入,端口地址為1的控制端口地址為。本例的中斷控制器,其端用于鍵盤中斷請求線。鍵盤通過它可以響C發(fā)出中斷請求。的端口地址為,可以寫入中斷屏蔽字,以對個中斷源是否容許中斷進行控制。在每次中斷結(jié)束時,要通過端口地址寫回一個中斷結(jié)束命令,使可以清除本次中斷。因此本實驗既屬于輸入輸出實驗,也屬于中斷實驗。有關(guān)說明將詳細(xì)地附在參考程序中。實驗內(nèi)容利用機鍵盤,編寫一個讀入并顯示鍵盤輸入的演示程序。該程序只接受常規(guī)字符(包括回車鍵及退格鍵),對特殊功能鍵不進行處理。在程序中設(shè)置這些特殊功能鍵對應(yīng)0編號即可,凡是檢測到鍵位編號為值時,均忽略對它們的處理。有鍵按下時,送出的掃描碼的位為時,當(dāng)鍵抬起時,掃描的碼位為,以判定鍵是否被按下。四、實驗準(zhǔn)備預(yù)習(xí)輸入輸出程序設(shè)計的特點和方法。仔細(xì)閱讀參考程序,弄清外圍芯片接口初始化的意義和方法。五、實驗步驟建立源文件,并通過匯編和連接,產(chǎn)生可執(zhí)行文件。運行程序,觀察常規(guī)字符鍵及功能鍵按下時程序的反應(yīng),六、實驗報告要求給出程序框圖,包括主程序框圖、中斷處理程序框圖。說明輸入輸出程序設(shè)計的特點。討論:將S鍵及右S鍵也進行判別處理,它們的掃描碼為及.為記錄S鍵的按動狀態(tài),可設(shè)一個標(biāo)志單元K,A右S按下,K的位置,左S按下K的位置,放下左右的S鍵TK的相應(yīng)恢復(fù)為°當(dāng)程序工作時,應(yīng)能顯示上檔鍵的字符。七、參考程序清單;KEYPRG.ASMSTACKSEGMENPTARASTACK‘STACK’DB2、6DUP(0)STACKENDS;設(shè)計2、

個字節(jié)堆棧區(qū)DATASEGMENTPARAPUBLIC‘DATA’BUFFERDB10DUP(0);定義10個字節(jié)的鍵盤緩沖區(qū)BUFFER1DW0;指向鍵盤緩沖區(qū)的起點BUFFER2DW0;指向鍵盤緩沖區(qū)的終點;注意當(dāng)BUFFER1:BUFFER2時,表明緩沖區(qū)空SCANTABDB0,0,’1234567890-=’,8,0DB’QWERTYUIOP[]’,0DH,0DB’ASDFGHJKL;’,0,0,0,0DB’ZXCVBNM,./’,0,0,0DB’’,0,0,0,0,0,0,0,0,0,0,0,0DB0,0,’789-456+1230.’DATAENDSEXTRNKBINT:FAR;;外部引用說明CODESEGMENTPARAPUBLIC‘CODE’;主程序段ASSUMECS:CODESTART:MOVAX,DATAMOVDS,AXASSUMEDS:DATA;建立自行設(shè)計的中斷服務(wù)程序CLI;關(guān)中斷,以防引起混亂MOVAX,0;確定中斷類型號9的物理地址MOVES,AXMOVDI,24HMOVAX,OFFSETKBINT;寫自行設(shè)計的中斷處理程序入口偏移量到矢量表中CLDSTOSWMOVAX,CSSTOSW;再寫入中斷處理程序段基址MOVAL,0FCH;允許定時器和鍵盤中斷的控制字送8259OUT21H,ALSTI;開中斷;讀鍵盤并顯示字符PROEVEVER::CALLKBGET1;讀緩沖區(qū)字符PUSHAXCALLDISPCHAR;顯示接收字符POPAXCMPAL,0DH;是回車符嗎?JNZFOREVER;不是再接收CALLDISPCHAR;是,換行JMPFOREVER;接收下一行字符;KBGET1取緩沖區(qū)字符一返回參數(shù);KBGET1PROCNEARKBGET:PUSHBX不空,轉(zhuǎn)BE斷KBGET:2MOVA;首指針加1沖區(qū)尾嗎?到,轉(zhuǎn),BE指向緩沖區(qū)首KBGET:3MOVBU恢復(fù)B寄存器KBGET1ENDPDISPC斷調(diào)用L,[BUFFEE,RB1PROCNECLIMOVBX,BUFMOVBX,BUFJNZKBGETSTIPOPBXJMPKBGET取緩沖區(qū)字符+BX]INCBXCMPBX,10JCKBGEMOVBX,0;緩沖區(qū);開中;取緩沖區(qū)字符;到緩;未;到,;保護首指針STIPOPBXRET;DIPC字符顯示子程序PUSHBXMOVBX,MOVAH,INT10POPBXRET;顯示零頁;寫功能;調(diào)顯示器中而鍵盤緩沖區(qū)的內(nèi)容,即鍵盤掃描碼而鍵盤緩沖區(qū)的內(nèi)容,即鍵盤掃描碼讀口BDISPCHARENDPCODEENDSENDSTART從OE開始,程序便進入循環(huán),反復(fù)讀緩沖區(qū)字符,并將其顯示出來。是通過鍵盤中斷的中斷處理程序BI寫入的。BI程序如下:;BI鍵盤中斷處理程序SEGSEGMENPTARAPUBLIC‘CODE’ASSUMECS:SEGPUBLICKBINTKBINTPROCFARPUSHBXPUSHAX;讀鍵盤數(shù)據(jù),并發(fā)確認(rèn)信號IL;讀5,PUSHAXINTAL,61H;為置確認(rèn)信號ORA,L7FH;置鍵盤確認(rèn)信號,;置位并送鍵盤ANDA,L7FH;恢復(fù)鍵盤確認(rèn)信號OUT61,HAL;將接收的掃描譯為碼POPAXTESTA,L80H;檢查是否按下?JNZKBINT2;鍵抬起放棄本次輸入MOVB,XOFFSETSCANTAB;查表找對應(yīng)碼CMPA,L0;是有效字符鍵嗎?JZKBINT2;不是,放棄;存碼字符到緩沖區(qū)MOVB,XBUFFER2;取緩沖區(qū)尾指針,]存字符INCBX;尾指針加1CMPB,X10;是否到區(qū)尾?JCKBINT3;不到,轉(zhuǎn)MOVB,X0;到,置新尾址B,XBUFFER1;緩沖區(qū)滿?JZKBINT2;不滿,存尾指針MOVBUFF,EBEXR2;結(jié)束中斷處理A;發(fā),結(jié)束中斷;中斷返回;讀鍵盤數(shù)據(jù),并發(fā)確認(rèn)信號讀口,即鍵盤掃描碼PUSHAXINAL,61H為;置確認(rèn)信號讀口ORAL,80H;置鍵盤確認(rèn)信號置位并送鍵盤AND61H,AL將接收的掃描碼譯為碼POPAXTESTAL,80H;檢查是否按下JNZKBINT2;鍵抬起放棄本次輸入MOVBX,OFFSETSCANTAB查表找對應(yīng)碼CMPAL,0是;有效字符鍵嗎?JZKBINT2不查是,放棄;存碼字符到緩沖區(qū)MOVBX,BUFFWR2取查緩沖區(qū)尾指針MOV[BUF,F(xiàn)AELR+BX];存字符

尾;指針加1;是否到區(qū)尾?不;到,轉(zhuǎn)到;新尾址;緩沖區(qū)滿?滿;,轉(zhuǎn);結(jié)束中斷處理;不滿,存尾指針;結(jié)束中斷處理發(fā)結(jié)束中斷中斷返回實驗七綜合程序設(shè)計一、預(yù)習(xí)內(nèi)容1中斷,字符輸入輸出的方法2.綜合程序設(shè)計方法二、目的要求.熟悉中斷,掌握字符輸入輸出的方法2.繼續(xù)熟悉基本程序設(shè)計方法,包括循環(huán)程序設(shè)計,分支程序設(shè)計和子程序設(shè)計等.3.練習(xí)綜合程序設(shè)計方法三、實驗內(nèi)容數(shù)據(jù)區(qū)存放有1個0正數(shù),要求自己編寫一個完整的程序?qū)崿F(xiàn)這1個0數(shù)的排序,具體要求如下:1.顯示未排序的1個0數(shù)據(jù);2.提示輸入排序方法,是按從大到小還是從小到大;3從鍵盤輸入'‘或者‘'決定數(shù)據(jù)是按從大到小還是從小到大的順序排列,如果從鍵盤輸入'',則按從大到小順序排列,如果輸入'',則按從小到大順序排列否則提示輸入錯誤,請重新輸入;4.顯示最后的排序結(jié)果。四、實驗報告或作業(yè)1.寫出源程序,畫出程序流程圖;2.匯編,連接及調(diào)試時產(chǎn)生的錯誤,其原因及解決辦法;3.寫出你認(rèn)為在編寫匯編程序中應(yīng)該注意的地方和你的編程經(jīng)驗;4.寫出你對匯編實驗的意見或者建議。參考書目.《IBM-PC匯編語言程序設(shè)計實驗教程》沈美明溫冬張赤紅編著,清華大學(xué)出版社.《IBM-PC宏匯編語言程序設(shè)計》(第二版),韓

溫馨提示

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

最新文檔

評論

0/150

提交評論