计算机系统(1) 实验五 中断实验
实验目的
展示如何让输入输出通过执行中断处理程序的方式来暂停和恢复一个正在运行的程序,恢复后的程序就像中间什么都没有发生过,本实验使用键盘作为输入来中断正在运行的程序。
实验内容与实验要求
1.编写用户程序:该程序持续间隔的输出两行不同的“ICS”
2.编写键盘中断处理程序:该程序每次简单的把用户键入的回车(x0A)之前的字符打印10次。
编写操作系统使能代码:将R6初始化为x3000,指示一个空栈;提供中断处理程序的地址;把KBST的IE位置1
实验步骤
1.根据实验要求编写用户程序代码
(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
总结
输入输出通过执行中断处理程序的方式来暂停和恢复一个正在运行的程序,恢复后的程序就像中间什么都没有发生过,运用中断程序可以使计算机程序更加灵活。