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

一、实验目的

分析和理解指定的需解决问题。

利用LC-3的汇编代码设计实现相关程序。

通过LC-3仿真器调试和运行相关程序并得到正确的结果。

二、实验内容

实验任务包括以下三部分

A.用户程序

B.键盘中断服务程序

C.操作系统支持的代码

A.用户程序

用户程序将会包含连续地输出纵横交替的ICS,通过交替输出两个不同行,确保输出不至于太快,以至于肉眼不能察觉。用户程序应该包含以小段代码用于每行间的计数,间隔为从25000开始倒计时输出在屏幕上。

B.键盘中断服务程序

键盘中断服务程序将会简单地在屏幕上写上十次,用户随机输入的字符并以Enter(x0A)结束。

中断服务程序中不能使用TRAP指令。如在屏幕上显示一个字符,必须检测先DSR寄存器,然后写进DDR寄存器,并且也不可以调用 TRAP x21(OUT),或者其它TRAP程序。

C.操作系统支持的代码

1.正常情况下,操作系统将会先安装一些栈空间,所以当中断发生的时候 PC和PSR可以被放进栈中(当程序执行RTI,PC和PSR都会被弹出栈,处理器返回到执行被中断的程序)由于没有操作系统,请先把R6初始化为x3000,表示一个空的栈。

2.正常情况下,操作系统会建立中断向量表,它包含对应中断服务程序的起始地址,你必须为键盘中断先建立一个中断向量表。中断向量表的开始地址是x0100,键盘中断的中断向量是x80。你必须在中断向量表提供一个入口供本实验使用。

3.操作系统应该设置KBSR的IE(Interrupt Enable)位,这个也要实现。

三、实验步骤与结果

(1)编写用户程序

1.初始化数据

 2.打印6个的ICS

 3.打印5个的ICS

 4.delay子程序

 5.数据存储区

 

代码

	.ORIG x3000
	LD R6,stack
	LD R1,entry
	LD R2,start
	STR R2,R1,#0
	LD R3,IE
	STI R3,KBSR

;打印6个的ICS
begin	AND R4,R4,#0
	ADD R4,R4,#6
print6	BRz enter1
	LEA R0,ICS6
	PUTS
	JSR delay
	ADD R4,R4,#-1
	BRnzp print6
enter1	LD R0,huiche
	OUT
	JSR delay

;打印5个的ICS
	AND R4,R4,#0
	ADD R4,R4,#5
print5	BRz enter2
	LEA R0,ICS5
	PUTS
	JSR delay
	ADD R4,R4,#-1
	BRnzp print5
enter2	LD R0,huiche
	OUT
	JSR delay
	BRnzp begin

Halt

;子程序delay
delay	ST R1,saveR1
	LD R1,count
REP 	ADD R1,R1,#-1
	BRp REP
	LD R1,saveR1
	RET

;数据存储区
stack	.fill x3000
entry	.fill x0180
start	.fill x2000
IE	.fill x4000
KBSR	.fill xFE00
ICS6	.STRINGZ "ICS   "
ICS5	.STRINGZ "   ICS"
huiche .fill x000A
count	.fill #25000
saveR1	.fill #0

	.END

(2)键盘中断服务程序

1.将寄存器的值存入栈中

2.检查键盘的状态并输出

3.结束中断程序

4.数据存储区

代码

	.ORIG x2000
	ADD R6,R6,#-1
	STR R0,R6,#0
	ADD R6,R6,#-1
	STR R1,R6,#0
	ADD R6,R6,#-1
	STR R2,R6,#0
	ADD R6,R6,#-1
	STR R3,R6,#0

;检查键盘的状态并输出
check	LDI R1,KBSR
	BRzp check
	LDI R0,KBDR
	ST R0,saveR0
	LD R3,huiche
	ADD R3,R3,R0
	BRz jieshu
	AND R2,R2,#0
	ADD R2,R2,#10

loop 	LD R0,saveR0

pan	LDI R1,DSR
	BRzp pan

	STI R0,DDR
	ADD R2,R2,#-1
	BRp loop

	BRnzp check

;结束
jieshu	LDR R3,R6,#0
	ADD R6,R6,#1
	LDR R2,R6,#0
	ADD R6,R6,#1
	LDR R1,R6,#0
	ADD R6,R6,#1
	LDR R0,R6,#0
	ADD R6,R6,#1
	RTI

;数据存储区	
saveR0	.fill #0
huiche	.fill xFFF6
KBSR	.fill xFE00
KBDR 	.fill xFE02
DSR	.fill xFE04
DDR 	.fill xFE06

	.END

(3)运行代码

1.读取程序

2.运行

3.输入 abc

4.输入回车

四、实验结论

达成了本次实验的目标,加深了对中断程序的理解以及使用delay子程序进行延时,以及对于栈区数据的存储和恢复,对lc3有了更加深入的了解和运用

(by 子忆)

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归忆_AC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值