【深圳大学】计算机系统(1)中断实验

实验目的

  1. 分析和理解指定的需解决的问题
  2. 利用LC-3的汇编代码设计实现相关程序
  3. 通过LC-3仿真器调试和运行相关程序并得到正确的结果

实验内容

  • 实验背景:
    在计算机科学中,一个中断就是有硬件和软件发起的一个事件,表明需要立即处理。
    高优先级的条件下一个中断通知处理器需要中断正在运行的程序,处理器挂起正在处理的行为,保存执行程序的状态,然后执行一个小的中断处理程序(中断服务程序)来处理事件。
    中断是临时的,当处理器执行完中断处理程序后,处理器继续执行之前被中断的程序,中断分硬件中断和软件中断。

  • 实验描述:
    表明中断驱动的输入、输出可以中断一个正在运行的程序,执行中断服务程序,返回被中断的程序,从被中断位置下一个地址继续执行(好像什么也没发生似的)。实验中使用键盘作为输入设备,中断正在运行的程序。

实验任务:

A.用户程序
用户程序将会包含连续地输出纵横交替的ICS,通过交替输出两个不同行,如下:

ICS     ICS     ICS     ICS     ICS     ICS      
    ICS     ICS     ICS     ICS     ICS           
ICS     ICS     ICS     ICS     ICS     ICS      
    ICS     ICS     ICS     ICS     ICS        
ICS     ICS     ICS     ICS     ICS     ICS      
    ICS     ICS     ICS     ICS     ICS           
ICS     ICS     ICS     ICS     ICS     ICS      
    ICS     ICS     ICS     ICS     ICS 

确保输出不至于太快,以至于肉眼不能察觉。用户程序应该包含以小段代码用于每行间的计数,间隔为从25000开始倒计时输出在屏幕上。

B.键盘中断服务程序
键盘中断服务程序将会简单地在屏幕上写上十次,用户随机输入的字符并以Enter(x0A)结束。
中断服务程序中不能使用TRAP指令。如在屏幕上显示一个字符,必须检测先DSR寄存器,然后写进DDR寄存器,并且也不可以调用 TRAP x21(OUT),或者其它TRAP程序。
注意,不要忘记保存和恢复服务程序中使用的那些寄存器。

C.操作系统支持的代码
LC-3上没有安装windows或Linux,所以必须要求在用户程序代码前先做到以下三个步骤。
1.正常情况下,操作系统将会先安装一些栈空间,所以当中断发生的时候 PC和PSR可以被放进栈中(当程序执行RTI,PC和PSR都会被弹出栈,处理器返回到执行被中断的程序)由于没有操作系统,请先把R6初始化为x3000,表示一个空的栈。
2.正常情况下,操作系统会建立中断向量表,它包含对应中断服务程序的起始地址,你必须为键盘中断先建立一个中断向量表。中断向量表的开始地址是x0100,键盘中断的中断向量是x80。你必须在中断向量表提供一个入口供本实验使用。
3.操作系统应该设置KBSR的IE(Interrupt Enable)位,这个也由你实现。

实验注意:

1.Linux LC-3模拟器不包括支持中断,因此你必须使用windows LC-3模拟器。
2.请参考课本第八章8.5 第10章,附录A
3.无需对超级栈进行PUSH和POP的操作(这个是由硬件完成的)
4. 两个文件汇编生成的OBJ文件都需要导入,注意先后次序,让PC=X3000
5.中断服务程序不可以使用TRAP,使用轮询方式。当有字符输入时就进入中断服务程序,a)然后直接退出中断服务程序,或者b)当输入ENTER才会退出中断服务程序。

实现代码

用户程序

注意:二至六行是重点

		.ORIG	X3100
		LD	R6, STACK
		LD	R2, INT		;载入中断程序地址至R2
		STI	R2, INVT	;将R2载入键盘中断向量表x0180
		LD	R2, num		
		STI	R2, KBSR	;将KBSR第14位IE位赋1
START	LEA	R0, ROW1	;分别输出第1行和第2行并延迟
		PUTS
		JSR	DELAY
		LEA	R0, ROW2
		PUTS
		JSR	DELAY
		BRnzp	START
	
STACK	.FILL	X3000
INVT	.FILL	X0180
INT		.FILL	X2000
KBSR	.FILL	XFE00
num		.FILL	X4000
ROW1	.STRINGZ "ICS   ICS   ICS   ICS   ICS   ICS\n" 
ROW2	.STRINGZ "   ICS   ICS   ICS   ICS   ICS   \n"

DELAY   ST	R1, SaveR1	;延迟函数
        LD	R1, COUNT
REP     ADD	R1,R1,#-1
        BRp	REP
        LD	R1, SaveR1
        RET
COUNT   .FILL	#25000
SaveR1  .BLKW	1

		.END

中断程序

	.ORIG	X2000
	ST	R0, SAVE0
	ST	R1, SAVE1
	ST	R2, SAVE2

	LDI	R0, KBDR
	ADD	R1, R0, -10
	BRz	OVER

ASK1	LDI	R1, DSR		;轮询输出设备(事实上可免)
		BRzp	ASK1		
INIT	AND	R2, R2, 0	;将R2赋10
		ADD	R2, R2, 10
LOOP	STI	R0, DDR		;输出字符10ADD	R2, R2, -1
		BRp	LOOP
ASK2	LDI	R1, KBSR	;轮询输入设备,是否有新字符
		BRzp	ASK2
		LDI	R0, KBDR
		ADD	R1, R0, -10	;若不为ENTER,打印该字符10BRnp	INIT		;否则输出后退出
		STI	R0, DDR

OVER	LD	R0, SAVE0
		LD	R1, SAVE1
		LD	R2, SAVE2
		RTI

SAVE0	.BLKW	1
SAVE1	.BLKW	1
SAVE2	.BLKW	1
ENTER	.FILL	X0A
BLANK	.FILL	X20	
KBSR	.FILL	XFE00
KBDR	.FILL	XFE02
DSR		.FILL	XFE04
DDR		.FILL	XFE06

	.END

对你有帮助的话点个赞叭

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值