在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 匯編入門學(xué)習(xí)筆記 (十三)—— 外中斷

            匯編入門學(xué)習(xí)筆記 (十三)—— 外中斷

            作者: 時(shí)間:2016-11-09 來源:網(wǎng)絡(luò) 收藏
            瘋狂的暑假學(xué)習(xí)之 匯編入門學(xué)習(xí)筆記 (十三)—— 外中斷

            本文引用地址:http://www.biyoush.com/article/201611/317786.htm

            參考: 《匯編語言》 王爽 第15章

            1.外中斷信息

            外中斷分為可屏蔽中斷和不可屏蔽中斷

            可屏蔽中斷

            先看看內(nèi)中斷所引發(fā)的中斷過程:

            (1)取中斷類型嗎n。

            (2)標(biāo)志寄存器入棧,設(shè)置IF=0,TF=0.

            (3)CS、IP入棧

            (4)(IP)=(n*4),(CS)=(n*4+2)

            可屏蔽中斷的中斷過程于內(nèi)中斷所引發(fā)的中斷過程不同的地方只是,第一步不同??善帘沃袛嗟闹袛噙^程,CPU要先看IF的值,如果IF=0就不執(zhí)行中斷,如果IF=1執(zhí)行中斷。

            不可屏蔽中斷

            不可屏蔽中斷是CPU必須相應(yīng)的中斷。不可屏蔽中斷很少,所以中斷類型嗎固定為2,中斷過程不需要取中斷類型嗎

            不可屏蔽中斷的中斷過程:

            (1)標(biāo)志寄存器入棧,設(shè)置IF=0,TF=0.

            (2)CS、IP入棧

            (3)(IP)=(8),(CS)=(0AH)

            2. PC機(jī)鍵盤的處理過程

            當(dāng)我們按下一個(gè)鍵時(shí),鍵盤上的芯片產(chǎn)生一個(gè)掃描碼,掃描嗎說明了按下鍵盤的鍵在鍵盤的位置。掃描嗎被送入主板上的相關(guān)接口芯片的寄存器中,該寄存器的端口是60h。一般按下一個(gè)鍵的掃描嗎叫通嗎,松開一個(gè)鍵的掃描嗎叫斷碼,通嗎第7位0,斷碼第7位1,即 斷碼=通嗎 + 80h

            鍵盤的掃描嗎到達(dá)60h是,相關(guān)芯片就會(huì)向CPU發(fā)出中斷類型嗎為9的可屏蔽中斷信息。

            int 9 中斷例程主要工作:

            (1)讀出60h端口的掃描嗎

            (2)如果是字符鍵的掃描嗎,就將該掃描嗎和它所對(duì)應(yīng)的字符嗎(ASCII嗎)送入內(nèi)存中的BIOS鍵盤緩沖區(qū);如果是控制鍵(如Ctrl)和切換鍵(如CapsLock)的掃描嗎,則將其轉(zhuǎn)變?yōu)闋顟B(tài)字節(jié)(用二進(jìn)制位記錄控制鍵和切換鍵狀態(tài)的字節(jié))寫入內(nèi)存中存儲(chǔ)的狀態(tài)字節(jié)單元

            (3)對(duì)鍵盤系統(tǒng)進(jìn)行相關(guān)的控制。比如,相相關(guān)芯片發(fā)出應(yīng)答信息。

            3. 修改int 9 中斷

            先實(shí)現(xiàn),在屏幕中間間隔顯示‘a’ ~ z 字符,要實(shí)現(xiàn)間隔顯示,就要有延時(shí),用循環(huán)非常多的次數(shù)來延時(shí)。

            實(shí)現(xiàn)代碼:

            1. assumecs:code
            2. codesegment
            3. start:
            4. movax,0b800h
            5. moves,ax
            6. moval,a
            7. s:
            8. moves:[160*12+40*2],al
            9. calldelay;循環(huán)10000000次,用來延時(shí)
            10. incal
            11. cmpal,z
            12. jnas
            13. movax,4c00h
            14. int21h;
            15. delay:
            16. pushax
            17. pushdx
            18. movdx,1000h;外層循環(huán)1000h次,內(nèi)層循環(huán)100000h次
            19. movax,0
            20. s1:
            21. subax,1
            22. sbbdx,0
            23. cmpax,0
            24. jnes1
            25. cmpdx,0
            26. jnes1
            27. popdx
            28. popax
            29. ret
            30. codeends
            31. endstart


            再實(shí)現(xiàn)按下ESC鍵后,改變顯示字符的顏色

            1. assumecs:code
            2. stacksegment
            3. db128dup(0)
            4. stackends
            5. datasegment
            6. dw0,0
            7. dataends
            8. codesegment
            9. start:
            10. movax,stack
            11. movss,ax
            12. movsp,128
            13. movax,data
            14. movds,ax
            15. movax,0
            16. moves,ax
            17. pushes:[9*4]
            18. popds:[0];將原來的int9中斷例程的入口保存到ds:0、ds:2中
            19. pushes:[9*4+2]
            20. popds:[2]
            21. movwordptres:[9*4],offsetint9;在中斷向量表中設(shè)置新的int9*4中斷例程的入口地址
            22. moves:[9*4+2],cs
            23. movax,0b800h
            24. moves,ax
            25. moval,a
            26. s:
            27. moves:[160*12+40*2],al
            28. calldelay;循環(huán)10000000次,用來延時(shí)
            29. incal
            30. cmpal,z
            31. jnas
            32. movax,0
            33. moves,ax
            34. pushds:[0]
            35. popes:[9*4]
            36. pushds:[2]
            37. popes:[9*4+2]
            38. movax,4c00h
            39. int21h;
            40. delay:
            41. pushax
            42. pushdx
            43. movdx,1000h;外層循環(huán)1000h次,內(nèi)層循環(huán)100000h次
            44. movax,0
            45. s1:
            46. subax,1
            47. sbbdx,0
            48. cmpax,0
            49. jnes1
            50. cmpdx,0
            51. jnes1
            52. popdx
            53. popax
            54. ret
            55. int9:
            56. pushax
            57. pushbx
            58. pushes
            59. inal,60h
            60. pushf
            61. pushf
            62. popbx
            63. andbh,11111110b;設(shè)置IF=0.TF=0
            64. pushbx
            65. popf
            66. calldwordptrds:[0];模擬調(diào)用原來的int9*4中斷例程
            67. cmpal,1;1就是ESC的鍵盤掃描碼
            68. jneint9ret
            69. movax,0b800h
            70. moves,ax
            71. incbyteptres:[160*12+40*2+1];每次按下ESC鍵加1,來改變顏色屬性
            72. int9ret:
            73. popes
            74. popbx
            75. popax
            76. iret
            77. codeends
            78. endstart



            關(guān)鍵詞: 匯編入門外中

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