一、实验目的
(1)从硬件,软件结合的角度,模拟单级中断和中断返回的过程
(2)通过简单的中断系统,掌握中断控制器、中断向量、中断屏蔽等概念
(3)了解微程序控制器与中断控制器协调工作的基本原理
二、实验任务
(1)了解中断系统中每个信号的意义和变化条件,并将下面的主程序和中断服务程序手工汇编成十六进制机器代码
地址 | 指令 | 机器代码 |
20H | INTS | 0B0H 10110000 |
21H | LDA R0,[R2] | 58H 01011000 |
22H | ADD R0,R0 | 00H 00000000 |
23H | ADD R0,R0 | 00H 00000000 |
24H | ADD R0,R0 | 00H 00000000 |
25H | ADD R0,R0 | 00H 00000000 |
26H | ADD R0,R0 | 00H 00000000 |
27H | ADD R0,R0 | 00H 00000000 |
28H | ADD R0,R0 | 00H 00000000 |
29H | JMP [R1] | 84H 10000100 |
中断服务程序:
地址 | 指令 | 机器代码 |
0A0H | AND R0,R0 | 30H 00110000 |
0A1H | IRET | 0A0H 10100000 |
三、实验工具
模拟程序
四、实验步骤及实验结果
(2)连线
(3)存程序机器代码,设置通用寄存器R1、R2及内存相关单元的数据
设置寄存器R1、R2的值
根据要求,设置R1 = 21H, R2 的值为10H。
1.令DP=0,DB=0,DZ=0,使实验系统处于连续运行状态。令SWB=1,SWA=1,使实验系统处于寄存器加载工作方式KLD。按CLR#按钮,使实验系统处于初始状态。
2.在SW7-SW0上设置一个存储器地址,该存储器地址供设置通用寄存器使用。该存储器地址最好是不常用的一个地址,以免设置通用寄存器操作破坏重要的存储器单元的内容可将该地址设置为0FFH。按一次QD按钮,将0FFH写入AR1和AR2。
3.在SW7-SW0上设置01H,作为通用寄存器R1的寄存器号。按一次QD按钮,将01H写入IR。
4.在SW7-SW0 设置21H,按一次QD按钮,将21H写入IR指定的R1寄存器。
5.在SW7-SW0. 上设置02H, 作为通用寄存器R2的寄存器号。按一次QD按钮,将02H写入IR。
6.在SW7-SW0设置10H,作为R2的值。按一次QD按钮,将10H写入IR指定的R2寄存器。
7. 设置R1、R2结束,按CLR#按钮,使实验系统恢复到初始状态。
存程序机器代码。
本操作中,在10H单元存入01H,从20地址开始存10个机器代码: 0B0H,58H,00H, 00H, 00H, 00H, 00H, 00H, 00H, 84H。 从0A0H存入2个机器代码: 30H, 0A0H。
1.令DP=0,DB=0,DZ=0,使实验系统处于连续运行状态。令SWB=1,SWA=0,使实验系统处于写双端口存储器工作方式KWRD。按CLR#按钮,使实验系统处于初始状态。
2.置SW7-SW0为10H,按QD按钮,将10H写入AR1。
3. 置SW7-SW0 为01H,按QD按钮,将01H写入存储器10H单元。
4.按CLR#按钮,使实验系统恢复初始状态。
5.置SW7-SW0为20H,按QD按钮,将20H写入AR1。
6. 置SW7-SW0为0B0H, 按QD按钮,将0B0H写入存储器20H单元。AR1自动加1,变为21H。
7.置SW7-SW0为58H,按QD按钮,将58H写入存储器21H单元。AR1自动加1,变为22H。
8.重复进行下去,一直到将84H写入存储器29H单元。
按CLR#按钮,使实验系统恢复到初始状态。
9.置SW7-SW0为0A0H,按QD按钮,将0A0H写入AR1。
10. 置SW7-SW0 为30H, 按QD按钮,将30H写入存储器0A0H单元。
11.置SW7-SW0为 0A0H, 按QD按钮,将0AOH写入存储器0A1H单元。
12.按CLR#按钮,使实验系统恢复到初始状态。
(4)从地址20H执行程序,在程序运行中,按一次控制台的INTR。 进入中断后,用单拍(DP)方式执行,直到返回主程序为止。列表记录中断系统中有关信号的变化情况,特别要纪录好断点地址和R0的值。
1.令DP=0,DZ=0,DB=0,SWA=0,SWB=0,SWC=0,使实验系统处于连续运行状态。
2.置SW7-SW0为20H,作为程序的起始地址。按QD按钮,启动程序从20H地址运行。
3.按INTR按钮,发出一个INTR中断脉冲,请求中断。中断后硬件自动将中断地址存入中断地址寄存器IAR。微程序地址应为25H。
4. 置SW7-SW0为0A0H, 这是中断程序的入口地址。将DP由置0改为置1。按一次QD按钮,将0A0H送入程序计数器PC。微程序地址应为26H。
5. 按一次QD按钮,进行取指微操作。微程序地址应为05H。
6. 按一次QD按钮,进行置数微操作。微程序地址应为13H。
7. 按一次QD按钮,进行RO & RO操作,这时微程序地址应为38H。 观察DBUS总线的值,即为R0的值。
8. 按一次QD按钮,进行写回微操作。微程序地址应为34H。
9. 按一次QD按钮,进行判定有无中断请求INTQ微操作。微程序地址应为0FH。
10.按一次QD按钮,进行取指微操作。微程序地址应为05H。
11.按一次QD按钮,进行从中断程序返回主程序微操作。微程序地址应为1AH。 这时观察DBUS的值,即中断地址。
12.按一次QD按钮,进行判有无新的中断操作。微程序地址为0FH。
13. 按一次QD按钮,进行取指微操作。微程序地址为05H。 此刻,程序已返回主程序。
(5)操作方式同(4), 三次纪录到的中断地址和R0值一般不会相同。由于按下INTR按钮的时间对主程序而言,是随机的,具有不确定性,因此各次中断地址、R0会具有不同的值。
(6)将RAM中20H单元的内容由指令INTS改为INTC, 重作(4), 记录发生的现象。由于INTC是关中断指令,因此将不会发生中断。
把20H地址存放的值改为C0H,就关闭了中断指令,就无法按INTR停止运行。
五、个人总结
做这次实验才发现,原来在执行下一步前能够保存数据,以防实验错误导致内存数据出现错误,从而影响下一步操作。这个保存的方式是以txt形式保存,里面储存格式为二进制的地址:该地址二进制的存储数据。