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输出数据,那么程序要这么做

  1. 死循环等待DSR最高位被置1
  2. 死循环结束,将要写的数据ASCII码写入DDR

基本输出程序

LOOP LDI R0 DSRBRzp LOOP ; 轮询等待DSR最高位置1表示可以显示了DSR        .FILL 0xFE04
DDR     .FILL 0xFE06

LC-3输入的读取思路

死循环一直轮询KBSR寄存器,如果高位为1(可以用BRzp判断),跳出死循环并且从KBDR读取字符,否则死循环等着

LC-3指令集 字符的输入与输出相关推荐

  1. C语言程序——字符的输入和输出

    文章目录 前言 一.字符的输入和输出 二.程序实例 1.程序代码 2.运行结果 3.结果分析 三.拓展应用 总结 前言 使用stdio库中提供的字符输入输出函数的时候,需要在程序中包含stdio.h的 ...

  2. 藏文字符的输入与输出

    """算法导论--输入输出藏文字符 Author:Kerhy"""def write_str():for i in range(0x0f00 ...

  3. Java中字符流(FileReader(read、close)、FileWriter(write、close)、字符(输入、输出)流原理解析)

    1.创建对象: 2.读取数据 3.释放资源(关流) 如何使用重载的read()方法呢? FileWriter: 在前面我们指导,字节输出流和字符输出流的本质区别是,字节输出流一次只能操作一个字节,如果 ...

  4. 12、字符(串)输入、输出

    目录 一.字符数据输入/输出 1. 字符数据输入 2. 字符数据输出 二.字符串输入/输出 1. 字符串输入函数 2. 字符串输出函数 一.字符数据输入/输出 1. 字符数据输入 字符数据输入使用的是 ...

  5. c语言中向计算机输入,C语言中字符数据的输入和输出

    字符的输出 C语言中使用putchar函数来输出字符数据 #include int main() { char a,b,c,d; //定义字符变量a,b,c,d a = 'F'; b = 'U'; c ...

  6. 入职培训笔记记录--day2续(1、运算符 2、数据的输入与输出 3、控制语句)

    再基础的东西也是要细心过一遍时间用的不多,但是还是有效果的. ---------------------------------------- 1.运算符 1.条件运算符(三目运算符): 表达式1 ? ...

  7. C语言实现:输入一串字符把里面的A、a字符替换成C输出

    C语言实现:输入一串字符把里面的A.a字符替换成C输出 #include "stdafx.h" #include<stdio.h> #include<string ...

  8. java 文件字节流_Java:文件字符流和字节流的输入和输出

    最近在学习Java,所以就总结一篇文件字节流和字符流的输入和输出. 总的来说,IO流分类如下: 输入输出方向:     输入流(从外设读取到内存)和输出流(从内存输出到外设) 数据的操作方式: 字节流 ...

  9. python输入一个字符串、计算其中小写字符的个数_利用键盘录入,输入一个字符串,统计该字符串中各个字符的数量,并输出(c/c++实现)...

    title: 输入一串字符串统计字符个数 localimage: image1 urlname: staticstringnum categories: summarytags: [writen, e ...

最新文章

  1. 2013 vc 字体 静态文本框_vc 中mfc 的 静态文本框 的名字 的字体怎么设置
  2. 【Arduino】HX711驱动程序
  3. Python面向对象反射,双下方法
  4. SharePoint Hello World Web Part
  5. java bytebuffer 大小_java – 为什么DirectByteBuffer.array()有额外的大小?
  6. c语言100以内加减乘除法,一百以内的加减乘除法游戏....
  7. get、post请求参数乱码解决方法(qq:1324981084)
  8. fpga多摩川编码器开源代码_F28379D之CLB解码多摩川编码器1——入手小知识(原创)...
  9. 别被数据分析师骗了!用数据说谎的三种办法
  10. iframe如何发送请求_如何实现高性能的在线 PDF 预览
  11. cisco交换机配置方法
  12. SpringBoot:用腾讯企业微信邮箱发送邮件
  13. ftp服务器空文件夹不让删,FTP不能删除(修改)文件夹的问题?(转载)
  14. cookie、sesion
  15. POI设置和读取excel分组信息,多级分组设置
  16. Python bool布尔类型(解析)
  17. VMWare 移动Linux CentOS 7虚拟机后连不上网怎么办
  18. 三大集成学习之万金油 - Catboost
  19. matlab 中diag函数的用法
  20. 关于找不到mfc120u.dll文件错误与0xc000007b错误的解决方案

热门文章

  1. css画心形原理,如何用 css 画一个心形
  2. 【面经】兴业证券大数据工程师面经
  3. 语音合成和语音识别资料查询说明
  4. 递归回溯法求数独全部解
  5. 模仿blblblbl登录页面
  6. Centos7.x实现Cobbler无人值守安装
  7. 织梦5.7登陆注册实现
  8. 深圳绿色建筑数量和规模居全国榜首 建筑人才需求增加
  9. C#-进击Hangfire
  10. du和df文件大小不一致问题排查