✅ 操作成功!

中断服务程序

发布时间:2023-06-09 作者:admin 来源:文学

中断服务程序

中断服务程序

-

2023年2月27日发(作者:避雷器的工作原理)

计算机组成原理中断实

验报告

文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]

北京建筑大学

2015/2016学年第二学期

课程设计

课程名称计算机组成原理综合实验

设计题目微程序控制器设计与实现

系别电信学院计算机系

班级计141

学生姓名艾尼瓦尔·阿布力米提

学号

完成日期二〇一六年七月八日星期五

成绩

指导教师

(签名)

计算机组成综合实验任务书

指导教师姓

王怀秀系计算机

任务

微程序控制器的设计与实

人数32学时1周

实验目的

1.融合贯通计算机组成原理课程,加深对计算机系统各模块的

工作原理及相互联系(寄存器堆、运算器、存储器、控制台、微

程序控制器)。

2.理解并掌握微程序控制器的设计方法和实现原理,具备初步

的独立设计能力;3.掌握较复杂微程序控制器的设计、调试等

基本技能;提高综合运用所学理论知识独立分析和解决问题的能

力。

实验任务

•基于TEC-9教学实验平台基于原有指令集的基础上设计或扩展

4~8条指令。首先在原微程序控制器指令系统的基础上进行原指

令集的微指令编码的测试,然后利用上端软件,编写用户设计的

微指令,实现指令预定的功能。

实验步骤

•1、进行原实验平台指令集的微程序控制器下指令运行测试;

•2、记录每一条机器指令的指令的执行流程和微命令编码;

•3、画出每一条指令的指令微程序执行流程图;

•4、在原有指令集基础上自行设计或扩展4~8条指令。画出扩展

指令的指令执行流程图;

•5、利用上端软件,把所编写的微程序控制器内容写入实验台中

控制器中。

•6、利用单拍测试控制器与编程的要求是否一致。如果有错误重

新修改后再写入控制器中。

7、编写一段测试程序,测试控制器运行是否正确。

实验目的

1.融合贯通计算机组成原理课程,加深对计算机系统各模块的工作原理及

相互联系(寄存器堆、运算器、存储器、控制台、微程序控制器)。

2.理解并掌握微程序控制器的设计方法和实现原理,具备初步的独立设计

能力;3.掌握较复杂微程序控制器的设计、调试等基本技能;提高综合运

用所学理论知识独立分析和解决问题的能力。

实验电路

1.微指令格式与微程序控制器电路

2.微程序控制器组成

仍然使用前面的CPU组成与机器指令执行实验的电路图,但本次实验加入中

断系统。这是一个简单的中断系统模型,只支持单级中断、单个中断请求,有中

断屏蔽功能,旨在说明最基本的原理。

中断屏蔽控制逻辑分别集成在2片GAL22V10(TIMER1和TIMER2)中。其

ABEL语言表达式如下:

INTR1:=INTR;

=CLK1;

IE:=CLR&INTS#CLR&IE&!INTC;

=MF;

INTQ=IE&INTR1;

其中,CLK1是TIMER1产生的时钟信号,它主要是作为W1—W4的时钟脉

冲,这里作为INTR1的时钟信号,INTE的时钟信号是晶振产生的MF。INTS微指

令位是INTS机器指令执行过程中从控制存储器读出的,INTC微指令位是INTC机

器指令执行过程中从控制存储器读出的。INTE是中断允许标志,控制台有一个指

示灯IE显示其状态,它为1时,允许中断,为0时,禁止中断。当INTS=1

时,在下一个MF的上升沿IE变1,当INTC=1时,在下一个MF的上升沿IE变

0。CLR信号实际是控制台产生的复位信号CLR#。当CLR=0时,在下一个CLK1

的上升沿IE变0。当CLR=1且INTS=0且INTC=0时,IE保持不变。

INTR是外部中断源,接控制台按钮INTR。按一次INTR按钮,产生一个中断

请求正脉冲INTR。INTR1是INTR经时钟CLK1同步后产生的,目的是保持INTR1

与实验台的时序信号同步。INTR脉冲信号的上升沿代表有外部中断请求到达中断

