汇编入门学习笔记 (十三)—— 外中断

发布者:huijiazi5210最新更新时间:2016-06-24 来源: eefocus关键字:汇编入门  外中断 手机看文章 扫描二维码
随时随地手机看文章
疯狂的暑假学习之  汇编入门学习笔记 (十三)——  外中断

 

参考: 《汇编语言》 王爽 第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' 字符,要实现间隔显示,就要有延时,用循环非常多的次数来延时。

实现代码:

 

  1. assume cs:code  
  2.   
  3. code segment  
  4.   
  5. start:  
  6.     mov ax,0b800h  
  7.     mov es,ax  
  8.     mov al,'a'  
  9. s:    
  10.     mov es:[160*12+40*2],al  
  11.     call delay  ;循环10000000次,用来延时  
  12.     inc al  
  13.     cmp al,'z'  
  14.     jna s  
  15.       
  16.     mov ax,4c00h  
  17.     int 21h;  
  18.       
  19. delay:  
  20.     push ax  
  21.     push dx  
  22.     mov dx,1000h   ;外层循环1000h次,内层循环100000h次  
  23.     mov ax,0  
  24. s1:  
  25.     sub ax,1  
  26.     sbb dx,0  
  27.     cmp ax,0  
  28.     jne s1  
  29.     cmp dx,0  
  30.     jne s1  
  31.     pop dx  
  32.     pop ax  
  33.     ret  
  34.       
  35.   
  36. code ends  
  37.   
  38. end start  


 

再实现按下ESC键后,改变显示字符的颜色

 

  1. assume cs:code  
  2.   
  3. stack segment  
  4.     db 128 dup(0)  
  5. stack ends  
  6.   
  7. data segment  
  8.     dw 0,0  
  9. data ends  
  10.   
  11. code segment  
  12.   
  13. start:  
  14.     mov ax,stack  
  15.     mov ss,ax  
  16.     mov sp,128  
  17.       
  18.     mov ax,data  
  19.     mov ds,ax  
  20.       
  21.     mov ax,0  
  22.     mov es,ax  
  23.   
  24.     push es:[9*4]  
  25.     pop ds:[0]        ;将原来的int 9 中断例程的入口保存到 ds:0、ds:2中  
  26.     push es:[9*4+2]  
  27.     pop ds:[2]    
  28.       
  29.     mov word ptr es:[9*4],offset int9   ;在中断向量表中设置新的int 9*4中断例程的入口地址  
  30.     mov es:[9*4+2],cs  
  31.       
  32.       
  33.     mov ax,0b800h  
  34.     mov es,ax  
  35.     mov al,'a'  
  36. s:    
  37.     mov es:[160*12+40*2],al  
  38.     call delay  ;循环10000000次,用来延时  
  39.     inc al  
  40.     cmp al,'z'  
  41.     jna s  
  42.       
  43.     mov ax,0  
  44.     mov es,ax  
  45.     push ds:[0]  
  46.     pop es:[9*4]  
  47.     push ds:[2]  
  48.     pop es:[9*4+2]  
  49.       
  50.     mov ax,4c00h  
  51.     int 21h;  
  52.       
  53. delay:  
  54.     push ax  
  55.     push dx  
  56.     mov dx,1000h   ;外层循环1000h次,内层循环100000h次  
  57.     mov ax,0  
  58. s1:  
  59.     sub ax,1  
  60.     sbb dx,0  
  61.     cmp ax,0  
  62.     jne s1  
  63.     cmp dx,0  
  64.     jne s1  
  65.     pop dx  
  66.     pop ax  
  67.     ret  
  68.       
  69. int9:  
  70.     push ax  
  71.     push bx  
  72.     push es  
  73.       
  74.     in al,60h  
  75.       
  76.     pushf         
  77.     pushf  
  78.     pop bx  
  79.     and bh,11111110b   ;设置IF=0.TF=0  
  80.     push bx  
  81.     popf  
  82.     call dword ptr ds:[0]   ;模拟调用原来的int 9*4中断例程  
  83.       
  84.     cmp al,1   ;1就是ESC的键盘扫描码  
  85.     jne int9ret  
  86.       
  87.     mov ax,0b800h  
  88.     mov es,ax  
  89.     inc byte ptr es:[160*12+40*2+1]  ;每次按下ESC键加1,来改变颜色属性  
  90.       
  91. int9ret:  
  92.     pop es  
  93.     pop bx  
  94.     pop ax  
  95.     iret  
  96.       
  97.       
  98.   
  99. code ends  
  100.   
  101. end start  
 

关键字:汇编入门  外中断 引用地址:汇编入门学习笔记 (十三)—— 外中断

上一篇:汇编入门学习笔记 (十四)—— 直接定址表
下一篇:汇编入门学习笔记 (十一)—— 内中断

推荐阅读最新更新时间:2024-03-16 14:58

MCS-51单片机终端介绍及中断软件编程
MCS-51单片机有多个中断源,以8051为例,有5个中断源,两个外中断、两个定时中断和一个串行中断,这一节我们讨论外中断软件编程。 外中断是由外部原因引起的中断,有两个中断源。即外中断0(INT0)和外中断1(INT1),中断请求信号由引脚P3.2(INT0)和P3.3(INT1)输入。 外中断请求信号有两种方式,一是电平方式,二是脉冲方式。可通过有关控制位的定义进行规定。 电平方式为低电平有效,只需在单片机的(INT0)和(INT1)中断请求输入端采样到有效的低电平时,就会激活外部中断。 脉冲方式则在脉冲的后负跳沿有效,即在相邻两个机器周期对中断请求引入端进行采样中,如前一次为高,后一次为低即为有效中断请
[单片机]
MCS-51单片机终端介绍及<font color='red'>外</font><font color='red'>中断</font>软件编程
51单片机中断计数器C语言程序设计
#include REG51.H #define uchar unsigned char #define uint unsigned int unsigned char code tab ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF}; sbit P32=P3^2; sbit P25=P2^5; sbit P26=P2^6; sbit P27=P2^7; uint cnt; void init(void) { EX0=1; IT0=1; EA=1; ET0 = 1; //定时器0中断打开 TMOD = 0x1;
[单片机]
STC51从入门到精通(汇编)~~~ 第七讲:80C51的定时器/计数器
7.1 定时器/计数器 7.1.1 定时器/计数器的组成 7.1.2 定时器/计数器的工作原理 1、定时方式 定时方式时,T记录80C51内部振荡器输出的脉冲(机器周期信号)个数。 每一个机器周期使T0或T1的计数器增加1,直至计满回零自动产生溢出中断请求。 2、计数方式 计数方式时,T的功能是计来自T0(P3.4)T1(P3.5)的外部脉冲信号的个数。 7.1.3定时器/计数器的控制 定时器/计数器是一种可编程的部件,在其工作之前必须将控制字写入工作方式和控制寄存器,用以确定工作方式,这个过程称为定时器/计数器的初始化。 1、工作方式寄存器TMOD (89H) (1) M1、M0:工作方式控制位 (2) C
[单片机]
STC51从<font color='red'>入门</font>到精通(<font color='red'>汇编</font>)~~~ 第七讲:80C51的定时器/计数器
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved