前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LC-3 汇编语言 中断实验

LC-3 汇编语言 中断实验

作者头像
叶茂林
发布2023-07-30 11:19:28
2710
发布2023-07-30 11:19:28
举报
文章被收录于专栏:叶子的开发者社区

^_^你有没有想过以后的路怎么走@_@

题目描述

一、实验目的与要求

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

(2)试验中使用键盘作为输入设备,中断正在运行的程序。

二、实验内容与方法

试验任务包括实现以下三部分程序:

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

确保输出不至于太快,以至于肉眼不能察觉。因而,需要延时操作,可以考虑如下实现:

代码语言:javascript
复制
DELAY   	ST  R1, SaveR1
        	LD  R1, COUNT
REP  	ADD R1,R1,#-1
	        BRp REP
       		LD  R1, SaveR1
        	RET
COUNT   	.FILL #2500
SaveR1  	.BLKW 1

即用户程序包含一小段代码用于每行间的计数,间隔为从2500开始倒计时,计时结束时,再进行输出

B. 键盘中断服务程序

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

中断服务程序中要求不使用TRAP指令。

注意,不要忘记保存和恢复在中端服务程序中使用的那些寄存器。

C. 操作系统支持的代码

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

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

3.操作系统应该设置KBSR的IE(Interrupt Enable)位。

主程序

代码语言:javascript
复制
	.orig x3000

	ld r6,stack

	ld r0,inter
	sti r0,vector

	ld r0,enable
	sti r0,kbsr

again	lea r0,string1
	puts
	jsr DELAY
	lea r0,string2
	puts
	jsr DELAY
	br again

string1	.stringz "ICS   ICS  ICS  ICS  ICS  ICS\n"
string2	.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 x7fff
SaveR1	.BLKW 1

stack	.fill x4000
kbsr	.fill xfe00
vector	.fill x0180
enable	.fill x4000
inter	.fill x2000
	.end

中断程序

代码语言:javascript
复制
	.orig x2000

	add r6,r6,#-1
	str r0,r6,#0
	add r6,r6,#-1
	str r1,r6,#0
	add r6,r6,#-1
	str r2,r2,#0

return	ldi r0,kbsr
	brzp return
	ldi r0,kbdr
	ld r1,lf
	add r1,r1,r0
	brz tail
	ld r1,count
show	ldi r2,dsr
	brzp show
	sti r0,ddr
	add r1,r1,#-1
	brp show
	br return
	
tail	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

kbsr	.fill xfe00
kbdr	.fill xfe02
dsr	.fill xfe04
ddr	.fill xfe06
count	.fill #10
lf	.fill x-0a
	.end

思路分析

程序总体设计

核心数据结构

1、用户程序

R6初始化为x4000,表示一个空栈。

地址为x1080的内存空间存入值x2000,即将中断服务程序的入口地址写入键盘的中断矢量表。

地址为xfe00的内存空间存入值x4000,即设置KBSR的中断使能位。

R0存储字符串连续存储空间的首地址。

2、中断服务程序

R6是栈指针x4000。

R0存储KBSR的值,用于判断能否读取KBDR的内容。

然后R0继续存储KBDR的值,并于存储回车符的负ASCLL码的R1相加,其结果存放于R1,判断是否为回车符。

然后R1存储输出的次数10。

R2存储DSR的值,判断能否能否向DDR写入数据。

然后DDR存储输入的字符。

算法流程

中断服务程序

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 主程序
  • 中断程序
  • 思路分析
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档