计算机系统(1) 实验五 中断实验

计算机系统(1) 实验五 中断实验

实验目的

展示如何让输入输出通过执行中断处理程序的方式来暂停和恢复一个正在运行的程序,恢复后的程序就像中间什么都没有发生过,本实验使用键盘作为输入来中断正在运行的程序。

实验内容与实验要求

1.编写用户程序:该程序持续间隔的输出两行不同的“ICS”

2.编写键盘中断处理程序:该程序每次简单的把用户键入的回车(x0A)之前的字符打印10次。

编写操作系统使能代码:将R6初始化为x3000,指示一个空栈;提供中断处理程序的地址;把KBST的IE位置1

实验步骤

1.根据实验要求编写用户程序代码

(1)使用户程序持续间隔的输出两行不同的“ICS”

图1.连续输出两行不同的“ICS”
图1.连续输出两行不同的“ICS”

(2)将计数子程序嵌入主程序中

在这里插入图片描述
图二.子程序

2.根据实验要求编写中断处理程序

在这里插入图片描述
图三.中断程序代码1

在这里插入图片描述
图四.中断程序代码2

3.编写操作系统使能代码
将R6初始化为x3000,中断向量表的起始地址为X0100,键盘中断处理程序的起始地址为X80,提供中断处理程序的地址,把KBSR的IE位置1

在这里插入图片描述
图五.操作系统使能代码

4.运行代码
将两段程序代码一起放入LC3-Simulator中运行,输入一串字符后按回车。
在这里插入图片描述
图六.未执行中断前的运行状态

在这里插入图片描述
图七.输入回车前的字符为“r”

在这里插入图片描述
图八.输入回车前的字符为“8”

程序代码及注释

主程序代码:
	.ORIG	x3000
;中断向量表的起始地址为X0100,键盘中断处理程序的起始地址为X0180,把x2000存到x0180
;initialize the stack pointer
;set up the keyboard interrupt vector table entry
	LD	R0,INTERRUPT
	LD	R1,KEYBOARD
	STR	R0,R1,#0
;enable keyboard interrupts
;把KBSR的IE(Interrupt Enable) 位置1,中断使能
	LD	R0,KBSR1
	LD	R1,SETKBSRIE
	STR	R1,R0,#0
	LD	R6,START
;主程序代码
;start of actual user program to print ICS checkerboard
OUTPUT	LEA	R0,ODD
	TRAP	x22
	LD	R0,NEWLINE
	TRAP	x21
	JSR	DELAY	
	LEA	R0,EVEN
	TRAP	x22
	JSR	DELAY
	LD	R0,NEWLINE
	TRAP	x21	
	BRnzp	OUTPUT
STOP	HALT

;主程序数据区
ODD	.STRINGZ	"ICS     ICS     ICS     ICS     ICS     ICS"
EVEN	.STRINGZ	"    ICS     ICS     ICS     ICS     ICS"
NEWLINE	.FILL		x000A
START	.FILL		x3000
KEYBOARD	.FILL	x0180
INTERRUPT	.FILL	x2000
KBSR1		.FILL	xFE00
SETKBSRIE	.FILL	x4000;与操作,扩展为16;子程序代码
DELAY	ST	R1,SAVER1
	LD	R1,COUNT
REP	ADD	R1,R1,#-1
	BRp	REP
	LD	R1,SAVER1
	RET

;子程序数据区
COUNT	.FILL	#2500
SAVER1	.BLKW	1

	.END


中断程序代码:
	.ORIG	x2000
;the code
;R2用来存放输出次数
	ST	R0,SAVER0
	ST	R1,SAVER1
	ST	R2,SAVER2
	ST	R3,SAVER3
	ST	R4,SAVER4
	AND	R2,R2,#0
	ADD	R2,R2,#10
;中断程序代码(采用轮询的方式)
INPUT	LDI	R3,KBSR
	BRzp	INPUT
	LDI	R0,KBDR
OUTPUT	LDI	R3,DSR
	BRzp	OUTPUT
;判断是否是回车
	AND	R4,R4,#0
	ADD	R4,R4,#-10
	ADD	R4,R4,R0
	BRz	CIRCLE
	ST	R0,LIN	
	BRnzp	INPUT
;循环输出10次
CIRCLE	ADD	R2,R2,#0
	BRz	STOP
	ADD	R2,R2,#-1
	LD	R0,LIN
	STI	R0,DDR
	BRnzp	CIRCLE
;
STOP	LD	R0,SAVER0
	LD	R1,SAVER1
	LD	R2,SAVER2
	LD	R3,SAVER3	
	LD	R4,SAVER4
	
	RTI
	HALT

;中断程序数据区buffer space as required
KBSR	.FILL	xFE00
KBDR	.FILL	xFE02
DSR	.FILL	xFE04
DDR	.FILL	xFE06
SAVER0	.BLKW	1
SAVER1	.BLKW	1
SAVER2	.BLKW	1
SAVER3	.BLKW	1
SAVER4	.BLKW	1
LIN	.BLKW	1
	.END

总结

输入输出通过执行中断处理程序的方式来暂停和恢复一个正在运行的程序,恢复后的程序就像中间什么都没有发生过,运用中断程序可以使计算机程序更加灵活。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值