彙編入門學習筆記 (十三)—— 外中斷,彙編學習筆記

來源:互聯網
上載者:User

彙編入門學習筆記 (十三)—— 外中斷,彙編學習筆記

瘋狂的暑假學習之  彙編入門學習筆記 (十三)——  外中斷


參考: 《組合語言》 王爽 第15章


1.外中斷資訊


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


可屏蔽中斷

先看看內中斷所引發的中斷過程:

(1)取中斷類型嗎n。

(2)標誌寄存器入棧,設定IF=0,TF=0.

(3)CS、IP入棧

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


可屏蔽中斷的中斷過程於內中斷所引發的中斷過程不同的地方只是,第一步不同。可屏蔽中斷的中斷過程,CPU要先看IF的值,如果IF=0就不執行中斷,如果IF=1執行中斷。


不可屏蔽中斷

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

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

(1)標誌寄存器入棧,設定IF=0,TF=0.

(2)CS、IP入棧

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


2. PC機鍵盤的處理過程


    當我們按下一個鍵時,鍵盤上的晶片產生一個掃描碼,掃描嗎說明了按下鍵盤的鍵在鍵盤的位置。掃描嗎被送入主板上的相關介面晶片的寄存器中,該寄存器的連接埠是60h。一般按下一個鍵的掃描嗎叫通嗎,鬆開一個鍵的掃描嗎叫斷碼,通嗎第7位0,斷碼第7位1,即 斷碼=通嗎 + 80h

    鍵盤的掃描嗎到達60h是,相關晶片就會向CPU發出中斷類型嗎為9的可屏蔽中斷資訊。

    int 9 中斷常式主要工作:

(1)讀出60h連接埠的掃描嗎

(2)如果是字元鍵的掃描嗎,就將該掃描嗎和它所對應的字元嗎(ASCII嗎)送入記憶體中的BIOS鍵盤緩衝區;如果是修飾鍵(如Ctrl)和切換鍵(如CapsLock)的掃描嗎,則將其轉變為狀態位元組(用二進位位記錄修飾鍵和切換鍵狀態的位元組)寫入記憶體中儲存的狀態位元組單元

(3)對鍵盤系統進行相關的控制。比如,相相關晶片發出應答資訊。


3. 修改int 9 中斷


先實現,在螢幕中間間隔顯示‘a’ ~ 'z' 字元,要實現間隔顯示,就要有延時,用迴圈非常多的次數來延時。

實現代碼:

assume cs:codecode segmentstart:mov ax,0b800hmov es,axmov al,'a's:mov es:[160*12+40*2],alcall delay  ;迴圈10000000次,用來延時inc alcmp al,'z'jna smov ax,4c00hint 21h;delay:push axpush dxmov dx,1000h   ;外層迴圈1000h次,內層迴圈100000h次mov ax,0s1:sub ax,1sbb dx,0cmp ax,0jne s1cmp dx,0jne s1pop dxpop axretcode endsend start


再實現按下ESC鍵後,改變顯示字元的顏色

assume cs:codestack segmentdb 128 dup(0)stack endsdata segmentdw 0,0data endscode segmentstart:mov ax,stackmov ss,axmov sp,128mov ax,datamov ds,axmov ax,0mov es,axpush es:[9*4]pop ds:[0]        ;將原來的int 9 中斷常式的入口儲存到 ds:0、ds:2中push es:[9*4+2]pop ds:[2]  mov word ptr es:[9*4],offset int9   ;在中斷向量表中設定新的int 9*4中斷常式的入口地址mov es:[9*4+2],csmov ax,0b800hmov es,axmov al,'a's:mov es:[160*12+40*2],alcall delay  ;迴圈10000000次,用來延時inc alcmp al,'z'jna smov ax,0mov es,axpush ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2]mov ax,4c00hint 21h;delay:push axpush dxmov dx,1000h   ;外層迴圈1000h次,內層迴圈100000h次mov ax,0s1:sub ax,1sbb dx,0cmp ax,0jne s1cmp dx,0jne s1pop dxpop axretint9:push axpush bxpush esin al,60hpushf       pushfpop bxand bh,11111110b   ;設定IF=0.TF=0push bxpopfcall dword ptr ds:[0]   ;類比調用原來的int 9*4中斷常式cmp al,1   ;1就是ESC的鍵盤掃描碼jne int9retmov ax,0b800hmov es,axinc byte ptr es:[160*12+40*2+1]  ;每次按下ESC鍵加1,來改變顏色屬性int9ret:pop espop bxpop axiretcode endsend start







51單片機 外部中斷(組合語言)問題

主程式是:流水燈0到7依次點亮、流水燈7到0依次點亮,反覆迴圈。
外部中斷程式是:燈全亮、全滅3次。
但是,程式沒有開中斷的指令,中斷程式是不會執行的。
START: ;在下面添加:
SETB EA ;開總中斷.
SETB EX0 ;開INT0中斷.
CLR IT0 ; 設定INT0為電平觸發.
MOVA,#00H
……
外部中斷就可以實現了。
 
學習組合語言需要怎入門?

彙編是執行效率最高的語言了

但是也非常的依賴於硬體,已經準系統多用中斷調用來實現,所以也需要瞭解

比如寄存器,可以有什麼運算,一般做法
其實最簡單,就是看實現什麼功能是怎麼實現的,你就可以很快的投入應用

這樣你很快就是高手,學會稍微的變化還是比較容易的,最難就是記憶那些特殊的處理方法
而且也沒什麼道理
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.