控制器。INTQ是中断屏蔽控制逻辑传递给CPU的中断信号,接到微程序控制器

上。当收到INTR脉冲信号时,若中断允许位INTE=0,则中断被屏蔽,INTQ仍

然为0;若INTE=1,则INTQ=1。

为保存中断的断点地址,以便中断返回,设置了一个中断地址寄存器IAR。

第二节图4中的IAR(U19)就是这个中断地址寄存器,它是一片74HC374,有

LDIAR和IAR_BUS#两个信号输入端,均连接至微程序控制器。LDIAR信号的上升

沿到达时,来自程序计数器PC的地址会置入IAR中。IAR_BUS#为0时,保存在

IAR中的断点地址会输出到数据总线DBUS上。由于本实验系统只有一个断点寄存

器而无堆栈,因此仅支持一级中断而不支持多级中断。

中断向量即中断服务程序的入口地址,在本实验仪中由8位数码开关SW7—

SW0提供。

3.中断的检测、执行和返回过程

微程序控制器每执行一条机器指令之后,执行下一条机器指令之前,先转到

微地址0F处(见图12微程序流程图),在条件位P1=1时判断是否有中断请求

INTQ。如果没有INTQ,则继续正常的机器指令执行。若检测到中断请求INTQ,

首先发出关中断信号INTC、保存断点信号LDIAR,并且发出停机信号TJ,等待手

动设置中断向量。设置好SW7—SW0后,按QD按钮启动,机器将中断向量读入程

序计数器PC中,从而转到中断服务子程序去执行。

执行一条机器指令IRET,从中断服务子程序返回时,发出IAR_BUS#信号,

从中断地址寄存器IAR向数据总线DBUS输出断点地址,再从DBUS依次写入到

R4、PC中,恢复执行被中断的程序。

发生中断时,关中断由硬件负责,而中断现场(寄存器堆中的寄存器,进位

标志C)的保存和恢复由中断服务程序来处理。

实验任务

(1)了解中断系统中每个信号的意义和变化条件,并将下面的主程序和中

断服务程序手工汇编成十六进制机器代码,此项任务应在预习时完成。

主程序:

地址指令机器代码

20HINTS

21HLDAR0,[R2]

22HADDR0,R0

23HADDR0,R0

24HADDR0,R0

25HADDR0,R0

26HADDR0,R0

27HADDR0,R0

28HADDR0,R0

29HJMP[R1]

中断服务程序:

地址指令机器代码

0A0HANDR0,R0

0A1HIRET

(2)参考CPU组成与机器指令执行实验,再加上中断系统,完成本次实验

的线路连接。接通电源之前应仔细检查接线,确认无误。

(3)将上述任务(1)的程序代码存入内存中,并根据需要设置通用寄存器

组和内存相关单元的数据。其中,寄存器R1的值应置为21H,以便程序循环执

行。

(4)从地址20H执行程序,在程序运行中,按一次控制台的INTR。进入中

断后,用单拍(DP)方式执行,直到返回主程序为止。列表记录中断系统中有关

信号的变化情况,特别要纪录好断点地址和R0的值。

(5)重复执行(4)两次。(一共执行3次)

(6)将RAM中20H单元的内容由指令INTS改为INTC,重作(4),记录发

生的现象。

六、实验步骤和实验结果

1、实验程序

主程序:

地址指令机器代码

20HINTS0BH

21HLDAR0,[R2]58H

22HADDR0,R000H

23HADDR0,R000H

24HADDR0,R000H

25HADDR0,R000H

26HADDR0,R000H

27HADDR0,R000H

28HADDR0,R000H

29HJMP[R1]84H

中断服务程序:

地址指令机器代码

0A0HANDR0,R030H

0A1HIRET0A0H

2、接线

微程序控制器与数据通路之间的线可以通过选择开关直接选择。将开关设置

为“微程序”。只需连接数据通路部分的线。

a、数据通路的LDIR接CER、LDPC接LDR4、LDDR1接LDDR2、M1接M2、

LDAR1接LDAR2。

b、指令寄存器IR的输出IR0接双端口寄存器堆的RD0、WR0,IR1接RD1、

WR1,IR2接RS0,IR3接RS1。

