LC-3 中断实验

实验介绍

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

一、用户程序:该程序持续间隔的输出两行不同的“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   

二、键盘中断处理程序:该程序每次简单的把用户键入的回车(x0A)之前的字符打印10次。在中断处理程序中,TRAP指令是不能使用的,当需要显示字符时,必须通过读写DSR的方式,也不能用TRAP x21(OUT)和其他的TRAP指令。在中断处理程序中要对用到的寄存器的状态暂存和恢复。

三、操作系统使能代码:很不幸的是,LC-3上还不能安装Windows 和 Linux ,所以如下工作需要在用户程序中首先完成:

  1、通常情况下,当遇到中断发生之前,操作系统已经开辟好栈空间,保存PC和PSR,当执行到RTI时,PC和PSR会被弹栈,因为没有操作系统,需要初始化R6为X3000,指示一个空栈。

  2、同样,操作系统会建立一张中断向量表,用来包含中断处理程序对应的起始执行地址,因此,本实验的键盘中断处理程序需要你来做,中断向量表的起始地址为X0100,键盘中断处理程序的起始地址为X80,本实验只需要提供该中断处理程序的地址即可。

  3、最后,操作系统会把KBSR的IE(Interrupt Enable) 位置1,所以你也需要这样做。

实验步骤

1.分析程序组成

        用户程序+键盘中断程序

用户程序
.ORIG x3000
;初始化
     ;1)R6<-x3000,初始化堆栈指针
     ;2)设置键盘中断矢量表条目,X0180对应键盘中断服务程序入口地址改为X2000
     ;3)启动键盘中断,KBSR【14】<-1
;用户程序
     1)循环输出两行”ICS”
        可以使用系统调用

Halt

.end

---------------

中断程序
.ORIG x2000
保存寄存器

….




恢复寄存器
RTI
Halt

.end
2.用户程序的分析

LC-3 中断实验_第1张图片

3.键盘中断程序的分析 

LC-3 中断实验_第2张图片

4.程序运行代码

用户程序代码(用户模式)

LC-3 中断实验_第3张图片

 键盘中断处理程序(超级模式)

LC-3 中断实验_第4张图片

5.运行效果截图

 

LC-3 中断实验_第5张图片

 字符csi中断服务

LC-3 中断实验_第6张图片

6.实验结论

         相对于第四个实验简单游戏设计来说,这个实验比它简单得太多了,应该是考察的重点不一样造成的。此次需要编写两个程序,一个是用户程序(相当于是主程序),另一个是键盘中断程序,它的用途主要是用来输入和输出键盘所键入的东西,涉及到了栈的相关知识。

        通过这次实验我对中断服务程序的作用有了个更加深刻的认识,加深了对LC3汇编语言的理解,学会更好地使用LC3指令,加深对内存的认识,提升我编写代码的能力。并灵活通过添加断点调试的方式发现并解决了许多错误。

为避免抄袭与查重,此处不便将源码直接放出,敬请谅解

 

你可能感兴趣的:(计算机系统Ⅰ,单片机,嵌入式硬件,汇编)