外部硬件中断
从处理器外部来的中断信号,外部硬件中断通过两根信号线引入处理器内部,8086处理器的信号线为NMI和INTR
- 非屏蔽中断(NMI),不会被阻断和屏蔽的中断,intel处理器规定NMI中断信号从0跳变到1后必须维持4个以上时钟周期才有效。实模式下NMI的中断号为2
- 可屏蔽中断,intel处理器允许256个中断,8259芯片(中断控制器)提供其中15个
在8259内部有中断屏蔽寄存器IMR,对应8个引脚,决定了该引脚能够将中断信号传给处理器。中断能否被处理还要看标志寄存器的IF位,通过cli和sti设置
中断向量表(实模式)
实模式下,中断处理程序的入口点在内存物理地址的0x00000到0x003ff,共1KB空间,即中断向量表
每个中断在中断向量表中占双字
处理中断的过程:
- 保护断点现场,将标志寄存器FLAGS压栈,清除IF(中断标志)和TF(陷阱标志),将CS和IP压栈
- 执行中断程序,将得到的终端号乘4在中断向量表中,取出中断程序的偏移地址和段地址,传送CS和IP。此时由于IF标志被清除,因此在中断处理过程中,处理器将不再响应中断
- 返回断点继续执行,中断处理程序的最后一条指令为iret,处理器依次出栈CS和IP,标志寄存区
中断随时可能会发生,因而中断向量表是BIOS在计算机启动时完成的
实时时钟
外围设备控制芯片ICH中,集成了实时时钟电路RTC,和静态存储器CMOS RAM
日期和时间信息是保存在 CMOS RAM 中的,通常有 128 字节,而日期和时间信息只占了一小部分容量,其他空间则用于保存整机的配置信息,比如各种硬件的类型和工作参数、开机密码和辅助存储设备的启动顺序等。
RTC 芯片由一个振荡频率为 32.768kHz 的石英晶体振荡器(晶振)驱动,经分频后,用于对CMOS RAM 进行每秒一次的时间刷新
CMOS RAM 的访问,需要通过两个端口来进行。 0x70 或者 0x74 是索引端口,用来指定 CMOS RAM 内的单元; 0x71 或者 0x75 是数据端口,用来读写相应单元里的内容
从很早的时候开始,端口 0x70 的最高位(bit 7)是控制 NMI 中断的开关,为 0 时,允许 NMI 中断到达处理器,为 1 时,则阻断所有的 NMI 信号,其他 7 个比特,即 0~6 位,
则实际上用于指定 CMOS RAM 单元的索引号,尽管端口 0x70 的位 7 不是中断信号,但它能控制与非门的输出,决定真正的NMI 中断信号是否能到达处理器。
在早期的系统中,计算机的制造成本很高,为了最大化地利用硬件资源,导致出现这种稀奇古怪的做法,
CMOS RAM 中保存的日期和时间,通常是以二进制编码的十进制数(Binary Coded Decimal,BCD)
单元 0x0A~0x0D 不是普通的存储单元,而被定义成 4 个寄存器的索引号,也是通过 0x70 和0x71 这两个端口访问的。这 4 个寄存器用于设置实时时钟电路的参数和工作状态
寄存器 A 和 B 用于对 RTC 的功能进行整体性的设置,具体参考P156
每次当中断实际发生时,可以在程序(中断处理过程)中读寄存器 C 的内容来检查中断的原因。该寄存器还有一个特点,就是每次读取它后,所有内容自动清零。而且,如果不读取它的话(换句话说,相应的位没有清零),同样的中断将不再产生。
程序目标:RTC芯片定时发出中断,执行代码读取CMOS RAM信息
用户程序
加载程序不变
注意:处理器在设计的时候就规定,当遇到修改段寄存器 SS 的指令时,在这条指令和下一条指令执行完毕期间,禁止中断,以此来保护堆栈
计算机启动后, RTC 芯片的中断号默认是 0x70
软中断是由 int 指令引起的中断处理
int3 是断点中断指令
int3 和 int 3 不是一回事
into 是溢出中断指令,当处理器执行这条指令时,如果标志寄存器的 OF 位是 1,那么,将产生 4 号中断。否则什么也不做
BIOS中断
- 每个外部设备接口,包括各种板卡,如网卡、显卡、键盘接口电路、硬件控制器等,都有自己的只读存储器(Read Only Memory, ROM),类似于 BIOS 芯片,这些 ROM 中提供了它自己的功能调用例程,以及本设备的初始化代码。按照规范,前两个单元的内容是 0x55 和 0xAA,第三个单元是本 ROM 中以 512 字节为单位的代码长度;从第四个单元开始,就是实际的 ROM 代码。
- 从内存物理地址 A0000 开始,到 FFFFF 结束,有相当一部分空间是留给外围设备的。如果设备存在,那么,它自带的 ROM 会映射到分配给它的地址范围内
- BIOS 程序会以 2KB 为单位搜索内存地址 C0000~E0000 之间的区域。当发现某个区域的头两个字节是 0x55 和 0xAA 时,意味着该区域有 ROM 代码存在。接着,它对该区域做累加和检查,看结果是否和第三个单元相符。如果相符,就从第四个单元进入。这时,处理器执行的是硬件自带的程序指令,这些指令初始化外部设备的相关寄存器和工作状态,最后,填写相关的中断向量表,使它们指向自带的中断处理过程。
用户程序
到此这篇ldrb指令什么意思(ldrneb指令)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/13911.html