C、单脉冲DMC接中断INTR

选择开关拔至“微程序”

3、存程序机器代码,设置通用寄存器R1、R2及内存相关单元的数据。

(1)、设置寄存器R1、R2的值

根据要求,设置R1=21H,R2的值由实验者自定,假定为10H。

1)、令DP=0,DB=0,DZ=0,使实验系统处于连续运行状态。令SWB=

1,SWA=1,使实验系统处于寄存器加载工作方式KLD。按CLR#按钮,使

实验系统处于初始状态。

1)、在SW7—SW0上设置一个存储器地址,该存储器地址供设置通用寄存器使

用。该存储器地址最好是不常用的一个地址,以免设置通用寄存器操作破坏

重要的存储器单元的内容。例如可将该地址设置为0FFH。按一次QD按钮,

将0FFH写入AR1和AR2。

2)在SW7—SW0上设置01H,作为通用寄存器R1的寄存器号。按一次QD按

钮,将01H写入IR。

3)在SW7—SW0设置21H,按一次QD按钮,将21H写入IR指定的R1寄存

器。

4)在SW7—SW0上设置02H,作为通用寄存器R2的寄存器号。按一次QD按

钮,将02H写入IR。

5)在SW7—SW0设置10H,作为R2的值。按一次QD按钮,将10H写入IR指

定的R2寄存器。

6)设置R1、R2结束,按CLR#按钮,使实验系统恢复到初始状态。

(2)、存程序机器代码。

本操作中,我们在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单元。

写主程序

1)按CLR#按钮,使实验系统恢复初始状态。

2)置SW7—SW0为20H,按QD按钮,将20H写入AR1。

3)置SW7—SW0为0B0H,按QD按钮,将0B0H写入存储器20H单元。AR1自

动加1,变为21H。

4)置SW7—SW0为58H,按QD按钮,将58H写入存储器21H单元。AR1自动

加1,变为22H。

5)重复进行下去,一直到将84H写入存储器29H单元。按CLR#按钮,使实验

系统恢复到初始状态。

写中断程序

1)置SW7—SW0为0A0H,按QD按钮,将0A0H写入AR1。

2)置SW7—SW0为30H,按QD按钮,将30H写入存储器0A0H单元。

3)置SW7—SW00A0H,按QD按钮,将0A0H写入存储器0A1H单元。

4)按CLR#按钮,使实验系统恢复到初始状态。

或用实验台监控系统或系统上端软件直接写入内容

(3)从地址20H连续执行程序

从地址20H连续执行程序,在程序运行中,按一次控制台的INTR。进入中断

后,用单拍(DP)方式执行,直到返回主程序为止。列表记录中断系统中有关信

号的变化情况,特别要纪录好断点地址和R0的值。

1)令DP=0,DZ=0,DB=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按钮,进行R0&R0操作,这时微程序地址应为38H。观察DBUS

总线的值,即为R0的值。

8)按一次QD按钮,进行写回微操作。微程序地址应为34H。

9)按一次QD按钮,进行判定有无中断请求INTQ微操作。微程序地址应为

0FH。

10)按一次QD按钮,进行取指微操作。微程序地址应为05H。

11)按一次QD按钮,进行从中断程序返回主程序微操作。微程序地址应为

1AH。这时观察PC地址,即中断地址。

12)按一次QD按钮,进行判有无新的中断操作。微程序地址为0FH。

13)按一次QD按钮,进行取指微操作。微程序地址为05H。此刻,程序已返

回主程序。

由于按下INTR按钮的时间对主程序而言,是随机的,具有不确定性,因此各

次中断地址、R0会具有不同的值。

将RAM中20H单元的内容由指令INTS改为INTC,重作(4),记录发生的现

象。

由于INTC是关中断指令,因此将不会发生中断。

(4)控制存储器代码表

1.微程序控制器信号表

指令当前指

CM4CM3CM2CM1CM0

LDAR0,

[R2]

07H10H00H81H20H05H

05H10H00H04H91H10H

15H10H01H04H00H36H

36H10H0CH20H00H34H

34H00H12H00H00H0FH

LDAR1,

[R3]

07H10H00H04H00H05H

