LC-3指令集 字符的输入与输出
LC-3是一个简单的指令集,字符的输入输出,也比较简单,即通过中断的方式,键盘输入产生中断,有一些标志位,标志着键盘是否可用,显示器是否可用,下面介绍LC-3中的输入输出
目录
- 4个寄存器
- 字符的输入
- 键盘输入
- 数据读取
- 基本输入程序
- 字符的输出
- 设备准备
- 输出数据
- 基本输出程序
- LC-3输入的读取思路
4个寄存器
要想异步的执行输入输出指令,那就离不开约定,即约定的标志位为特定状态,执行特定操作,下面介绍LC-3中为了输入输出而准备的4个寄存器
值得注意的是,这些寄存器都是模拟寄存器,即用内存来代替的
下面给出这些模拟寄存器的地址及功能
地址 | 映射的寄存器 | 解释 |
---|---|---|
0xFE00 | 键盘状态寄存器KBSR | 最高位为1表示从键盘接收到新字符 |
0xFE02 | 键盘数据寄存器KBDR | 键盘输入数据ASCII码值存在其低八位 |
0xFE04 | 显示输出状态寄存器DSR | 最高位为1表示可以向屏幕输出一个字符 |
0xFE06 | 显示输出数据寄存器DDR | 向屏幕输出的字符的ASCII码存在其低八位 |
字符的输入
字符的输入又分为两个部分,一部分是键盘的输入,另一部分是数据的读取
键盘输入
键盘输入数据较为简单,值得注意的是数据的阻塞,即之后的输入都无效
- 从键盘输入一个字符,系统触发中断
- 将输入的字符放到KBDR寄存器中,然后将KBSR寄存器最高位置1表示有新数据读进了,待取
- 将键盘禁用,阻塞之后所有字符的输入
数据读取
键盘数据的读取,其实就是读取KBDR寄存器,然后解除键盘的锁定,可以开始接收新数据,分为以下几个步骤:
- 检测KBSR最高位是否为1,即是否有输入待取
- 读取KBDR中的输入数据
- 将KBSR最高位置0,即重置标志位
- 使能键盘中断即KBSR的第14位置1,即解除键盘的锁定
基本输入程序
LOOP LDI R0 KBSRBRzp LOOP ; 轮询等待KBSR最高位置1表示可以读取LDI R0 KBDR ; 从KBDR加载数据到R0KBSR .FILL 0xFE00
KBDR .FILL 0xFE02
字符的输出
设备准备
如果显示器准备好输出一个字符,那么DSR寄存器最高位置1,表示:可以输出字符啦
输出数据
当显示器准备好输出了,即DSR寄存器最高位为1,这时候输出数据,系统操作(系统自动的操作)分为以下几个步骤:
- 系统将首先将DSR置0,因为现在要输出了,不是就绪状态
- 系统将DDR寄存器里保存的数据以ASCII码输出到屏幕
- 显示完成,将DSR重新置1,表示可以输出
值得注意的是,在DSR置0时,任何新写入DDR寄存器的字符将被忽略,因为现在显示器忙,不能输出
如果是程序操作,即操作DSR和DDR输出数据,那么程序要这么做
- 死循环等待DSR最高位被置1
- 死循环结束,将要写的数据ASCII码写入DDR
基本输出程序
LOOP LDI R0 DSRBRzp LOOP ; 轮询等待DSR最高位置1表示可以显示了DSR .FILL 0xFE04
DDR .FILL 0xFE06
LC-3输入的读取思路
死循环一直轮询KBSR寄存器,如果高位为1(可以用BRzp判断),跳出死循环并且从KBDR读取字符,否则死循环等着
LC-3指令集 字符的输入与输出相关推荐
- C语言程序——字符的输入和输出
文章目录 前言 一.字符的输入和输出 二.程序实例 1.程序代码 2.运行结果 3.结果分析 三.拓展应用 总结 前言 使用stdio库中提供的字符输入输出函数的时候,需要在程序中包含stdio.h的 ...
- 藏文字符的输入与输出
"""算法导论--输入输出藏文字符 Author:Kerhy"""def write_str():for i in range(0x0f00 ...
- Java中字符流(FileReader(read、close)、FileWriter(write、close)、字符(输入、输出)流原理解析)
1.创建对象: 2.读取数据 3.释放资源(关流) 如何使用重载的read()方法呢? FileWriter: 在前面我们指导,字节输出流和字符输出流的本质区别是,字节输出流一次只能操作一个字节,如果 ...
- 12、字符(串)输入、输出
目录 一.字符数据输入/输出 1. 字符数据输入 2. 字符数据输出 二.字符串输入/输出 1. 字符串输入函数 2. 字符串输出函数 一.字符数据输入/输出 1. 字符数据输入 字符数据输入使用的是 ...
- c语言中向计算机输入,C语言中字符数据的输入和输出
字符的输出 C语言中使用putchar函数来输出字符数据 #include int main() { char a,b,c,d; //定义字符变量a,b,c,d a = 'F'; b = 'U'; c ...
- 入职培训笔记记录--day2续(1、运算符 2、数据的输入与输出 3、控制语句)
再基础的东西也是要细心过一遍时间用的不多,但是还是有效果的. ---------------------------------------- 1.运算符 1.条件运算符(三目运算符): 表达式1 ? ...
- C语言实现:输入一串字符把里面的A、a字符替换成C输出
C语言实现:输入一串字符把里面的A.a字符替换成C输出 #include "stdafx.h" #include<stdio.h> #include<string ...
- java 文件字节流_Java:文件字符流和字节流的输入和输出
最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向: 输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...
- python输入一个字符串、计算其中小写字符的个数_利用键盘录入,输入一个字符串,统计该字符串中各个字符的数量,并输出(c/c++实现)...
title: 输入一串字符串统计字符个数 localimage: image1 urlname: staticstringnum categories: summarytags: [writen, e ...
最新文章
- 2013 vc 字体 静态文本框_vc 中mfc 的 静态文本框 的名字 的字体怎么设置
- 【Arduino】HX711驱动程序
- Python面向对象反射,双下方法
- SharePoint Hello World Web Part
- java bytebuffer 大小_java – 为什么DirectByteBuffer.array()有额外的大小?
- c语言100以内加减乘除法,一百以内的加减乘除法游戏....
- get、post请求参数乱码解决方法(qq:1324981084)
- fpga多摩川编码器开源代码_F28379D之CLB解码多摩川编码器1——入手小知识(原创)...
- 别被数据分析师骗了!用数据说谎的三种办法
- iframe如何发送请求_如何实现高性能的在线 PDF 预览
- cisco交换机配置方法
- SpringBoot:用腾讯企业微信邮箱发送邮件
- ftp服务器空文件夹不让删,FTP不能删除(修改)文件夹的问题?(转载)
- cookie、sesion
- POI设置和读取excel分组信息,多级分组设置
- Python bool布尔类型(解析)
- VMWare 移动Linux CentOS 7虚拟机后连不上网怎么办
- 三大集成学习之万金油 - Catboost
- matlab 中diag函数的用法
- 关于找不到mfc120u.dll文件错误与0xc000007b错误的解决方案