1.Purpose——To showhow interrupt-driven Input/Output can interrupt a program that is running,execute the interrupt service routine, and return to the interrupted program,picking up exactly where it left off (just as if nothing had happened).

The assignment consists of three parts:

1)The user program

2)The keyboard interrupt service routine

3)The operating system enabling code

2.Principle: (1)本实验中对键盘输入采用interrupt I/O方式,对显示屏幕输出则采用polling的方式

(2)在user program 中,讲“cs@ustc”与“      ”作为两个字符串,控制二者轮流输出和换行时机,以达到实验要求输出方式

(3)为了至于显示频刷新过快,采用了延时的方法,即每一行输出后,count2500方进行下一行的输出

(4)在interrupt routine中不能采用trap指令,则逐一将需要输出的字符存储到DDR中以达到输出目的

3. procedure

代码注释:

.ORIG x3000LDR6,STACK ; initialize the stack pointerLD R2,ADDR  ; set up the keyboard interrupt vector tableentry             LD R3,VECTORSTRR2,R3,#0LD R2,ENABLE      ;enable keyboard interruptsLDR3,KBSRSTRR2,R3,#0LDR1,FEEDNUM1 ; start of actual user programto print checkerboardOUTPUT1      LEAR0,OUT1        ;输出第一行,从字符串OUT1开始轮流输出OUT1和TRAPx22             ;OUT2两个字符串,共输出9个则换行ADDR1,R1,#-1LEAR0,OUT2TRAPx22ADDR1,R1,#-1BRzOUTFED1      ;输出换行BRpOUTPUT1OUTFED1      JSRDELAYLDR0,FEEDTRAPx21LDR1,FEEDNUM2BRnzpOUTPUT2  ;转至输出第二行部分OUTPUT2      LEAR0,OUT2        ;输出第一行,从字符串OUT2开始轮流输出OUT2和TRAPx22             ;OUT1两个字符串,共输出8个则换行ADDR1,R1,#-1LEAR0,OUT1TRAPx22ADDR1,R1,#-1BRzOUTFED2BRpOUTPUT2OUTFED2      JSRDELAY            ;换行并且转至输出line1的部分LDR0,FEEDTRAPx21LDR1,FEEDNUM1BRnzpOUTPUT1DELAY          STR1, SaveR1       ;延时LD R1, COUNTREP               ADDR1,R1,#-1BRp REPLD R1, SaveR1RETENABLE        .FILLx4000KBSR             .FILLxFE00VECTOR        .FILLx180ADDR            .FILLx1500STACK           .FILLx3000COUNT         .FILL#2500SaveR1         .BLKW#1FEED             .FILL#13FEEDNUM1   .FILL#9FEEDNUM2   .FILL#8OUT1            .STRINGZ"CS@USTC"OUT2            .STRINGZ"       ".END----------------------------------------------------------------------------.ORIGx1500STR0,SAVER0              ;store the registersSTR2,SAVER2STR3,SAVER3STR4,SAVER4STR5,SAVER5STR7,SAVER7LDI R1,KBDR         ;初始化值LDR2,NUM0LDR3,NUM9NOTR2,R2           ;讲kbdr中只与0,9比较以判断是否是数字ADDR2,R2,#1ADDR2,R2,R1BRnNOTNUMNOTR3,R3ADDR3,R3,#1ADDR3,R3,R1BRpNOTNUMBRnzpISNUMISNUM          LEAR2,OUT1        ;是数字输出相应的字符串ISNUM2        LDRR0,R2,#0JSROUTPUTADDR2,R2,#1LEAR3,OUT2NOTR3,R3ADDR3,R3,#1ADDR3,R3,R2BRzDONEBRnpISNUM2NOTNUM      LEAR3,OUT2        ;不是数字,输出相应的字符串NOTNUM2    LDRR0,R3,#0JSROUTPUTADDR3,R3,#1LEAR2,KBDRNOTR2,R2ADDR2,R2,#1ADDR2,R2,R3BRzDONEBRnpNOTNUM2OUTPUT        STR1,SAVER1              ;因为不能使用trap,采用的输出方法LOOP            LDIR1,DSRBRzpLOOPSTIR0,DDRLDR1,SAVER1RETDONE           LDR1,ENABLE      ;结束LDR2,KBSRSTRR1,R2,#0LDR0,SAVER0LDR2,SAVER2LDR3,SAVER3LDR4,SAVER4LDR5,SAVER5LDR7,SAVER7RTIOUT1            .STRINGZ"\nICS2017:It is a number.\n"OUT2            .STRINGZ"\nICS2017: ?????? What is this ??????\n"KBDR             .FILLxFE02KBSR             .FILLxFE02ENABLE         .FILLx4000DSR               .FILLxFE04DDR              .FILLxFE06NUM0           .FILL#48NUM9           .FILL#57SAVER0         .BLKW#1SAVER1         .BLKW#1SAVER2         .BLKW#1SAVER3         .BLKW#1SAVER4         .BLKW#1SAVER5         .BLKW#1SAVER7         .BLKW#1.END

4.results

(1)测试

输入1,结果如下

输入k,结果如下

