这些指令微程序的分析和验证。
该步骤中应将功能开关拨为11010,即设为单步、手动执行指令,使用微程序控制器,联机操作。
表6-1 若干扩展指令的执行周期微程序
指令 微地址 操作功能 EI DI 58H 59H EI DI SP?AR SP+1?SP 68H MEM?STR 23H 0011 CC# INTOLD# 0000 001 000 001 000 0000 0000 010 000 100 000 下址 CI3~0 30H 0011 30H 0011 00H 1110 SCC3~0 MRW I2~0 I8~3 0000 0000 0000 100 100 100 B口 A口 SST SSH\\SCI DC2 DC1 110 000 111 000 011 000 000 001 000 0000 0000 000 000 001 000 0000 0000 000 011 010 000 0100 0100 000 000 000 001 IRET 67H
注意:以上扩展指令若在程序段中使用,在监控状态下必须用E命令写入机器指令代码,而不能使用A命令写入汇编指令。
2、设定工作方式
中断实验中的程序执行控制由微程序控制器实现,因此,功能开关状态设定为00010,即联机方式下,采用微程序控制器连续运行程序。
3、编写显示子程序
本实验中需要通过中断服务程序中的字符显示来查看中断执行情况,字符显示时仍然采用程序查询方式。因此,将各程序段中所需的显示代码作为单独子程序。
该显示子程序保存于2200H单元,代码如下: 2200: PUSH R0 ;保护待显示字符所在的寄存器R0
2201: 2202: 2203: 2204: 2205: 2206:
IN SHR JRNC POP OUT RET
81 R0 2201 R0 80
;查询接口状态,判断字符输出是否完成 ;未完成,则循环等待
;显示完成,则恢复寄存器,R0出栈 ;输出R0的值
4、编写中断服务程序
系统中三个中断源,分别需要编写三段中断服务程序,本实验只需观察各中断的执行效果,因此三段中断服务程序功能为:在屏幕上显示连续的15个数字字符“1”、“2”、“3”,显示完成后中断返回。
由于三段中断服务程序功能一致,只是显示的具体字符不同,这里可以将三段中断服务程序的功能部分使用同一段代码完成,各中断请求时转入对应的入口位置,进行参数——显示字符的设置。
P1中断服务程序段入口为2420H,代码如下: 2420: PUSH R0 ;R0进栈
2421: 2422:
PUSH R3 MVRD R3 , 31
;R3进栈
;将显示字符‘1’的ASCII 码送寄存器R3
2424: JR 2450
P2中断服务程序段入口为2430H,代码如下: 2430: PUSH R0 ;R0 进栈 2431: PUSH R3 ;R3 进栈 2432: MVRD R3 , 32 ;将字符‘2’的ASCII 码送寄存器R3 2434: JR 2450
P3中断服务程序段入口为2440H,代码如下:
2440: 2441: 2442:
PUSH PUSH
R0 R3
;R0 进栈 ;R3 进栈
;将字符‘3’的ASCII 码送寄存器R3
MVRD R3 , 33
2444: JR 2450
以上三段代码在完成入口参数设置后,均转入2450H单元中执行,该地址中保存中断服务程序的功能代码,具体如下:
2450: *EI
2451: 2453: 2455: 2457: 2459: 245A: 245C: 245D: 245E: 245F: 2460: 2461: 2463: 2465: 2467: 2469: 246A: 246C: 246D: 246E:
MVRD R0 , 42 CALA 2200 MVRD R0 , 49 CALA 2200 MVRR R0 , R3 CALA IN SHR SHR JRNC IN
2200 81 R0 R0 245C 80
;开中断(指令编码:6E00)
;将字符“B”赋值给R0,B 即Begin 的缩写。 ;调用子程序,完成显示
;将字符“I”赋值给R0,Interrupt 的缩写。 ;调用子程序,完成显示
;将要显示的字符——R3的内容送R0 ;调用子程序,完成显示 ;判键盘上是否按了一个键 ;即串口是否有输入字符
;若没有,等待
;输入字符到R0,实际读入该字符没有用处 ;将字符“E”赋值给R0,E即End的缩写。 ;调用子程序,完成显示
;将字符“I”赋值给R0,Interrupt 的缩写。 ;调用子程序,完成显示 ;将R3的内容送R0 ;调用子程序,完成显示 ;R3出栈
;R0出栈
;中断返回(指令编码:EF00)
MVRD R0 , 0045 CALA 2200 MVRD R0 , 0049 CALA 2200 MVRR R0 , R3 CALA POP POP *IRET
2200 R3 R0
5、填写中断向量
TEC-XP教学机采用向量地址转移法来实现中断的响应,即响应中断时,由硬件产生一个向量地址,该向量地址中保存一条可以转向对应中断服务程序的转移指令,CPU通过执行该转移指令转入中断服务程序。
根据系统的硬件连接,P1、P2、P3的中断向量地址分别为2404H、2408H和240CH,这三个地址中应写入以下三条指令:
2404: 2408: 240C:
JR JR JR
2420 2430 2440
;跳转到一级中断服务程序 ;跳转到二级中断服务程序 ;跳转到三级中断服务程序
6、编写主程序
主程序应开中断,等待中断请求的到来,并同时循环显示字符“6”。主程序存放于2000H中,代码如下:
2000: 2001: 2003: 2005: 2007: 2008: 2009: 200A:
*EI
MVRD R0 , 0036 CALA 2200 MVRD R0 , 4000 DEC R0 JRNZ JR RET
2007 2001
;将字符‘6’的ASCII 码送寄存器R0 ;输出该字符 ;延时子程序
;跳到2001 循环执行该程序
注意:在以上代码中,转移指令中的地址均为直接地址,若程序的入口地址不同,则各转移指令中的地址都要进行相应的改动。
7、运行主程序,等待、响应中断。
在监控状态命令行,使用G命令执行主程序,具体命令如下: G 2000↙ (1)无中断请求
在没有任何中断请求时,主程序运行结果是:在屏幕上连续显示字符“6”。 (2)单级中断
主程序运行过程中,按下P1按键,则进入P1的中断服务程序,屏幕上会中断字符“6”的显示,显示字符串“BI1”,然后等待按键,屏幕上状态无变化。键入任一按键,屏幕上显示字符串“EI1”,返回中断,继续执行主程序,循环显示字符“6”。
再次提交P2、P3的中断请求,查看结果。 (3)中断嵌套
主程序运行过程中,按下P1按键,则进入P1的中断服务程序,屏幕上会中断字符“6”的显示,显示字符串“BI1”,然后等待按键,屏幕上状态无变化。
此时,按下P2按键,则中断P1的服务程序,执行P2的中断服务程序,屏幕上显示字符串“BI2”,等待按键。再按下P3按键,再次发生中断嵌套,屏幕上显示字符串“BI3”,等待按键。
8、更改主程序和中断服务程序功能
尝试修改主程序和中断服务程序代码,主程序等待中断时循环显示字符“M”,各级中断服务程序只循环显示16个字符“1、2、3”即产生中断返回。 完成以上程序修改后,试观察单级中断和中断嵌套的现象。
思考问题
1、观察三级中断的嵌套现象,当执行P3中断时,连续按下键盘3次,观察到的显示效果如何?
2、更改中断服务程序后,中断嵌套现象和更改前有什么不同?
实验报告要求
本次实验需完成实验报告一份,本次实验报告内容只写实验步骤8中要求更改程序功能的主程序和中断服务程序,并回答思考问题。