05H10H00H04H91H10H

15H10H01H04H00H36H

36H10H0CH20H00H34H

34H00H12H00H00H0FH

ADDR0,R107H10H00H04H00H05H

05H10H00H04H91H10H

10H10H20H00H00H3BH

3BH14H82H20H00H34H

34H00H12H00H00H0FH

JC+507H10H00H04H00H05H

05H10H00H04H91H10H

19H10H00H00H00H0FH

ANDR2,R307H10H00H04H00H05H

05H10H00H04H91H10H

13H10H20H00H00H38H

38H0DH82H20H00H34H

34H00H12H00H00H0FH

SUBR3,R207H10H00H04H00H05H

05H10H00H04H91H10H

11H10H20H00H00H3AH

3AH03H02H20H00H34H

34H00H12H00H00H0FH

STAR3,

[R2]

07H10H00H04H00H05H

05H10H00H04H91H10H

14H10H21H04H00H35H

35H10H06H00H00H0FH

STP07H10H00H04H00H05H

05H10H00H04H91H10H

16H30H00H00H00H0FH

JMP[R1]07H10H00H04H00H05H

05H10H00H04H91H10H

18H10H01H01H20H0FH

INTS00H30H00H02H08H26H

07H10H00H81H20H05H

05H10H00H04H91H10H

1AH10H20H00H00H3AH

3AH03H02H20H00H34H

34H00H12H00H00H0FH

IRET07H10H00H04H00H05H

05H10H00H04H91H10H

1BH10H00H41H20H0FH

2.拓展控制器信号表

指令CM4CM3CM2CM1CM0

XORRd,Rs10H10H04H00H05H

10H00H04H91H10H

10H20H00H00H31H

0BH02H20H00H34H

00H12H00H00H0FH

INCRd,Rs10H00H04H00H05H

10H00H04H91H10H

10H20H00H00H32H

00H02H20H00H34H

00H12H00H00H0FH

DECRd,Rs10H00H04H00H05H

10H00H04H91H10H

10H20H00H00H33H

17H82H20H00H34H

00H12H00H00H0FH

F=A+BRd,Rs10H00H04H00H05H

10H00H04H91H10H

10H20H00H00H24H

0EH02H20H00H34H

00H12H00H00H0FH

流程图

1.微程序流程图

2.拓展程序流程图

10H

XORRd,RsINCRdDECRd

F=1

21H22H23H24H

26H

INTQ=

1

INTQ=

0

OFH

INT

CN

#LD_AR

1

PC_IN

C

LDAR2

P1

TJ,CN

#LDIAR

INTC

10H

P2

CN

#SW_BUS

M4=1

LDPC

00H

CN

#P3

KT

07H

05H

STA

SUB

AND

ADD

LDA

CN

#RS_BU

SLD_A

CN

#LDDR1

CN

#LDDR1

CN

#LDDR1

CN

#LDDR1

RS_BUS

CN

#LDDR1

M1

ALU-BUS

CN

#M

实验结果

1、单拍执行程序(SWC=0,SWB=0,SWA==0;DP=1,DZ=0,DB=0)初值:

R1=11H,R2=22H

a、XORR1,R2执行结果R1=33H、R2=02H

b、INCR1,R2执行结果R1=34H、R2=02H

c、DECR1,R2执行结果R1=33H、R2=02H

d、F=A+BR1,R2执行结果R1=FFH、R2=02H

七、实验分析与总结

通过这次实验,首先我懂得了什么叫中断,同时学会了中断的调用。通过

亲自动手,能更好的理解本次实验的原理。

在做实验的过程中遇到了各种问题,在此过程中,我通过请教老师,还有班

里的同学(特别感谢拍子古,周瑞奇,喀斯等同学)最终成功的的做出来了。这

次实验提高了我的动手操作的能力。

通过这几天的课程设计,使我对计算机组成原理知识有了更加深刻的认识和

理解,对计算机的工作流程有了更具体的了解和认识。非常感谢这次的课程设计

给我带来的知识和学习经验,我真正意识到了实践是理论所不能及的。在今后

我一定会更加努力学习专业知识和技术。

👁️ 阅读量:0