*以其他字符进行测试,输出均与要求一致

(2)反思

1.每行延迟为计数2500,在实际操作中仍然过快,在本人实验中,每输出一个7个字符的字符串delay等同时间,显示效果较佳

2.上述轮流输出的方式较为繁琐,把每行设置成一个字符串能使代码简化

3.在实验中PC,PSR的栈的入栈操作由模拟器本身进行,出栈由RTI执行,未能清楚得到乃至修改PSR的值的方法

【lc3】汇编实现I/O中断相关推荐

  1. 计算机系统(一)期末复(yu)习(3):LC-3汇编,输入与输出

    目录 前言 LC-3汇编 汇编语法 伪操作 TRAP指令 输入与输出 输入输出寄存器 输入获取机制 输出机制 汇编过程 前言 咕 LC-3汇编 这一章节主要介绍LC-3的汇编语言,汇编语言可以提供一些 ...

  2. c语言里10h代表什么,汇编中的10H中断int 10h详细说明

    汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用. 显示服务 (Video Service: ...

  3. ICS计算系统概论LC3汇编实验Lab5—中断、递归解决汉诺塔问题

    Lab Purpose 完成用户程序的编写. 编写下面描述的键盘中断服务例程. condition: 用户程序: 汉诺塔的参数,记录为N,将用xFFFF初始化并存储在X3FFF内存中. 您的用户程序从 ...

  4. 汇编访问计算机端口,汇编总结(2):中断、端口、直接定址表

    1.中断 CPU具有一种能力,可以在执行完当前指令之后,检测从内部产生或外部发来的特殊信息,并立即对其进行处理,这种特殊的信息,叫做中断信息. 中断即CPU不再接着刚执行完的指令向下执行,而是转去处理 ...

  5. 详解汇编里的单步中断-T使用寄存器标志位TF和IF

    debug利用CPU提供的单步中断功能 程序的正常执行 取指令 改变CS:IP 执行指令 取指令 DEBUG提供单步中断的中断处理程序,显示所有寄存器的内容后等待输入命令 使用-T命令,debug将T ...

  6. 汇编学习--7.16--外中断

    以前我们讨论的都是CPU对指令的执行. 我们知道,CPU在计算机系统中,除了能够执行指令,进行运算以外,还应该能够对外部设备进行控制,接收它们的输入,向它们进行输出.也就是说,CPU除了有运算能力外, ...

  7. ICS计算系统概论实验3—LC3汇编代码实现最长重复子字符串Longest-duplicate-substring

    Lab03 Longest-duplicate-substring Purpose 子字符串是字符串中至少出现一次的连续字符序列.重复子字符串是一种由相同字符组成的子字符串.例如,"aabb ...

  8. intel 汇编中断解释

    汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用. 显示服务 (Video Service: ...

  9. 【转】学习汇编前你应该知道的知识

    转载地址:http://www.zxbc.cn/html/20070611/22772.html 1.汇编需要什么工具和程序,到哪里下载?     目前阶段,汇编程序仅需要两个程序就够了.masm.e ...

最新文章

  1. Java 汉子转拼音
  2. 全球股市巨震,如何用深度学习预测股价?
  3. pandas使用groupby函数和count函数返回的是分组下每一列的统计值(不统计NaN缺失值)、如果多于一列返回dataframe、size函数返回分组下的行数结果为Series(缺失值不敏感)
  4. 【2022新书】机器学习基础
  5. 039_CSS3边框
  6. PMWiki安装教程
  7. 【STM32】STM32f4学习之路--嘀嗒定时器
  8. OpenCV | Laplacian算子的使用
  9. lisp 河道水面线计算_天然河道水面线计算的几种方法解剖.pdf
  10. 牛客题霸 [二叉搜索树的第k个结点]C++题解/答案
  11. android textview基线,Textview画文字基线的问题
  12. 使用gensim训练word2vec模型
  13. 欧拉好猫车主公开信:宣传部对员工学历没有要求么?
  14. 以太坊扩容项目 Arbitrum 放弃专利,即将上线主网
  15. python处理文本
  16. eclipse进行远程调试教程,轻松搞定生产环境问题
  17. Oracle单实例数据库迁移到Oracle RAC 环境之(3)--主备库Switchover
  18. 解决办法:下列软件包有未满足的依赖关系,依赖。。。但是。。。正要被安装
  19. 软件集合:人人刚需的神器,已解锁使用
  20. wps 多级标题自定义设置

热门文章

  1. [TCP灵魂之问]介绍一下 TCP 报文头部的字段
  2. 为了销量!苹果恐要iPhone SE降价:不到2千买吗?
  3. CSS新招式,临时记一下
  4. 深造分布式 打败面试官 招式一 小试牛刀
  5. 近5年内有关病毒在复杂网络中传播与控制方面的20篇论文
  6. 创意撰写优化技巧通配符
  7. 博弈问题总集第三类----Staircase Nim
  8. win10磁盘管理器的用处和意义
  9. html5文本设置字体大小,HTML5 Canvas的文本设置字体和大小
  10. 论文中的图片怎么修改为300dpi?图片dpi怎么调300?