汇编语言 外部中断
外部中斷,也稱為硬件中斷,它們從8086的不可屏蔽中斷引腳NMI或可屏蔽中斷引腳 INTR 引入。從INTR腳上來的請求信號,CPU可以立即響應,也可以暫時不響應。如果CPU內部標志寄存器中的IF置1,則允許響應這類中斷;若IF標志為0,則不予響應。
以下是從鍵盤輸入產生中斷響應,改變二進制的值的程序代碼。
assume cs:code, ds:data, ss:stackdata segmentdb 128 dup(0) data endsstack segment stackdb 128 dup(0) stack endscode segment start: mov ax, stackmov ss, axmov sp, 128call init_regcall show_keyword_statusmov ax, 4C00Hint 21Hinit_reg:mov bx, 0B800Hmov es, bxmov bx, 40Hmov ds, bxret ;=============================================================== show_status: push cxpush dxpush dspush espush sipush dimov cx, 8showStatus: mov dx, 0 ;Shl shr shl al, 1 ; CF = 1 '1'adc dx, 30Hmov es:[di], dladd di, 2loop showStatuspop dipop sipop espop dspop dxpop cxretshow_keyword_status:mov si, 17HtestA: mov al, ds:[si]mov di, 160 * 10 + 40 * 2call show_statusjmp testAretcode endsend start鍵盤什么都不按的情況下,如下所示
當按下 Ctrl 和 Alt鍵產生中斷響應 數值會變為 00101100
當按下Insert 鍵 數值會變為 10100000
按下 Capslock鍵 數值會變為 01100000
還可以按下左右兩邊的Shift鍵會讓右邊的第一位和第二位發生變化。
總結:
1.讀出60H端口的掃描碼
2.如果是字符鍵的掃描,將這個掃描碼和對應的 ASCII放到BIOS中的鍵盤緩沖區
3.對鍵盤系統的相關控制
4.掃描碼 按下去為通碼,松開為斷碼
- 斷碼 = 通碼 + 80H
鍵盤緩沖區大小為 15字型數據
- 高位字節存放掃描碼
- 低位字節存放 ASCII碼
掃描碼
| ESC | 01 |
| 1~0 | 02~0A |
| 0 | 0B |
| - | 0C |
| = | 0D |
| Bakspace | )E |
| Tab | 0F |
| Q | 10 |
| W | 11 |
| E | 12 |
| R | 13 |
| T | 14 |
| Y | 15 |
| U | 16 |
| I | 17 |
| O | 18 |
| P | 19 |
| [ | 1A |
| ] | 1B |
| Enter | 1C |
| Ctrl | 1D |
| A | 1E |
| S | 1F |
| D | 20 |
| F | 21 |
| G | 22 |
| H | 23 |
| J | 24 |
| K | 25 |
| L | 26 |
| ; | 27 |
| , | 28 |
| 、 | 29 |
| Shift(左) | 2A |
| \ | 2B |
| Z | 2C |
| X | 2D |
| C | 2E |
| V | 2F |
| B | 30 |
| M | 31 |
| N | 32 |
| , | 33 |
| . | 34 |
| / | 35 |
| Shift(右) | 36 |
| Prtsc | 37 |
| Alt | 38 |
| Space | 39 |
| Caps | Lock |
| F1~F10 | 3B~44 |
| NumLock | 45 |
| ScrollL0ck | 46 |
| Home | 47 |
| 上 | 48 |
| pageUp | 49 |
| - | 4A |
| 左 | 4B |
| 右 | 4D |
| + | 4E |
| End | 4F |
| 下 | 50 |
| pageDown | 51 |
| Ins | 52 |
| Del | 53 |
總結
- 上一篇: 汇编 输入输出指令
- 下一篇: 汇编语言 判断学生成绩是否及格