版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
./微機(jī)原理與接口技術(shù)實(shí)驗(yàn)指導(dǎo)書方義秋編著計(jì)算機(jī)實(shí)驗(yàn)教學(xué)中心目錄TOC\o"1-3"\n\h\z實(shí)驗(yàn)要求…………………3第一部分微機(jī)原理與匯編程序設(shè)計(jì)…………………4實(shí)驗(yàn)一、認(rèn)識(shí)Tddebug集成操作軟件…………………4實(shí)驗(yàn)二、I/O程序設(shè)計(jì)…………………9實(shí)驗(yàn)三、分支程序設(shè)計(jì)…………………11實(shí)驗(yàn)四、循環(huán)程序設(shè)計(jì)…………………13實(shí)驗(yàn)五、運(yùn)算類程序設(shè)計(jì)………………15實(shí)驗(yàn)六、代碼轉(zhuǎn)換程序設(shè)計(jì)……………19實(shí)驗(yàn)七、宏指令應(yīng)用……………………24實(shí)驗(yàn)八、字符串處理……………………26實(shí)驗(yàn)九、數(shù)據(jù)表格處理…………………28實(shí)驗(yàn)十、子程序與軟中斷程序設(shè)計(jì)……29第二部分接口部分實(shí)驗(yàn)…………………33實(shí)驗(yàn)十一、PC機(jī)內(nèi)部8259中斷應(yīng)用………………33實(shí)驗(yàn)十二、PCI總線中斷應(yīng)用………39實(shí)驗(yàn)十三、8254定時(shí)/計(jì)數(shù)器應(yīng)用……45實(shí)驗(yàn)十四、8255并行接口應(yīng)用…………53實(shí)驗(yàn)十五、交通燈控制…………………58附錄一TD-PIT-B實(shí)驗(yàn)系統(tǒng)的硬件環(huán)境………………60實(shí)驗(yàn)要求預(yù)習(xí)實(shí)驗(yàn)內(nèi)容明確本次實(shí)驗(yàn)?zāi)康呐c任務(wù),了解和掌握實(shí)驗(yàn)所需的理論知識(shí)與相關(guān)接口芯片的工作原理。通過閱讀示例程序,掌握編程方法與相關(guān)技巧。對(duì)每次實(shí)驗(yàn),選擇其中一個(gè)項(xiàng)題目自己設(shè)計(jì)編寫程序。實(shí)驗(yàn)過程帶上理論課教材、實(shí)驗(yàn)指導(dǎo)書與準(zhǔn)備的實(shí)驗(yàn)程序。若為接口電路,請(qǐng)關(guān)閉電源搭接線路,檢查無誤后,再開電源。調(diào)試程序,記錄結(jié)果。實(shí)驗(yàn)結(jié)束后,請(qǐng)關(guān)閉電源,將各實(shí)驗(yàn)器材歸位,清潔自己的桌面。編寫實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目。分析設(shè)計(jì)思想,繪制實(shí)驗(yàn)原理圖、流程圖。程序清單與相關(guān)注釋。分析實(shí)驗(yàn)結(jié)果。說明在實(shí)驗(yàn)過程中遇到了哪些問題,是如何處理的。收獲體會(huì),不足之處和今后應(yīng)注意的問題等。注意事項(xiàng)實(shí)驗(yàn)以前,應(yīng)確保PCI總線擴(kuò)展卡與實(shí)驗(yàn)箱間扁平電纜連接的正確性。實(shí)驗(yàn)前后應(yīng)仔細(xì)檢查實(shí)驗(yàn)箱,防止導(dǎo)線、元件等物品落入裝置內(nèi),導(dǎo)致線路短路、元件損壞。愛護(hù)實(shí)驗(yàn)設(shè)施,插接、拔取排線時(shí),手握白色插頭,不得從線中間拉取。實(shí)驗(yàn)箱電源關(guān)閉后,不能立即重新開啟。關(guān)閉與重新開啟之間至少應(yīng)有30秒間隔。第一部分微機(jī)原理與匯編程序設(shè)計(jì)實(shí)驗(yàn)一、認(rèn)識(shí)Tddebug集成操作軟件實(shí)驗(yàn)?zāi)康氖煜R編程序的開發(fā)過程。認(rèn)識(shí)Tddebug集成操作軟件。掌握在Tddebug集成環(huán)境中編輯、編譯、連接匯編語言程序方法。掌握INT21H軟件中斷來調(diào)用DOS內(nèi)部子程序的方法實(shí)驗(yàn)設(shè)備PC微機(jī)一臺(tái)匯編語言程序的開發(fā)過程匯編語言程序的開發(fā)過程如圖1.1所示,這個(gè)過程主要有編輯、編譯、幾個(gè)步驟構(gòu)成。匯編匯編源程序調(diào)用編輯程序edit.exe調(diào)用編譯程序tasm.exe或masm.exe調(diào)用程序tlink.exe或link.exe編輯.asm匯編.obj.exe編輯編譯圖1.1匯編語言程序開發(fā)過程1、源程序的編輯E:>EDITTEST.ASM編輯過程就是將源程序輸入內(nèi)存,生成一個(gè)擴(kuò)展名為ASM的文本文件并存入硬盤。2、源程序的編譯 E:>TASMTEST.ASM編譯也稱為匯編,就是利用匯編器〔如TASM或MASM〕對(duì)源程序進(jìn)行編譯,生成擴(kuò)展名為OBJ的目標(biāo)文件。在編譯過程中,檢查語法錯(cuò)誤,若有錯(cuò),則不生成目標(biāo)代碼文件,并給出錯(cuò)誤信息。根據(jù)錯(cuò)誤信息應(yīng)返回到編輯狀態(tài),修改源程序。3、目標(biāo)程序的 E:>TLINKTEST.OBJ 過程是利用程序〔如TLINK或LINK〕將用戶目標(biāo)程序和庫文件、定位,生成擴(kuò)展名為EXE的可執(zhí)行文件。時(shí),如果文件找不到所需要的信息,則發(fā)出錯(cuò)誤信息,不生成可執(zhí)行文件。4、調(diào)試可執(zhí)行程序 E:>TDTEST.EXE 如果生成的EXE文件運(yùn)行后,并沒有按照設(shè)計(jì)意圖運(yùn)行,就需要對(duì)程序進(jìn)行調(diào)試,找出錯(cuò)誤。再對(duì)源程序進(jìn)行修改,即重復(fù)進(jìn)行編輯、編譯、、調(diào)試,直到生成完全正確的可執(zhí)行文件為止。Tddebug集成操作軟件使用說明該軟件是集編輯〔Edit.exe〕、編譯〔Tasm.exe〕、連接〔Link.exe〕和調(diào)試〔TD.exe〕等多個(gè)功能于一體,可在DOS環(huán)境下運(yùn)行,為用戶提供了一個(gè)學(xué)習(xí)微機(jī)原理的實(shí)驗(yàn)平臺(tái)。啟動(dòng)TddebugD:\wjyl>Tddebug若啟動(dòng)成功,進(jìn)入主界面。Tddebug的菜單結(jié)構(gòu)主菜單子菜單菜單說明Edit編輯源文件〔.asm〕Compile——Compile編譯源文件〔.asm〕——Link連接目標(biāo)文件〔.obj〕——BuildAll編譯和連接Pmrun進(jìn)入保護(hù)模式調(diào)試狀態(tài)Rmrun——Run運(yùn)行實(shí)模式程序〔.exe〕——Debug進(jìn)入實(shí)模式調(diào)試狀態(tài)〔.exe〕Help版本信息Quit退出Tddebug菜單選擇〔1〕快捷鍵選擇主菜單:ALT+熱鍵〔E,C,P,R,H,Q〕〔2〕按左右鍵或直接使用快捷鍵在主菜單之間切換。使用上下鍵可選擇子菜單中的菜單項(xiàng)。執(zhí)行菜單項(xiàng)選中要執(zhí)行的菜單項(xiàng),鍵入Enter鍵,系統(tǒng)彈出對(duì)話框,輸入需操作的文件名,以Enter鍵結(jié)尾,取消操作按Esc鍵。實(shí)模式調(diào)試窗口說明〔1〕鍵入Alt+R選擇Rmrun主菜單的Debug子菜單彈出實(shí)模式調(diào)試窗口。此時(shí)可能會(huì)疊加一個(gè)報(bào)告無符號(hào)表的對(duì)話框,按Esc鍵關(guān)閉該對(duì)話框。〔2〕該窗口實(shí)際是TurboDebugger調(diào)試器窗口,簡稱TD。其窗口的劃分如圖1-1所示。主菜單條代碼顯示調(diào)試區(qū)寄存器顯示調(diào)試區(qū)標(biāo)志寄存器顯示調(diào)試區(qū)內(nèi)存數(shù)據(jù)顯示調(diào)試區(qū)堆棧顯示調(diào)試區(qū)快捷鍵操作提示區(qū)圖1-1TurboDebugger調(diào)試窗口劃分圖〔3〕主菜單中包含了File、Edit、View、Run、Breakpoints、Data、Options、Windows和Help共9個(gè)菜單項(xiàng)??墒褂脽徭I選擇相應(yīng)的菜單。在調(diào)試程序或操作調(diào)試器中會(huì)使用一些快捷鍵來實(shí)現(xiàn)一些功能,下面將列出常用功能的快捷鍵與實(shí)現(xiàn)功能。快捷鍵:F1:顯示幫助窗口F2:設(shè)置/清除斷點(diǎn)F4:執(zhí)行到光標(biāo)處F5:放大/縮小窗口F7:單步執(zhí)行F8:單句執(zhí)行F9:運(yùn)行程序F10:激活主菜單Ctrl+Break:終止程序執(zhí)行Alt+X:退出TDTab:切換焦點(diǎn)區(qū)域當(dāng)焦點(diǎn)區(qū)域在寄存器顯示區(qū)中時(shí):Ctrl+R:切換16位/32位通用寄存器并顯示Ctrl+I:使光條指示寄存器的內(nèi)容加1Ctrl+D:使光條指示寄存器的內(nèi)容減1Ctrl+Z:使光條指示寄存器的內(nèi)容清零Ctrl+C:手動(dòng)修改光條指示寄存器的內(nèi)容當(dāng)焦點(diǎn)區(qū)域在數(shù)據(jù)顯示區(qū)中時(shí):Ctrl+D:修改數(shù)據(jù)顯示格式Ctrl+G:指定需要顯示的內(nèi)存區(qū)域首地址Ctrl+S:查找指定的字節(jié)值表Ctrl+C:修改光標(biāo)當(dāng)前指示存儲(chǔ)單元的內(nèi)容當(dāng)焦點(diǎn)區(qū)域在代碼顯示區(qū)中時(shí):Ctrl+G:指定需要顯示的代碼區(qū)域首地址Ctrl+S:查找指定的指令數(shù)字鍵/字符:修改光標(biāo)當(dāng)前指示指令實(shí)驗(yàn)內(nèi)容與說明實(shí)驗(yàn)內(nèi)容:數(shù)據(jù)傳送實(shí)驗(yàn)編程將數(shù)據(jù)段中的一個(gè)字符串傳送到附加段中,并輸出附加段中的目標(biāo)字符串到屏幕上。參見示例出程序。修改此程序,采用字符串傳送指令完成。實(shí)驗(yàn)中使用DOS功能調(diào)用〔INT21H〕:參見教材《32位微型計(jì)算機(jī)原理與接口技術(shù)》89頁〔1〕顯示字符串入口:AH=09H調(diào)用參數(shù):DS:DX=串首地址,‘$’為結(jié)束字符?!?〕返回DOS系統(tǒng)入口:AH=4CH調(diào)用參數(shù):AL=返回碼3.有關(guān)字符串的操作指令 參見教材《32位微型計(jì)算機(jī)原理與接口技術(shù)》62頁4.實(shí)驗(yàn)?zāi)康模和ㄟ^對(duì)該程序進(jìn)行調(diào)試,查看程序段、數(shù)據(jù)段、附加段裝入內(nèi)存后的分配情況。單步執(zhí)行數(shù)據(jù)傳送指令后,觀察各個(gè)寄存器與數(shù)據(jù)區(qū)的內(nèi)容。實(shí)驗(yàn)步驟運(yùn)行Tddebug軟件,選擇Edit菜單編寫實(shí)驗(yàn)程序使用Compile菜單中的Compile和Link對(duì)實(shí)驗(yàn)程序進(jìn)行匯編、連接,生成執(zhí)行文件。使用Rmrun菜單中的Run運(yùn)行程序,觀察運(yùn)行結(jié)果。使用Rmrun菜單中的Debug調(diào)試程序,查看程序段、數(shù)據(jù)段、附加段裝入內(nèi)存后的分配情況。單步執(zhí)行數(shù)據(jù)傳送指令后,觀察各寄存器與數(shù)據(jù)區(qū)的內(nèi)容。過程如下:按F7單步執(zhí)行,在代碼區(qū)中有一個(gè)三角,表示正在執(zhí)行的指令。每一條指令的執(zhí)行一定會(huì)使目標(biāo)寄存器和狀態(tài)寄存器發(fā)生變化,從相關(guān)窗口看結(jié)果。檢查內(nèi)存數(shù)據(jù)區(qū)的內(nèi)容,關(guān)鍵是找出用戶程序的數(shù)據(jù)段和附加段:方法1:在CPU窗口按Tab鍵使內(nèi)存數(shù)據(jù)顯示區(qū)成為活動(dòng)區(qū),按Ctrl+G鍵,輸入:"DS或ES寄存器的值:偏移地址",即可顯示用戶指定的數(shù)據(jù)區(qū)方法2:選擇菜單View|Dump,彈出內(nèi)存數(shù)據(jù)顯示窗口。3>查看執(zhí)行結(jié)果:按Alt+F5,切換到用戶窗口。更改數(shù)據(jù)區(qū)中的數(shù)據(jù),考察、調(diào)試程序的正確性。參考程序清單;數(shù)據(jù)傳送實(shí)驗(yàn),采用相對(duì)尋址方式DDATA SEGMENT;定義源數(shù)據(jù)段MSR DB"HELLO,WORLD!$"LEN EQU$-MSRDDATA ENDSEXDA SEGMENT ;定義附加數(shù)據(jù)段MSD DBLENDUP<?>EXDA ENDSMYSTACKSEGMENTSTACK ;定義堆棧段DW20DUP<?>MYSTACKENDSCODE SEGMENT ;定義代碼段ASSUMECS:CODE,DS:DDATA,ES:EXDASTART: MOVAX,DDATA MOV DS,AX ;裝載數(shù)據(jù)段寄存器 MOV AX,EXDA MOV ES,AX ;裝載附加數(shù)據(jù)段寄存器 MOV SI,OFFSETMSR MOV DI,OFFSETMSD MOV CX,LEN MOV BX,0NEXT:MOV AL,MSR[BX] ;開始傳輸數(shù)據(jù) MOV ES:MSD[BX],AL INC BX LOOP NEXT PUSH ESPOP DS ;將附加段寄存器指向的段值賦給數(shù)據(jù)段寄存器 MOV DX,OFFSETMSD MOV AH,9 INT 21H ;顯示字符串 MOV AH,4CH INT 21H ;返回DOS狀態(tài)CODE ENDS ENDSTART實(shí)驗(yàn)二、I/O程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康睦斫廛浿袛嗟恼{(diào)用方法與中斷過程。掌握INT21H軟件中斷來調(diào)用DOS系統(tǒng)I/O子程序的方法。掌握將存儲(chǔ)在內(nèi)存單元中的數(shù)據(jù)在屏幕上顯示的方法。掌握從鍵盤輸入信息到內(nèi)存的方法。實(shí)驗(yàn)設(shè)備PC微機(jī)一臺(tái)實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)DOS功能調(diào)用〔INT21H〕中用于字符輸入〔功能號(hào)為01H〕、字符輸出〔功能號(hào)為02H〕、字符串輸入〔功能號(hào)為0AH〕以與字符串輸出〔功能號(hào)為09H〕的調(diào)用方法。參見教材《32位微型計(jì)算機(jī)原理與接口技術(shù)》89頁。2.閱讀示例程序,掌握輸入/輸出方法。3.從實(shí)驗(yàn)內(nèi)容中任選一道題目,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容1.[示例]:將指定數(shù)據(jù)區(qū)中一個(gè)字節(jié)的數(shù)據(jù)以十六進(jìn)制數(shù)形式顯示在屏幕上。設(shè)計(jì)思路:首先將該數(shù)以十六進(jìn)制數(shù)形式分解,然后將每一位分別轉(zhuǎn)換為ASCII碼送屏幕顯示。其中0H~9H之間的數(shù)加30H,即可得0H~9H的ASCII碼,而AH~FH的ASCII碼,則需再加7H,參見表5-1。參考程序流程如圖2-1所示。示例程序參見參考程序清單。2.編程由鍵盤輸入任意一個(gè)字符,將該字符的ASCII碼值顯示在屏幕上。3.從鍵盤輸入兩個(gè)1位十進(jìn)制數(shù),計(jì)算二者之和,并將結(jié)果顯示在屏幕上。4.編程由鍵盤輸入任意一位數(shù),將該數(shù)以二進(jìn)制數(shù)形式顯示在屏幕上,例:5=00000101B實(shí)驗(yàn)說明存儲(chǔ)在內(nèi)存單元中的數(shù)據(jù)要顯示在屏幕上,必須首先將一個(gè)數(shù)據(jù)區(qū)中的數(shù)分解為各位不同進(jìn)制的數(shù)〔參見表5-1〕,然后轉(zhuǎn)換為字符,通過DOS功能調(diào)用〔INT21H〕完成顯示。例:顯示單個(gè)字符MOVAH,02HMOVDL,待顯示字符的ASCII碼INT21H鍵盤輸入并回顯MOVAH,01HINT21H得到按鍵的ASCII碼,存放于AL中實(shí)驗(yàn)步驟畫出實(shí)驗(yàn)流程圖。運(yùn)行Tddebug軟件,選擇Edit菜單編寫實(shí)驗(yàn)程序使用Compile菜單中的Compile和Link對(duì)實(shí)驗(yàn)程序進(jìn)行匯編、連接,生成執(zhí)行文件。使用Rmrun菜單中的Run運(yùn)行程序,觀察運(yùn)行結(jié)果。使用Rmrun菜單中的Debug調(diào)試程序。單步執(zhí)行指令,觀察各寄存器與數(shù)據(jù)區(qū)的內(nèi)容。更改數(shù)據(jù)區(qū)中的數(shù)據(jù),考察程序的正確性。參考程序清單與流程;將指定數(shù)據(jù)區(qū)SD的數(shù)據(jù)以十六進(jìn)制數(shù)形式顯示在屏幕上圖2-1一個(gè)字節(jié)數(shù)以十六進(jìn)制數(shù)形式顯示處理流程DATA SEGMENT 圖2-1一個(gè)字節(jié)數(shù)以十六進(jìn)制數(shù)形式顯示處理流程MES DB 'Showaashex:',0AH,0DH,'$'SD DB 'a'DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOVAX,DATA MOV DS,AX MOV DX,OFFSETMES;顯示提示信息 MOV AH,09H INT 21H MOV SI,OFFSETSD MOV AL,DS:[SI] AND AL,0F0H ;取高4位MOVCL,4 SHR AL,CL CMP AL,0AH ;是否是A以上的數(shù) C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL ;顯示字符 MOV AH,02H INT 21H MOV AL,DS:[SI] AND AL,0FH ;取低4位 CMP AL,0AH C3 ADD AL,07HC3: ADD AL,30H MOV DL,AL ;顯示字符 MOV AH,02H INT 21H MOV AH,4CH ;返回DOS INT 21HCODE ENDS END START實(shí)驗(yàn)三、分支程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康恼莆毡容^指令、條件轉(zhuǎn)移指令的用法掌握分支結(jié)構(gòu)程序的組成掌握分支程序的設(shè)計(jì)、調(diào)試方法實(shí)驗(yàn)設(shè)備PC微機(jī)一臺(tái)實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)比較指令、條件轉(zhuǎn)移指令的用法。2.閱讀示例程序,掌握分支編程方法與相關(guān)技巧。3.從實(shí)驗(yàn)內(nèi)容中任選一道題目,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容1.[示例]判斷X的大小,并根據(jù)判斷結(jié)果以不同方式分別顯示。2.鍵入一個(gè)數(shù),判斷數(shù)是否在5<X<24X圍內(nèi),是輸出標(biāo)志0,不是輸出-1。3.編寫程序,在屏幕上顯示一組菜單,根據(jù)鍵盤輸入的菜單編號(hào),提示你選擇的菜單名。4.從鍵盤輸入一個(gè)字符,判斷該字符是小寫字母、大寫字母、數(shù)字或其他字符,并給出相應(yīng)的提示。實(shí)驗(yàn)要求與說明1.判斷X的大小,并根據(jù)判斷結(jié)果以不同方式分別顯示設(shè)NUMBER單元的數(shù)X以與數(shù)值N1,N2均為單字節(jié)無符號(hào)數(shù),請(qǐng)判斷X的大小,并根據(jù)判斷結(jié)果分別顯示:N1<=X<=N2,或X<N1,或X>N2。參見程序清單2.鍵入一個(gè)數(shù),判斷數(shù)是否在5<X<24X圍內(nèi),是輸出標(biāo)志0,不是輸出-13.編寫程序,在屏幕上顯示一組菜單,根據(jù)鍵盤輸入的菜單編號(hào),提示你選擇的菜單名。假設(shè)在屏幕上顯示的菜單如下:1………………Open2………………Save3………………Copy4………………Exit<Pleasechoose1,2,3,OR5>——若輸入1,則顯示"IchooseOpen"后程序結(jié)束;若輸入2,則顯示"IchooseSave"后程序結(jié)束;若輸入3,則顯示"IchooseCopy"后程序結(jié)束;若輸入4,則顯示"IchooseExit"后程序結(jié)束;若輸入其它字符,則顯示"Youpressanerrorkey"后程序結(jié)束;注意可使用宏指令簡化程序。4.從鍵盤輸入一個(gè)字符,判斷該字符是小寫字母、大寫字母、數(shù)字或其他字符,并給出相應(yīng)的提示。 數(shù)字0~9的ASCII碼為30H~39H;大寫字母的ASCII碼為41H~5AH;小寫字母的ASCII碼為61H~7AH;實(shí)驗(yàn)步驟畫出實(shí)驗(yàn)流程圖。運(yùn)行Tddebug軟件,選擇Edit菜單編寫實(shí)驗(yàn)程序使用Compile菜單中的Compile和Link對(duì)實(shí)驗(yàn)程序進(jìn)行匯編、連接,生成執(zhí)行文件。使用Rmrun菜單中的Run運(yùn)行程序,觀察運(yùn)行結(jié)果。使用Rmrun菜單中的Debug調(diào)試程序。觀察構(gòu)成分支條件的各標(biāo)志的變化情況與相關(guān)寄存器內(nèi)容。更改數(shù)據(jù)區(qū)中的數(shù)據(jù),考察程序的正確性。參考程序清單;設(shè)NUMBER單元的數(shù)X以與數(shù)值N1,N2均為單字節(jié)無符號(hào)數(shù),請(qǐng)判斷X的大小,并根據(jù)判斷結(jié)果分別顯示:N1<=X<=N2,或X<N1,或X>N2。DATASEGMENTUSE16MESG1DB'N1<=X<=N2$'MESG2DB'X<N1$'MESG3DB'X>N2$'NUMBERDB66;無符號(hào)數(shù)XN1EQU22N2EQU88DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESG1CMPNUMBER,N1JAENEXT;X≥N1轉(zhuǎn)MOVDX,OFFSETMESG2JMPDISPNEXT:CMPNUMBER,N2EDISP;X≤N2轉(zhuǎn)MOVDX,OFFSETMESG3DISP:MOVAH,9INT21H;顯示結(jié)果信息MOVAH,4CHINT21H;返回DOSCODEENDSENDBEG實(shí)驗(yàn)四、循環(huán)程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康?.掌握比較指令、轉(zhuǎn)移指令和循環(huán)指令的使用方法2.掌握循環(huán)結(jié)構(gòu)程序的組成3.掌握循環(huán)程序的設(shè)計(jì)、調(diào)試方法實(shí)驗(yàn)設(shè)備PC微機(jī)一臺(tái)實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)比較指令、條件轉(zhuǎn)移指令和循環(huán)指令。2.閱讀示例程序,掌握循環(huán)程序的結(jié)構(gòu)、循環(huán)控制方法與相關(guān)技巧。3.從實(shí)驗(yàn)內(nèi)容中任選一道題目,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容1.[示例]求某數(shù)據(jù)區(qū)內(nèi)負(fù)數(shù)的個(gè)數(shù)2.試編程統(tǒng)計(jì)數(shù)據(jù)區(qū)中正數(shù)、零和負(fù)數(shù)的個(gè)數(shù)。3.編程求無符號(hào)數(shù)字節(jié)序列中最大值和最小值。4.從鍵盤輸入一字符串,搜索該字符串中是否有字符"A",若有請(qǐng)輸出其在串中的位置。實(shí)驗(yàn)說明1.求某數(shù)據(jù)區(qū)內(nèi)負(fù)數(shù)的個(gè)數(shù)為統(tǒng)計(jì)數(shù)據(jù)區(qū)內(nèi)負(fù)數(shù)的個(gè)數(shù),需逐個(gè)判別區(qū)內(nèi)的每一個(gè)數(shù)據(jù),然后將所有數(shù)據(jù)中凡是符號(hào)位為1的數(shù)據(jù)個(gè)數(shù)累加起來,即得到區(qū)內(nèi)包含負(fù)數(shù)的個(gè)數(shù)。參見程序清單.2.試編程統(tǒng)計(jì)數(shù)據(jù)區(qū)中正數(shù)、零和負(fù)數(shù)的個(gè)數(shù)。3.編程求無符號(hào)數(shù)字節(jié)序列中最大值和最小值實(shí)驗(yàn)中可使用BH和BL作為暫存現(xiàn)行最大值和最小值,且在初始時(shí)將BH和BL初始化為首字節(jié)的內(nèi)容,循環(huán)依次比較每個(gè)字節(jié)的內(nèi)容,求得最大值〔存于BH中〕和最小值〔存于BL中〕,送屏幕顯示。4..從鍵盤輸入一字符串,搜索該字符串中是否有字符"A",若有請(qǐng)輸出其在串中的位置。實(shí)驗(yàn)步驟畫出實(shí)驗(yàn)流程圖。運(yùn)行Tddebug軟件,選擇Edit菜單編寫實(shí)驗(yàn)程序使用Compile菜單中的Compile和Link對(duì)實(shí)驗(yàn)程序進(jìn)行匯編、連接,生成執(zhí)行文件。使用Rmrun菜單中的Run運(yùn)行程序,觀察運(yùn)行結(jié)果。使用Rmrun菜單中的Debug調(diào)試程序。觀察構(gòu)成分支、循環(huán)條件的各標(biāo)志的變化情況與相關(guān)寄存器內(nèi)容。更改數(shù)據(jù)區(qū)中的數(shù)據(jù),考察程序的正確性。參考程序清單;確定數(shù)據(jù)區(qū)NUMB中負(fù)數(shù)的個(gè)數(shù)〔存放于BL中〕DDATA SEGMENTNUMB DB 12H,88H,82H,89H,33H,90H,01H,10H,0BDH,01HMES DB 'Thenumberofnegativeis:$'DDATA ENDSCODESEGMENT ASSUMECS:CODE,DS:DDATASTART:MOV AX,DDATA MOV DS,AX MOV DI,OFFSETNUMB XOR BL,BL MOV CX,10A1: MOV AL,[DI] TESTAL,80H JE A2 INC BLA2: INC DI LOOP A1;統(tǒng)計(jì)負(fù)數(shù)個(gè)數(shù) MOV DX,OFFSETMES MOV AH,09H INT 21H MOV AL,BL ;顯示負(fù)數(shù)個(gè)數(shù),注意與實(shí)驗(yàn)二所使用的方法的區(qū)別MOVCX,2A3:PUSHCXMOVCL,4ROLAL,CLPOPCXMOVBLANDAL,0FHCMPAL,0AH A4 ADDAL,07H A4:ADDAL,30H MOVDL,AL MOVAH,02HINT21HMOVAL,BLLOOPA3 MOV AH,4CH INT 21HCODEENDSENDSTART實(shí)驗(yàn)五、運(yùn)算類程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康恼莆者\(yùn)算類指令對(duì)各狀態(tài)標(biāo)志位的影響與其測(cè)試方法掌握運(yùn)用運(yùn)算類指令編程與調(diào)試的方法掌握子程序設(shè)計(jì)與調(diào)用方法實(shí)驗(yàn)設(shè)備PC機(jī)一臺(tái)實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)運(yùn)算類指令的用法。2.復(fù)習(xí)子程序設(shè)計(jì)與調(diào)用方法。3.閱讀示例程序,掌握子程序的編程方法與相關(guān)技巧。4.從實(shí)驗(yàn)內(nèi)容中任選一道題目,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,用子程序處理方式編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容1.示例:二進(jìn)制雙精度加法運(yùn)算2.十進(jìn)制數(shù)的BCD碼加減法運(yùn)算3.乘法運(yùn)算4.除法運(yùn)算5.編程用減奇數(shù)法開平方實(shí)驗(yàn)要求與說明80x86指令系統(tǒng)提供了實(shí)現(xiàn)加、減、乘、除運(yùn)算的基本指令,可對(duì)表4-1所示的數(shù)據(jù)類型進(jìn)行算術(shù)運(yùn)算。表4-1數(shù)據(jù)類型算術(shù)運(yùn)算表數(shù)制二進(jìn)制BCD碼帶符號(hào)無符號(hào)組合非組合運(yùn)算符+、—、×、÷+、—+、—、×、÷操作符字節(jié)、字、多精度字節(jié)〔二位數(shù)字〕字節(jié)〔一位數(shù)字〕二進(jìn)制雙精度加法運(yùn)算計(jì)算X+Y=Z,并將結(jié)果輸出到屏幕上。其中X=001565A0H,Y=0021B79EH,運(yùn)算的結(jié)果Z=00371D3EH?!?〕本實(shí)驗(yàn)是雙精度〔2個(gè)16位,即32位〕運(yùn)算,利用累加器AX,先求低16位和,并存儲(chǔ)于低地址存儲(chǔ)單元,后求高16位和,再存入高地址存儲(chǔ)單元。由于低位和可能向高位有進(jìn)位,此時(shí)CF=1,因而高位字相加語句需用ADC指令,即同時(shí)加上CF中的1。參見參考程序清單?!?〕畫出X、Y、Z三個(gè)數(shù)在內(nèi)存中的分布示意圖?!?〕修改示例程序,直接使用32位寄存器和32位加法指令完成本實(shí)驗(yàn)功能。十進(jìn)制數(shù)的BCD碼加減法運(yùn)算計(jì)算X-Y=Z,其中,X、Y、Z為非組合的BCD碼,X=0400H,Y=0102H,運(yùn)算結(jié)果Z=0208H。〔1〕編寫兩個(gè)數(shù)值長度不等的BCD碼相加程序。思路:對(duì)應(yīng)位用ADC帶進(jìn)位加法求和〔考慮CF標(biāo)志〕,再進(jìn)行DAA調(diào)整〔只對(duì)AL處理。乘法運(yùn)算本實(shí)驗(yàn)要XX現(xiàn)十進(jìn)制數(shù)乘法,被乘數(shù)和乘數(shù)均以BCD碼形式存放在內(nèi)存中,被乘數(shù)為02345,乘數(shù)為3,運(yùn)算結(jié)果7035,顯示在屏幕上為:000007000305?!?〕調(diào)試程序觀察加、減、乘、除與相關(guān)調(diào)整指令,對(duì)標(biāo)志位的影響。除法運(yùn)算本實(shí)驗(yàn)要求在內(nèi)存中存儲(chǔ)5個(gè)無符號(hào)數(shù),將其用101H除,在進(jìn)行BCD碼轉(zhuǎn)換后,若奇偶位為偶〔PF=1〕,則顯示"P";為負(fù)〔SF=1〕,則顯示"S";為零〔ZF=1〕,則顯示"Z";若PF、SF、ZF標(biāo)志皆為0,則顯示";"。除法指令DIV、IDIV執(zhí)行后,不影響任何標(biāo)志位,而BCD碼調(diào)整指令A(yù)AD會(huì)影響PF、SF、ZF標(biāo)志。通過本實(shí)驗(yàn)考察這些指令對(duì)標(biāo)志的影響情況。編程用減奇數(shù)法開平方80x86指令系統(tǒng)中沒有開平方指令,因此,開平方運(yùn)算是通過程序來實(shí)現(xiàn)的。用減奇數(shù)法可求得近似平方根,獲得平方根的整數(shù)部分。因?yàn)?N個(gè)自然數(shù)中奇數(shù)之和等于,即:,展開:1+3+5=9=1+3+5+7=16=1+3+5+7+9+11+13+15=64=所以,若要做的運(yùn)算,就可以從S中逐次減去自然數(shù)中的奇數(shù)1,3,5,7,……,一直到被減數(shù)為0或不夠減下一個(gè)自然數(shù)的奇數(shù)為止,然后統(tǒng)計(jì)減去自然數(shù)的奇數(shù)的個(gè)數(shù),它就是S的近似平方根。〔1〕本實(shí)驗(yàn)要求編程實(shí)現(xiàn)計(jì)算0040H的開平方值,并將運(yùn)算結(jié)果顯示在屏幕上?!?〕試編程,由鍵盤輸入一個(gè)十六進(jìn)制數(shù),將其轉(zhuǎn)換為十進(jìn)制數(shù),并進(jìn)行開平方運(yùn)算。實(shí)驗(yàn)步驟畫出實(shí)驗(yàn)流程圖。畫出內(nèi)存數(shù)據(jù)分布示意圖運(yùn)行Tddebug軟件,選擇Edit菜單編寫實(shí)驗(yàn)程序使用Compile菜單中的Compile和Link對(duì)實(shí)驗(yàn)程序進(jìn)行匯編、連接,生成執(zhí)行文件。使用Rmrun菜單中的Run運(yùn)行程序,觀察運(yùn)行結(jié)果。使用Rmrun菜單中的Debug調(diào)試程序。單步執(zhí)行加、減、乘、除與相關(guān)調(diào)整指令時(shí),觀察各標(biāo)志的變化情況與寄存器、數(shù)據(jù)區(qū)的內(nèi)容。更改數(shù)據(jù)區(qū)中的數(shù)據(jù),考察程序的正確性。參考程序清單雙精度加法運(yùn)算;計(jì)算X+Y=Z;X=001565A0H,Y=0021B79EH,運(yùn)算的結(jié)果Z=00371D3EH。DATASEGMENTMES DB 'Theresultis:$'XL DW65A0HXH DW0015HYL DW0B79EHYH DW0021HDATA ENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX MOV DX,OFFSETMES ;顯示信息 MOV AH,09H INT 21H MOVAX,XL;計(jì)算結(jié)果 ADDAX,YL MOV BX,AX MOVAX,XHADCAX,YH PUSHBXMOVCX,4;顯示高位字MOVDX,AXAGA1:PUSHCXMOVCL,4ROLDX,CLPOPCX MOVAL,DLANDAL,0FH CMPAL,10 JCNEXT1ADDAL,7NEXT1:ADDAL,30HMOVAH,0EH INT10HLOOPAGA1POP BX MOV AX,BXMOVCX,4;顯示低位字MOVDX,AXAGA2:PUSHCXMOVCL,4ROLDX,CLPOPCX MOVAL,DLANDAL,0FH CMPAL,10 JCNEXT2ADDAL,7NEXT2:ADDAL,30HMOVAH,0EH INT10HLOOPAGA2 MOV AH,4CHINT 21HCODEENDSENDSTART實(shí)驗(yàn)六、代碼轉(zhuǎn)換程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康牧私馕C(jī)中所使用的各類數(shù)制與編碼方法。掌握不同進(jìn)制數(shù)與編碼相互轉(zhuǎn)換的程序設(shè)計(jì)方法,加深對(duì)數(shù)碼轉(zhuǎn)換的理解。掌握將存儲(chǔ)在內(nèi)存單元中的數(shù)據(jù)以十六進(jìn)制數(shù)形式、十進(jìn)制數(shù)形式和二進(jìn)制數(shù)形式顯示在屏幕上的方法。實(shí)驗(yàn)設(shè)備PC微機(jī)一臺(tái)實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)運(yùn)算類指令的用法。2.復(fù)習(xí)子程序設(shè)計(jì)與調(diào)用方法。3.閱讀示例程序,掌握子程序的編程方法與相關(guān)技巧。4.從實(shí)驗(yàn)內(nèi)容中任選一道題目,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,用子程序處理方式編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容1.[示例]將5位十進(jìn)制數(shù)的數(shù)字串轉(zhuǎn)換為一個(gè)字的二進(jìn)制數(shù)2.編寫程序?qū)?nèi)存中一個(gè)字的數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的數(shù)字串顯示。3.編程將十進(jìn)制的數(shù)字串轉(zhuǎn)換為BCD碼4.編程將BCD碼轉(zhuǎn)換為二進(jìn)制數(shù)5.編程將二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)顯示實(shí)驗(yàn)原理與說明6-16-1計(jì)算機(jī)輸入設(shè)備輸入的信息一般是由ASCII碼或BCD碼表示的數(shù)據(jù)或字符,CPU一般均用二進(jìn)制數(shù)進(jìn)行計(jì)算或用其他信息進(jìn)行處理,處理的結(jié)果又必須依照外設(shè)的要求變?yōu)锳SCII碼、或BCD碼或七段顯示碼等。因此,在應(yīng)用軟件中,各類數(shù)制的轉(zhuǎn)換和代碼的轉(zhuǎn)換是必不可少的。計(jì)算機(jī)與外設(shè)間的數(shù)碼轉(zhuǎn)換關(guān)系如圖6-1所示,數(shù)碼對(duì)應(yīng)關(guān)系如表6-1所示。6-16-1將十進(jìn)制數(shù)的數(shù)字串轉(zhuǎn)換為二進(jìn)制數(shù)十進(jìn)制數(shù)可以表示為:其中代表十進(jìn)制數(shù)1、2、3、…、9、0。 上式可以轉(zhuǎn)換為: 由上式可歸納出十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)的方法:從十進(jìn)制數(shù)的最高位開始做乘10加次位的操作,依次類推,則可求出二進(jìn)制數(shù)結(jié)果。 本實(shí)驗(yàn)要求將緩沖區(qū)中的一個(gè)5位十進(jìn)制數(shù)00012的ASCII碼轉(zhuǎn)換成二進(jìn)制數(shù),并將轉(zhuǎn)換結(jié)果以十六進(jìn)制數(shù)形式000C按位顯示在屏幕上。轉(zhuǎn)換過程的參考程序清單見后參考程序清單1,參考流程如圖3-2所示。 修改該示例程序,從鍵盤任意輸入5個(gè)數(shù),實(shí)現(xiàn)轉(zhuǎn)換并顯示。將內(nèi)存中一個(gè)字的數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的數(shù)字串。十六位二進(jìn)制數(shù)〔一個(gè)字〕的值域?yàn)?~65535,最大可轉(zhuǎn)換為5位十進(jìn)制數(shù)。五位十進(jìn)制數(shù)可表示為:因此,將十六位二進(jìn)制數(shù)轉(zhuǎn)換為5位ASCII碼表示的十進(jìn)制數(shù)數(shù)字串,即采用除10取余方法,分別求,并將它們轉(zhuǎn)換為ASCII碼。以字符串方式顯示在屏幕上。轉(zhuǎn)換部分的參考流程參見圖6-4。 假設(shè)緩沖區(qū)中存放的數(shù)是000CH轉(zhuǎn)換成十進(jìn)制數(shù)的數(shù)字串后,在屏幕顯示"00012"。將十進(jìn)制數(shù)的數(shù)字串轉(zhuǎn)換為BCD碼〔1〕本實(shí)驗(yàn)要求將一個(gè)5位十進(jìn)制數(shù)的數(shù)字串"54321"的ASCII碼存放在數(shù)據(jù)區(qū)中,轉(zhuǎn)換為BCD碼后,將轉(zhuǎn)換結(jié)果分別顯示在屏幕上,即顯示:01,02,03,04,05。若輸入的不是十進(jìn)制數(shù)的ASCII碼,則輸出"FF"。提示:一個(gè)字節(jié)取其低4位即變?yōu)锽CD碼。轉(zhuǎn)換部分的實(shí)驗(yàn)參考流程見圖6-3?!?〕修改程序,實(shí)現(xiàn)從鍵盤輸入5位十進(jìn)制數(shù)54321,轉(zhuǎn)換BCD碼后以輸入順序一致顯示,即顯示:0504030201圖6-3將十進(jìn)制數(shù)的數(shù)字串轉(zhuǎn)換為BCD碼參考流程圖6-2將5位十進(jìn)制數(shù)的數(shù)字串轉(zhuǎn)換為二進(jìn)制數(shù)參考流程圖6-3將十進(jìn)制數(shù)的數(shù)字串轉(zhuǎn)換為BCD碼參考流程圖6-2將5位十進(jìn)制數(shù)的數(shù)字串轉(zhuǎn)換為二進(jìn)制數(shù)參考流程編程將BCD碼轉(zhuǎn)換為二進(jìn)制數(shù)本實(shí)驗(yàn)要求將4個(gè)二位十進(jìn)制的BCD碼存放在某一段內(nèi)存單元中,轉(zhuǎn)換出的二進(jìn)制碼存入其后的存儲(chǔ)單元中,轉(zhuǎn)換結(jié)果以十六進(jìn)制方式送屏幕顯示。轉(zhuǎn)換部分的實(shí)驗(yàn)流程參見圖6-5。假設(shè)4個(gè)十進(jìn)制數(shù)是:17,34,51,68用BCD碼表示為:01H,07H,03H,04H,05H,01H,06H,08H顯示為:0011,0022,0033,0044實(shí)驗(yàn)步驟畫出實(shí)驗(yàn)流程圖。運(yùn)行Tddebug軟件,選擇Edit菜單編寫實(shí)驗(yàn)程序使用Compile菜單中的Compile和Link對(duì)實(shí)驗(yàn)程序進(jìn)行匯編、連接,生成執(zhí)行文件。使用Rmrun菜單中的Run運(yùn)行程序,觀察運(yùn)行結(jié)果。使用Rmrun菜單中的Debug調(diào)試程序。單步執(zhí)行指令,觀察各寄存器與數(shù)據(jù)區(qū)的內(nèi)容。更改數(shù)據(jù)區(qū)中的數(shù)據(jù),考察程序的正確性。圖6-5將BCD碼轉(zhuǎn)換為二進(jìn)制數(shù)參考流程圖6-4將內(nèi)存中一個(gè)字的數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的數(shù)字串參考流程圖6-5將BCD碼轉(zhuǎn)換為二進(jìn)制數(shù)參考流程圖6-4將內(nèi)存中一個(gè)字的數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)的數(shù)字串參考流程參考程序清單將十進(jìn)制數(shù)的數(shù)字串轉(zhuǎn)換為數(shù)DDATA SEGMENTMES DB 'Theasciicodeofdecimalcodeare:$'BUF DB 30H,30H,30H,31H,32H;十進(jìn)制00012的ASCII碼 DB 10HDUP<0>DDATA ENDSCODESEGMENT ASSUMECS:CODE,DS:DDATASTART:MOVAX,DDATA MOV DS,AX MOVSI,OFFSETBUF MOV BL,0AH;送被乘數(shù) MOV CX,0004H;送轉(zhuǎn)換位數(shù)MOVAH,00H MOV AL,[SI];取第一位ASCII碼 SUB AL,30HA1:INCSIIMULBL;乘10 ADD AL,[SI] SUB AL,30HLOOP A1MOVBX,AXMOV DX,OFFSETMES;顯示提示信息 MOV AH,09H INT 21HMOVAX,BX;顯示結(jié)果MOVCX,4A3:PUSHCXMOVCL,4ROLAX,CLPOPCXMOVBX,AXANDAL,0FHCMPAL,0AH A2 ADDAL,07H A2:ADDAL,30H MOVDL,AL MOVAH,02HINT21HMOVAX,BXLOOPA3MOVAH,4CH INT21HCODE ENDS END START實(shí)驗(yàn)七、宏指令應(yīng)用實(shí)驗(yàn)?zāi)康?.熟悉宏指令、宏定義、宏調(diào)用以與宏展開的概念,掌握宏指令的定義與調(diào)用方法。2.掌握子程序的定義、調(diào)用以與調(diào)用程序與子程序之間參數(shù)的傳遞方法。3.了解宏指令與子程序的異同以與各自的使用場合。實(shí)驗(yàn)設(shè)備PC微機(jī)一臺(tái)實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)宏指令的定義與調(diào)用方法。2.復(fù)習(xí)子程序的定義與調(diào)用方法。2.閱讀示例程序,掌握編程方法與相關(guān)技巧。3.從實(shí)驗(yàn)內(nèi)容中任選一道題目,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容1.[示例]利用宏指令分組顯示變量中多位二進(jìn)制數(shù)。2.從鍵盤輸入一個(gè)5位的十進(jìn)制數(shù),定義一個(gè)帶參數(shù)的宏,實(shí)現(xiàn)以二進(jìn)制、十進(jìn)制、十六進(jìn)制、八進(jìn)制數(shù)的形式輸出。實(shí)驗(yàn)要求與說明1.[示例]利用宏指令分組顯示變量中多位二進(jìn)制數(shù)。定義CRLF宏指令實(shí)現(xiàn)回車換行功能;定義DISP宏指令實(shí)現(xiàn)分組〔4位一組〕顯示變量VAR中NN位二進(jìn)制數(shù)。參見程序清單。2.從鍵盤輸入一個(gè)5位的十進(jìn)制數(shù),定義一個(gè)帶參數(shù)的宏,實(shí)現(xiàn)以二進(jìn)制、十進(jìn)制、16進(jìn)制、8進(jìn)制數(shù)的形式輸出。實(shí)驗(yàn)步驟畫出實(shí)驗(yàn)流程圖。運(yùn)行Tddebug軟件,選擇Edit菜單編寫實(shí)驗(yàn)程序使用Compile菜單中的Compile和Link對(duì)實(shí)驗(yàn)程序進(jìn)行匯編、連接,生成執(zhí)行文件。使用Rmrun菜單中的Run運(yùn)行程序,觀察運(yùn)行結(jié)果。使用Rmrun菜單中的Debug調(diào)試程序。觀察宏調(diào)用以與宏展開情況。參考程序清單;定義CRLF宏指令實(shí)現(xiàn)回車換行功能;;定義DISP宏指令實(shí)現(xiàn)分組〔4位一組〕顯示變量VAR中NN位二進(jìn)制數(shù)。CRLFMACROMOVAH,0EHMOVAL,0DHINT10HMOVAL,0AHINT10HENDMDISPMACROVAR,NNLOCALLAST1,LAST2MOVCH,NN/4LAST1:MOVCL,4LAST2:MOVAL,'0'ROLVAR,1ADCAL,0MOVAH,0EHINT10HDECCLJNZLAST2MOVAL,''INT10HDECCHJNZLAST1CRLFENDMCODESEGMENTASSUMECS:CODENUMDB88HBEG:MOVBX,1234HDISPBH,8;顯示BH中的8位數(shù)DISPBX,16;顯示BX中的16位數(shù)DISPNUM,8;顯示NUM單元中的8位數(shù)MOVAH,4CHINT21HCODEENDSENDBEG;定義CRLF宏指令實(shí)現(xiàn)回車換行功能;;定義DISP宏指令實(shí)現(xiàn)分組〔4位一組〕顯示變量VAR中NN位二進(jìn)制數(shù)。CRLFMACROMOVAH,0EHMOVAL,0DHINT10HMOVAL,0AHINT10HENDMDISPMACROVAR,NNLOCALLAST1,LAST2MOVCH,NN/4LAST1:MOVCL,4LAST2:MOVAL,'0'ROLVAR,1ADCAL,0MOVAH,0EHINT10HDECCLJNZLAST2MOVAL,''INT10HDECCHJNZLAST1CRLFENDMCODESEGMENTASSUMECS:CODENUMDB88HBEG:MOVEBX,12345678HDISPBH,8;顯示BH中的8位數(shù)DISPBX,16;顯示BX中的16位數(shù)DISPEBX,32;顯示EBX中的32位數(shù)DISPNUM,8;顯示NUM單元中的8位數(shù)MOVAH,4CHINT21HCODEENDSENDBEG實(shí)驗(yàn)八、字符串處理實(shí)驗(yàn)?zāi)康?.掌握字符串操作指令。2.掌握實(shí)現(xiàn)字符串的搜索、排序等操作。實(shí)驗(yàn)設(shè)備PC微機(jī)一臺(tái)實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)字符串操作指令。2.閱讀示例程序,掌握編程方法與相關(guān)技巧。3.從實(shí)驗(yàn)內(nèi)容中任選一道題目,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容1.[示例]為標(biāo)準(zhǔn)ASCII設(shè)置校驗(yàn)碼。2.從源串字符中搜索一個(gè)字串。3.從鍵盤輸入一系列字符串,對(duì)他們按從小到大的順序排序輸出在屏幕上。4.輸入一條英語句子,將其規(guī)X化:即將每個(gè)單詞的第一個(gè)字符變?yōu)榇髮?其余為小寫,并將規(guī)X化后的句子顯示在屏幕上,同時(shí)統(tǒng)計(jì)出該句中單詞個(gè)數(shù),顯示:Number=?。實(shí)驗(yàn)要求與說明1.[示例]為標(biāo)準(zhǔn)ASCII設(shè)置校驗(yàn)碼標(biāo)準(zhǔn)ASCII碼的最高位〔D7位〕為0。微機(jī)系統(tǒng)與I/O設(shè)備之間在字符傳送過程中,為了使接收方能夠判斷出接收自負(fù)的正確性,最簡易的方法是定義標(biāo)準(zhǔn)ASCII碼的最高位為奇偶校驗(yàn)位。包括校驗(yàn)位在內(nèi)一個(gè)字節(jié)中"1"的個(gè)數(shù)為奇數(shù)個(gè),則稱為奇校驗(yàn)ASCII碼,反之,一個(gè)字節(jié)中"1"的個(gè)數(shù)為偶數(shù)個(gè)則稱為偶校驗(yàn)ASCII碼。校驗(yàn)位的值由發(fā)送方設(shè)置,接收方負(fù)責(zé)校驗(yàn),如果雙方約定是偶校驗(yàn)傳送,而接收方收到的一個(gè)字符編碼中,有奇數(shù)個(gè)"1",那么這個(gè)字符肯定是錯(cuò)誤的。本示例程序要求把STRING單元中的一串標(biāo)準(zhǔn)ASCII碼轉(zhuǎn)換成奇校驗(yàn)ASCII碼,存入BUF單元開始的緩沖區(qū)。技巧:通過ANDAL,AL指令對(duì)P標(biāo)志設(shè)置,判斷P標(biāo)志,決定是否設(shè)置校驗(yàn)位D7,由指令ORAL,80H完成。參見程序清單。2.從源串字符中搜索一個(gè)子串。 假設(shè)從STRING單元開始有一串自負(fù),程序執(zhí)行開始采用人機(jī)對(duì)話方式,從鍵盤輸入一個(gè)任意長度的子串,清查找源串中是否蘊(yùn)含著鍵入的子串,并給出結(jié)果顯示。思路:鍵盤輸入子串:用INT21H的0AH功能,將子串存入內(nèi)存。搜索次數(shù)=源串長-子串長+1字符串的比較:REPECMPSB,再判斷Z標(biāo)確定是否找到。參考程序清單;把STRING單元中的一串標(biāo)準(zhǔn)ASCII碼轉(zhuǎn)換成奇校驗(yàn)ASCII碼,存入BUF單元開始的緩沖區(qū)。采用附加段與數(shù)據(jù)段"重疊"編程風(fēng)格。DATASEGMENTSTRINGDB'THEQUICKBROWNFOXJUMPSOVERLAZYDOG'COUNTEQU$-STRING;統(tǒng)計(jì)串長度BUFDBCOUNTDUP<?>;預(yù)留等長的緩沖區(qū)DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA,ES:DATABEG:MOVAX,DATAMOVDS,AX;DS初始化MOVES,AX;ES初始化,使DS=ES=DATAMOVCX,COUNTMOVSI,OFFSETSTRING;源串首址→SIMOVDI,OFFSETBUF;目標(biāo)區(qū)地址→DICLDLOAD:LODSB;DS:[SI]→AL,SI+1→SIANDALJNPSTORE;有奇數(shù)個(gè)"1"轉(zhuǎn)ORAL,80H;否則置校驗(yàn)為位1STORE:STOSB;AL→ES:[DI],DI+1→DILOOPLOADMOVAH,4CHINT21HCODEENDSENDBEG實(shí)驗(yàn)九、數(shù)據(jù)表格處理實(shí)驗(yàn)?zāi)康?.掌進(jìn)一步掌握分支、循環(huán)、子程序調(diào)用等基本的程序結(jié)構(gòu)。2.掌握實(shí)現(xiàn)數(shù)據(jù)查找、插入、刪除、排序等操作。實(shí)驗(yàn)設(shè)備PC微機(jī)一臺(tái)實(shí)驗(yàn)預(yù)習(xí)要求從實(shí)驗(yàn)內(nèi)容中任選一道題目,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容假設(shè)內(nèi)存中從BUF單元開始存放了10個(gè)同學(xué)的成績,要求完成:1.統(tǒng)計(jì)與格學(xué)生的人數(shù),不與格學(xué)生人數(shù),以與平均成績。2.找出最高成績和最低成績。3.對(duì)學(xué)生成績進(jìn)行從大到小排序。4.刪除指定學(xué)生的成績。5.在指定位置上插入一個(gè)同學(xué)的成績。實(shí)驗(yàn)十、子程序與軟中斷程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康恼莆兆映绦虻亩x和調(diào)用方法掌握系統(tǒng)功能調(diào)用程序〔軟中斷程序〕的使用和編寫方法了解子程序與軟中斷之間的差異。認(rèn)識(shí)和理解中斷特性。實(shí)驗(yàn)設(shè)備PC微機(jī)一臺(tái)實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)子程序的定義與調(diào)用方法。2.復(fù)習(xí)中斷的概念,了解PC機(jī)系統(tǒng)中斷向量表的占用情況〔見表10-1〕。3.復(fù)習(xí)子程序的調(diào)用過程與軟中斷調(diào)用過程之間異同。4.閱讀示例程序,掌握編寫軟中斷程序的方法與相關(guān)技巧。5.從實(shí)驗(yàn)內(nèi)容中任選一道題目,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容從PC機(jī)系統(tǒng)中斷向量表的占用情況可見,42H~4FH是系統(tǒng)未使用的中斷向量,我們可利用它們開發(fā)用戶自己軟中斷程序。1.[示例]實(shí)驗(yàn)要求利用47H號(hào)中斷將一組字符轉(zhuǎn)換成16進(jìn)制數(shù)碼,并在屏幕上顯示出來。參見參考程序清單。2〕編程求出一系列數(shù)據(jù)中的最大值、最小值,并送屏幕顯示。要求:①將求最大值和最小值程序的程序段編寫為46H號(hào)軟中斷,利用46H號(hào)中斷調(diào)用實(shí)現(xiàn)求最大值和最小值功能;②將送屏幕顯示用子程序?qū)崿F(xiàn)。實(shí)驗(yàn)說明用戶可將常用的具有特定功能的程序段編寫成子程序使用。一般過程定義偽操作的格式為:過程名PROC Attribute……過程名 ENDPAttribute是指類型屬性,可以是NEAR或FAR,調(diào)用程序和過程在同一個(gè)代碼段中使用NEAR,不在同一個(gè)代碼段中,使用FAR。子程序段內(nèi)調(diào)用與返回〔1〕調(diào)用格式:CALL過程名〔2〕CPU執(zhí)行CALL指令首先將斷口地址壓入堆棧,為返回做準(zhǔn)備,然后把子程序入口的有效地址→IP,從而轉(zhuǎn)入子程序?!?〕返回指令:RET在具有NEAR屬性的子程序中,RET指令從棧頂彈出2個(gè)字節(jié)→IP,然后SP+2→SP。從而回到斷點(diǎn)。軟中斷程序設(shè)計(jì)10-110-1〔1〕中斷:中斷就是當(dāng)系統(tǒng)運(yùn)行或者程序運(yùn)行期間在遇到某些特殊情況時(shí),需CPU暫停執(zhí)行現(xiàn)行程序,自動(dòng)去處理隨機(jī)事件,處理完畢后再返回被中斷的程序,這一全過程稱為中斷。處理隨機(jī)事件的程序,就稱為中斷服務(wù)子程序。中斷分為CPU中斷〔像除法錯(cuò)等〕、軟件中斷〔INTn指令而引發(fā)的中斷〕和硬件中斷〔由CPU以外的器件發(fā)出的中斷請(qǐng)求信號(hào)而引發(fā)的中斷〕?!?〕中斷向量中斷向量就是中斷子程序的入口地址〔由段基址CS和有效地址IP組成,占4個(gè)字節(jié)〕存儲(chǔ)在中斷向量表中。微機(jī)系統(tǒng)中可以使用0—255共256個(gè)中斷。當(dāng)80x86系統(tǒng)工作在實(shí)模式時(shí),內(nèi)存的000H~3FFH被用作于中斷向量表,向量表中包含了256個(gè)中斷入口,參見表10-1,且在系統(tǒng)啟動(dòng)時(shí)由BIOS或DOS負(fù)責(zé)初始化?!?〕軟中斷程序設(shè)計(jì)用戶可自己開發(fā)中斷服務(wù)程序,用它取代系統(tǒng)原有的服務(wù)程序,過程如下:編寫中斷服務(wù)子程序,用IRET指令返回確定使用的中斷號(hào)n,修改中斷向量表中4×n~4×n+3單元的對(duì)應(yīng)中斷服務(wù)程序入口INTn指令調(diào)用中斷,此時(shí)CPU保護(hù)現(xiàn)場:將F、CS、IP寄存器入棧,然后從中斷向量表中4×n~4×n+3單元取出n型中斷向量寫入IP,CS中,CPU根據(jù)CS:IP的值轉(zhuǎn)向服務(wù)子程序。當(dāng)執(zhí)行IRET時(shí),恢復(fù)現(xiàn)場:從堆棧中彈出6個(gè)字節(jié)傳送給IP、CS、F寄存器,回到斷點(diǎn)繼續(xù)執(zhí)行。程序結(jié)束返回DOS之前,要恢復(fù)系統(tǒng)的中斷向量設(shè)置。實(shí)驗(yàn)步驟運(yùn)行程序,紀(jì)錄運(yùn)行結(jié)果。使用Rmrun菜單中的Debug調(diào)試程序。觀察在執(zhí)行CALL指令與INTN指令時(shí)堆棧段中數(shù)據(jù)的變化與程序的流向。參考程序清單;數(shù)碼轉(zhuǎn)換與顯示:實(shí)驗(yàn)利用47H號(hào)中斷將一組字符轉(zhuǎn)換成16進(jìn)制數(shù)碼,并在屏幕上顯示出來DDATA SEGMENTCSBAKDW?IPBAKDW?MKBAKDB?SWDW?MESDB'Thedatainbuf1are:',0AH,0DH,'$'BUF1 DB 11H,22H,33H,44H,55H,66H,77H,88H,99HDB0AAH,0BBH,0CCH,0DDH,0EEH,0FFH,00HDDATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DDATASTART:MOV AX,DDATAMOV DS,AXMOV AX,0 ;修改47H號(hào)中斷的中斷矢量MOV ES,AXMOV DI,4*47HMOV AX,ES:[DI]MOV IPBAK,AX ;保存原有IPMOV AX,OFFSETMYINT ;修改為用戶自定義中斷入口CLDSTOSWMOV AX,ES:[DI] ;保存原有CSMOV CSBAK,AXMOV AX,SEGMYINTSTOSW MOV DX,OFFSETMES ;顯示提示信息MOV AH,09H INT 21H;顯示BUF1中的內(nèi)容MOV SI,OFFSETBUF1 MOV CX,10H INT 47H;調(diào)用中斷服務(wù)程序MOV AX,0 ;恢復(fù)系統(tǒng)中斷矢量MOV ES,AXMOV DI,4*47HMOV AX,IPBAKCLDSTOSWMOV AX,CSBAKSTOSWMOV AH,4CH ;返回dosINT 21HMYINTPROCFAR ;自定義顯示中斷,入口參數(shù)為SI,CXPUSHAXPUSH DXC1: MOV AL,[SI] AND AL,0F0HPUSHCX ;取高4位MOVCL,4SHR AL,CLPOPCX CMP AL,0AH ;是否是A以上的數(shù) C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL ;顯示字符 MOV AH,02H INT 21H MOV AL,[SI] AND AL,0FH ;取低4位 CMP AL,0AH C3 ADD AL,07HC3: ADD AL,30H MOV DL,AL ;顯示字符 MOV AH,02H INT 21H INC SILOOPC1 POP DX POP AXIRET ;中斷返回MYINTENDPCODEENDSENDSTART第二部分接口部分實(shí)驗(yàn)實(shí)驗(yàn)十一、PC機(jī)內(nèi)部8259中斷應(yīng)用實(shí)驗(yàn)?zāi)康倪M(jìn)一步認(rèn)識(shí)和理解中斷特性。掌握8259中斷控制器的工作原理、編程方法以與PC機(jī)如何通過8259A實(shí)現(xiàn)對(duì)外部可屏蔽硬件中斷源的管理。熟悉實(shí)驗(yàn)中涉與到的中斷屏蔽寄存器IMR和中斷服務(wù)寄存器ISR等的使用方法。進(jìn)一步掌握中斷服務(wù)程序的設(shè)計(jì)方法。實(shí)驗(yàn)設(shè)備PC微機(jī)一臺(tái)實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)中斷的概念,了解PC機(jī)系統(tǒng)中斷向量表的占用情況〔見表10-1〕。2.復(fù)習(xí)8259中斷控制器的工作原理,了解PC機(jī)中外部可屏蔽硬件中斷的處理過程。3.復(fù)習(xí)PC機(jī)如何通過8259A實(shí)現(xiàn)對(duì)外部可屏蔽硬件中斷源的管理。4.仔細(xì)閱讀實(shí)驗(yàn)原理、示例程序,掌握中斷服務(wù)程序的編寫方法與相關(guān)技巧。5.從實(shí)驗(yàn)內(nèi)容中任選一道題目,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容1.[示例]編寫一鍵盤中斷處理程序:計(jì)算鍵盤中斷次數(shù),并用該程序替換系統(tǒng)鍵盤中斷處理程序,使當(dāng)按鍵8次〔鍵盤中斷產(chǎn)生16次〕后,顯示中斷次數(shù)并結(jié)束應(yīng)用。參見參考程序清單。鍵盤中斷處理的說明當(dāng)從鍵盤上鍵入一個(gè)鍵時(shí),鍵盤上的處理器首先向微機(jī)產(chǎn)生硬件中斷請(qǐng)求〔IRQ1〕,然后將該鍵的掃描碼傳送給主機(jī)。而PC主機(jī)在IRQ1中斷的作用下,調(diào)用09H型中斷服務(wù)程序從鍵盤接口電路〔口地址60H〕讀入掃描碼,并轉(zhuǎn)換成ASCII碼,存入鍵盤緩沖區(qū)。本實(shí)驗(yàn)置換系統(tǒng)的09H型中斷服務(wù)程序,完成對(duì)鍵盤中斷次數(shù)的統(tǒng)計(jì)。在該中斷服務(wù)程序中,必須對(duì)鍵盤控制器〔口地址61H〕復(fù)位。復(fù)位鍵盤控制器只需讀出端口61H的內(nèi)容,并將最高位置1,再寫入該端口。此外,按鍵按下和抬起均會(huì)引起中斷,所以實(shí)際中斷次數(shù)等于按鍵次數(shù)乘2。修改上述程序,將按鍵的掃描碼輸出到屏幕上,并統(tǒng)計(jì)中斷次數(shù)。2.利用系統(tǒng)的1CH型中斷〔又稱外擴(kuò)的日時(shí)鐘中斷〕,編寫程序,實(shí)現(xiàn)每隔2S在屏幕上顯示一串字符"TIMETO!",按任意鍵停止。參見《32位微型計(jì)算機(jī)原理與接口技術(shù)》教程8.9章節(jié)。實(shí)驗(yàn)原理硬件中斷是由CPU以外的器件發(fā)出的中斷請(qǐng)求信號(hào)而引發(fā)的中斷。80x86CPU只有兩個(gè)引腳〔INTR和NMI〕可以接受外部的中斷脈沖,為了管理眾多的外部中斷源,INTER公司設(shè)計(jì)了專用的配套芯片——8259A中斷控制器8259A中斷控制器簡介8259A中斷控制器將中斷源優(yōu)先級(jí)排隊(duì)、辨別中斷源以與提供中斷向量的電路于一片中,因此無需附加任何電路,只需對(duì)8259A進(jìn)行編程,就可以管理8級(jí)中斷,并選擇優(yōu)先模式和中斷請(qǐng)求方式,即中斷結(jié)構(gòu)可以由用戶編程來設(shè)置。同時(shí),在不需增加其他電路的情況下,通過多片8259A的級(jí)連,能構(gòu)成多達(dá)64級(jí)的矢量中斷系統(tǒng)。8259A的內(nèi)部結(jié)構(gòu)和管腳如圖11-1所示。11-111-18259A的中斷過程,即微機(jī)系統(tǒng)響應(yīng)可屏蔽中斷的過程〔1〕將加到引腳IR0~IR7上的中斷請(qǐng)求寄存到中斷請(qǐng)求寄存器中?!?〕在中斷屏蔽寄存器的管理下,沒有被屏蔽的中斷請(qǐng)求被送到優(yōu)先權(quán)電路判優(yōu)?!?〕選中當(dāng)前級(jí)別最高的中斷源,然后從引腳INT向CPU發(fā)出中斷請(qǐng)求信號(hào)?!?〕CPU滿足一定的條件后,向8259A發(fā)出兩個(gè)中斷響應(yīng)信號(hào)〔負(fù)脈沖〕:1〕8259A從引腳INTA收到第1個(gè)中斷響應(yīng)信號(hào)之后,立即使中斷服務(wù)寄存器中與被選中的中斷源對(duì)應(yīng)的那一位置1,同時(shí)把中斷請(qǐng)求寄存器中的相應(yīng)位清0。2〕從引腳INTA收到第2個(gè)中斷響應(yīng)信號(hào)之后,8259A把選中的中斷源類型碼n通過數(shù)據(jù)線送往CPU?!?〕在實(shí)模式下,CPU從4×n~4×n+3單元取出該中斷源的中斷向量→IP,CS,從而引導(dǎo)CPU執(zhí)行該中斷源的中斷服務(wù)程序。8259A編程〔1〕初始化編程提供了4個(gè)〔ICW1~ICW4〕初始化命令字,寫入命令寄存器組后,就建立了8259A的基本工作方式。系統(tǒng)8259A的初始化編程在微機(jī)啟動(dòng)時(shí),由BIOS自動(dòng)完成。用戶不需再對(duì)其初始化,更改它的初始化設(shè)置。BIOS對(duì)系統(tǒng)8259A初始化為:中斷觸發(fā)方式采用邊沿觸發(fā)。中斷屏蔽方式采用常規(guī)屏蔽方式。中斷優(yōu)先級(jí)的管理采用完全嵌套即固定優(yōu)先級(jí)方式。IR0的請(qǐng)求級(jí)別最高,IR7的請(qǐng)求級(jí)別最低。中斷結(jié)束,采用常規(guī)結(jié)束方式?!?〕操作方式編程將操作命令字OCW1~OCW3寫入操作命令寄存器組,對(duì)中斷處理過程實(shí)現(xiàn)動(dòng)態(tài)控制。OCW1~OCW3各命令格式如圖11-2所示。OCW1——寫中斷屏蔽字〔對(duì)奇地址操作〕某位Mi為1,表示對(duì)應(yīng)的中斷源IRQi被屏蔽;Mi為0,IRQi被開放。OCW2——寫中斷方式命令字〔對(duì)偶地址操作〕設(shè)置優(yōu)先級(jí)是否進(jìn)行循環(huán),循環(huán)的方式與中斷結(jié)束的方式。OCW3——〔對(duì)偶地址操作〕用來設(shè)置特殊屏蔽方式、查詢方式用來讀8259A的中斷請(qǐng)求寄存器IRR,中斷服務(wù)寄存器ISR、中斷屏蔽寄存器IMR的當(dāng)前狀態(tài)。11-211-2PC機(jī)系統(tǒng)中8259A的應(yīng)用現(xiàn)代PC機(jī)系統(tǒng)中包含了兩片8259A中斷控制器,經(jīng)級(jí)連可以管理15級(jí)硬件中斷,但其中部分中斷源已經(jīng)被系統(tǒng)硬件占用,具體使用情況如表11-1所示。中斷向量表的占用情況見表10-1。11-1兩片8259A的端口地址為:主片在020H~03FH,實(shí)際使用020H和021H兩個(gè)端口;從片在0A0H~0BFHX圍,實(shí)際使用0A0H和0A1H兩個(gè)端口。11-18259A的應(yīng)用編程流程,如圖11-3所示。開發(fā)用戶中斷時(shí),做到以下幾點(diǎn):〔1〕硬件方面:將外擴(kuò)中斷源的中斷請(qǐng)求〔由低電平到高電平的躍變〕接入選定的中斷源IRQi上?!?〕軟件方面:置換相應(yīng)的中斷向量,即把用戶中斷子程序的入口地址寫入4×n~4×n+3單元。分別向主從8259A寫入屏蔽字,使主片IMR的D2位置0;使從片IMR的Di位置0,開放用戶中斷。<即填寫OCW1>每一次中斷服務(wù)結(jié)束,即執(zhí)行IRET之前,向從片、主片8259A送中斷結(jié)束命令。<即填寫OCW2>返回DOS之前,寫中斷屏蔽字OCW1,使主片IMR的D2位置1;使從片IMR的Di位置1,屏蔽用戶中斷。恢復(fù)系統(tǒng)中斷屏蔽字、恢復(fù)系統(tǒng)中斷向量。11-38259A11-38259A實(shí)驗(yàn)步驟運(yùn)行示例程序,按鍵8次,觀察運(yùn)行結(jié)果。參考程序清單;按鍵8次,計(jì)算鍵盤中斷次數(shù)DATA SEGMENTCSBAK DW?IPBAK DW?MKBAK DB?DATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATASTARTPROCFARMOV AX,DATAMOV DS,AXIN AL,21H ;保留8259初始屏蔽字的狀態(tài)MOV MKBAKCLI ;關(guān)中斷AND AL,11111101B ;打開鍵盤屏蔽OUT 21h,ALMOV AX,0 ;修改鍵盤中斷的中斷矢量MOV ES,AXMOV DI,24H ;IRQ1,09H,24H=09H*4MOV AX,ES:[DI]MOV IPBAK,AX ;寫入IPMOV AX,OFFSETMYINTCLDSTOSWMOV AX,ES:[DI] ;寫入CSMOV CSBAK,AXMOV AX,SEGMYINTSTOSWXOR DX,DX ;清計(jì)數(shù)器A1:STI ;開中斷CMP DX,10H ;是否按了8次鍵JZ A2 ;是,結(jié)束程序運(yùn)行JMP A1 ;否則繼續(xù)等待鍵盤中斷A2:PUSH DX ;保存計(jì)數(shù)值CLI ;關(guān)中斷MOV AX,0 ;恢復(fù)系統(tǒng)中斷矢量MOV ES,AXMOV DI,24H;IRQ1,09HMOV AX,IPBAKCLDSTOSWMOV AX,CSBAKSTOSWMOV AL,MKBAK ;恢復(fù)系統(tǒng)8259屏蔽字OUT 21h,ALSTI ;開中斷POP DX ;顯示計(jì)數(shù)值CALL SHWORDMOV AX,4C00HINT 21HRETSTARTENDPMYINTPROC FAR ;自定義鍵盤中斷處理程序STI ;開中斷INCDX ;計(jì)數(shù)加一INAL,60H ;讀入掃描碼〔用戶可對(duì)此鍵值進(jìn)行處理〕INAL,61H ;讀入控制字節(jié)MOVAH,ALORAL,80HOUT61H,AL ;復(fù)位鍵盤CLI;關(guān)中斷MOVAL,61H ;中斷結(jié)束命令送中斷控制器 OUT 20H,ALIRET ;中斷返回MYINTENDPSHWORD PROC NEAR ;2→16進(jìn)制顯示MOVCX,4AGA:ROLDX,4MOVAL,DLANDAL,0FHCMPAL,10JCNEXT2ADDAL,7NEXT2:ADDAL,30HMOVAH,0EHINT10HLOOPAGA RETSHWORDENDPCODEENDSENDSTART實(shí)驗(yàn)十二、PCI總線中斷應(yīng)用實(shí)驗(yàn)?zāi)康恼莆帐褂肞CI中斷的方法。了解操作PCI設(shè)備I/O端口的方法。進(jìn)一步掌握8259中斷控制器的工作原理、編程方法以與PC機(jī)如何通過8259A實(shí)現(xiàn)對(duì)外部可屏蔽硬件中斷源的管理。進(jìn)一步掌握中斷服務(wù)程序的設(shè)計(jì)方法。實(shí)驗(yàn)設(shè)備PC機(jī)一臺(tái),TD-PIT-B實(shí)驗(yàn)裝置一套。實(shí)驗(yàn)預(yù)習(xí)要求1.復(fù)習(xí)中斷的概念,了解PC機(jī)系統(tǒng)中斷向量表的占用情況〔見表10-1〕。2.復(fù)習(xí)8259中斷控制器的工作原理,了解PC機(jī)中外部可屏蔽硬件中斷的處理過程。3.復(fù)習(xí)PC機(jī)如何通過8259A實(shí)現(xiàn)對(duì)外部可屏蔽硬件中斷源的管理。4.仔細(xì)閱讀實(shí)驗(yàn)說明、示例程序,掌握PCI總線中斷服務(wù)程序的編寫方法。5.根據(jù)實(shí)驗(yàn)內(nèi)容,仔細(xì)閱讀相關(guān)的實(shí)驗(yàn)要求與說明,編寫程序,以便上機(jī)調(diào)試。實(shí)驗(yàn)內(nèi)容1.[示例]編寫一實(shí)驗(yàn)程序,利用實(shí)驗(yàn)裝置提供的中斷源,完成每按動(dòng)一次脈沖開關(guān),產(chǎn)生一次中斷,向顯示器輸出字符"7"。2.修改示例程序,控制中斷響應(yīng)次數(shù)為10次,即當(dāng)?shù)?1次以后按動(dòng)脈沖開關(guān),屏幕上不再顯示"7"。實(shí)驗(yàn)說明1.TD-PIT-B實(shí)驗(yàn)系統(tǒng)編程信息簡要說明〔1〕.本實(shí)驗(yàn)的接口電路是在PD-PIT-B實(shí)驗(yàn)裝置上搭接完成,而PC機(jī)作為主機(jī)控制該實(shí)驗(yàn)裝置。二者之間通過P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度離婚案件中涉及2024年購置車輛分割協(xié)議書3篇
- 2024年遠(yuǎn)程醫(yī)療服務(wù)系統(tǒng)搭建合同
- 2025年度裝載機(jī)租賃與售后服務(wù)合同3篇
- 2025年度智慧城市安防監(jiān)控系統(tǒng)工程合同書3篇
- 2024年物業(yè)綠化維護(hù)合同(適用于物業(yè)綠化養(yǎng)護(hù))3篇
- 求一個(gè)數(shù)比另一個(gè)數(shù)多幾(少幾)教學(xué)反思
- 高級(jí)財(cái)務(wù)會(huì)計(jì)歷年核算題(分類)
- 人民日?qǐng)?bào)青春摘抄(高中作文素材)
- 華南農(nóng)業(yè)大學(xué)珠江學(xué)院《數(shù)據(jù)庫技術(shù)基礎(chǔ)(ACCESS)》2023-2024學(xué)年第一學(xué)期期末試卷
- 培黎職業(yè)學(xué)院《Java語言程序設(shè)計(jì)A》2023-2024學(xué)年第一學(xué)期期末試卷
- 勘察工作質(zhì)量及保證措施
- 體外膜肺氧合(ECMO)并發(fā)癥及護(hù)理
- 墊江縣中醫(yī)院2018年11月份臨床技能中心教學(xué)設(shè)備招標(biāo)項(xiàng)目招標(biāo)文件
- 排放源統(tǒng)計(jì)(環(huán)統(tǒng))年報(bào)填報(bào)指南
- 反射療法師理論考試復(fù)習(xí)題及答案
- 房地產(chǎn)銷售主管崗位招聘筆試題及解答(某大型國企)2025年
- 心電圖并發(fā)癥預(yù)防及處理
- 重慶市七中學(xué)2023-2024學(xué)年數(shù)學(xué)八上期末統(tǒng)考模擬試題【含解析】
- 檢驗(yàn)科lis系統(tǒng)需求
- 中東及非洲空氣制水機(jī)行業(yè)現(xiàn)狀及發(fā)展機(jī)遇分析2024-2030
- DL∕T 1631-2016 并網(wǎng)風(fēng)電場繼電保護(hù)配置及整定技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論