实验三 I/O地址译码

news2025/5/24 21:36:28

一、实验目的               

掌握I/O地址译码电路的工作原理。

二、实验电路

实验电路如图1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器, Y0:280H~287H,Y1:288H~28FH,Y2:290H~297H,Y3:298H~29FH,Y4:2A0H~2A7H,Y5:2A8H~2AFH,Y6:2B0H~2B7H,Y7:2B8H~2BFH。

三、实验内容

CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。利用这个负脉冲控制L7发光二极管闪烁发光(亮、灭、亮、灭…),时间间隔通过软件延时实现。

四、编程提示

1.实验电路中D触发器CLK端输入脉冲Y4,上升沿使Q端输出高电平L7发光,CD端加低电平L7灭。

2. 执行下面两条指令

           MOV  DX,2A0H

           OUT  DX,AL(或IN  AL,DX)

Y4输出一个负脉冲。

执行下面两条指令

           MOV  DX,2A8H

           OUT  DX,AL(或IN  AL,DX)

Y5输出一个负脉冲。

五、实验程序(必须加注释)和结果

; 定义输出端口1的地址

outport1 equ 2a0h

; 定义输出端口2的地址

outport2 equ 2a8h

; 数据段定义

DATAS SEGMENT

    ; 定义字符串mess1

    mess1 DB 'Kruanjian221  Liuxijing 2022900616 AND HuTiaWen2022900615',0DH,0AH,'$'

    ; 定义字符串mess2

    mess2 DB 'end with any key',0DH,0AH,'$'

    ; 定义字符串mess3

    mess3 DB 'over',0DH,0AH,'$'

DATAS ENDS

; 代码段定义

code segment

    assume cs:code

start:

    ; 将数据段地址赋给ax

    MOV ax,DATAS

    ; 将ax的值赋给ds

    MOV ds,ax

    ; 设置ah为9,准备调用21h中断显示字符串

    MOV ah,9

    ; 将mess1的偏移地址赋给dx

    MOV dx,offset mess1

    ; 调用21h中断显示字符串

    int 21h

    ; 设置ah为9,准备调用21h中断显示字符串

    MOV ah,9

    ; 将mess2的偏移地址赋给dx

    MOV dx,offset mess2

    ; 调用21h中断显示字符串

    int 21h

AG:

    ; 将outport1的地址赋给dx

    mov dx,outport1

    ; 将al的值输出到dx指定的端口

    out dx,al

    ; 调用延时子程序

    call delay        ;调延时子程序

    ; 将outport2的地址赋给dx

    mov dx,outport2

    ; 将al的值输出到dx指定的端口

    out dx,al

    ; 调用延时子程序

    call delay        ;调延时子程序

    ; 设置ah为1,准备调用16h中断读取键盘输入

    mov ah,1

    ; 调用16h中断读取键盘输入

    int 16h

    ; 如果没有键盘输入,跳转到AG标签处继续循环

    je AG

    ; 设置ah为4ch,准备调用21h中断结束程序

    mov ah,4ch

    ; 调用21h中断结束程序

    int 21h

; 延时子程序定义

delay proc near        ;延时子程序

    ; 将5000赋给bx

    mov bx,5000

lll:

    ; 将0赋给cx

    mov cx,0

ll:

    ; 循环cx次

     loop ll

    ; bx减1

    dec bx

    ; 如果bx不等于0,跳转到lll标签处继续循环

    jne lll

    ; 子程序返回

    ret

delay endp

code ends

; 程序结束

end start

设计思路:

  1. 数据段定义(DATAS SEGMENT)

定义了三个字符串:mess1、mess2和mess3。这些字符串用于在屏幕上显示信息。

  1. 代码段定义(code segment)

程序的主体部分,包含了初始化数据段、显示消息、循环输出数据和延时的逻辑。

  1. 初始化数据段(MOV ax,DATAS / MOV ds,ax)

将数据段的地址加载到ax寄存器,然后将ax的值赋给ds寄存器,以便程序可以访问数据段中的数据。

  1. 显示消息(MOV ah,9 / MOV dx,offset mess1 / int 21h)

使用int 21h中断的功能9来显示字符串。首先设置ah为9,然后将字符串的偏移地址赋给dx,最后调用int 21h中断。

  1. 循环输出数据(AG:...)

程序的主要循环部分,通过两个指定的端口(outport1和outport2)输出数据,并在每次输出后调用延时子程序。

  1. 延时子程序(delay proc near)

一个简单的延时子程序,。

  1. 检测键盘输入(mov ah,1 / int 16h)

使用int 16h中断的功能1来检测键盘输入。如果没有键盘输入,程序将继续循环;如果有键盘输入,程序将结束。

  1. 结束程序(mov ah,4ch / int 21h)

使用int 21h中断的功能4ch来结束程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2336601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视觉语言导航(VLN):连接语言、视觉与行动的桥梁

文章目录 1. 引言:什么是VLN及其重要性?2. VLN问题定义3. 核心挑战4. 基石:关键数据集与模拟器5. 评估指标6. 主要方法与技术演进6.1 前CLIP时代:奠定基础6.2 后CLIP时代:视觉与语言的统一 7. 最新进展与前沿趋势 (202…

计算机网络中科大 - 第7章 网络安全(详细解析)-以及案例

目录 🛡️ 第8章:网络安全(Network Security)优化整合笔记📌 本章学习目标 一、网络安全概念二、加密技术(Encryption)1. 对称加密(Symmetric Key)2. 公钥加密&#xff0…

XCTF-web(四)

unserialize3 需要反序列化一下:O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;} php_rce 题目提示rce漏洞,测试一下:?s/Index/\think\app/invokefunction&functioncall_user_func_array&vars[0]phpinfo&vars[1][]1 flag&#xff1…

在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法,支持 npm/yarn/pnpm 等主流工具

以下是 在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法,支持 npm/yarn/pnpm 等主流工具: 一、使用 npm 1. 直接过滤依赖树 npm ls --depth0 | grep "1.1.9"说明: npm ls --depth0:仅显示直接依赖&#xf…

若依微服务版启动小程序后端

目录标题 本地启动,dev对应 nacos里的 xxx-xxx-dev配置文件 本地启动,dev对应 nacos里的 xxx-xxx-dev配置文件

莒县第六实验小学:举行“阅读世界 丰盈自我”淘书会

4月16日,莒县第六实验小学校园内书香四溢、笑语盈盈,以“阅读世界 丰盈自我”为主题的第二十四届读书节之“淘书会”活动火热开启。全校师生齐聚一堂,以书会友、共享阅读之乐,为春日校园增添了一抹浓厚的文化气息。 活动在悠扬的诵…

国产数据库与Oracle数据库事务差异分析

数据库中的ACID是事务的基本特性,而在Oracle等数据库迁移到国产数据库国产中,可能因为不同数据库事务处理机制的不同,在迁移后的业务逻辑处理上存在差异。本文简要介绍了事务的ACID属性、事务的隔离级别、回滚机制和超时机制,并总…

C++学习记录:

今天我们来学习一门新的语言,也是C语言最著名的一个分支语言:C。 在C的学习中,我们主要学习的三大组成部分:语法、STL、数据结构。 C的介绍 C的历史可追溯至1979年,当时贝尔实验室的本贾尼斯特劳斯特卢普博士在面对复杂…

等离子体浸没离子注入(PIII)

一、PIII 是什么?基本原理和工艺 想象一下,你有一块金属或者硅片(就是做芯片的那种材料),你想给它的表面“升级”,让它变得更硬、更耐磨,或者有其他特殊功能。怎么做呢?PIII 就像是用…

idea中提高编译速度研究

探索过程: 有三种情况: 第一种: idea中用eclipse编译器编译springboot项目,然后debug启动Application报错找不到类。 有待继续研究。 第二种: idea中用javac编译器编译springboot项目,重新构建用时&a…

静态链接part2

编译 语义分析 由语义分析器完成,这个步骤只是完成了对表达式的语法层面的分析,它并不了解这个语句是否真的有意义(例如在C语言中两个指针做乘法运算,这个语句在语法上是合法的,但是没有什么意义;还有同样…

Vue3+Vite+TypeScript+Element Plus开发-17.Tags-组件构建

系列文档目录 Vue3ViteTypeScript安装 Element Plus安装与配置 主页设计与router配置 静态菜单设计 Pinia引入 Header响应式菜单缩展 Mockjs引用与Axios封装 登录设计 登录成功跳转主页 多用户动态加载菜单 Pinia持久化 动态路由 -动态增加路由 动态路由-动态删除…

3D语义地图中的全局路径规划!iPPD:基于3D语义地图的指令引导路径规划视觉语言导航

作者: Zehao Wang, Mingxiao Li, Minye Wu, Marie-Francine Moens, Tinne Tuytelaars 单位:鲁汶大学电气工程系,鲁汶大学计算机科学系 论文标题: Instruction-guided path planning with 3D semantic maps for vision-language …

ShellScript脚本编程

语法基础 脚本结构 我们先从这个小demo程序来窥探一下我们shell脚本的程序结构 #!/bin/bash# 注释信息echo_str"hello world"test(){echo $echo_str }test echo_str 首先我们可以通过文本编辑器(在这里我们使用linux自带文本编辑神器vim),新建一个文件…

【HarmonyOS 5】敏感信息本地存储详解

【HarmonyOS 5】敏感信息本地存储详解 前言 鸿蒙其实自身已经通过多层次的安全机制,确保用户敏感信息本地存储安全。不过再此基础上,用户敏感信息一般三方应用还需要再进行加密存储。 本文章会从鸿蒙自身的安全机制进行展开,最后再说明本地…

探索鸿蒙沉浸式:打造无界交互体验

一、鸿蒙沉浸式简介 在鸿蒙系统中,沉浸式是一种极具特色的设计理念,它致力于让用户在使用应用时能够全身心投入到内容本身,而尽可能减少被系统界面元素的干扰。通常来说,就是将应用的内容区巧妙地延伸到状态栏和导航栏所在的界面…

网站301搬家后谷歌一直不收录新页面怎么办?

当网站因更换域名或架构调整启用301重定向后,许多站长发现谷歌迟迟不收录新页面,甚至流量大幅下滑。 例如,301跳转设置错误可能导致权重传递失效,而新站内容与原站高度重复则可能被谷歌判定为“低价值页面”。 即使技术层面无误&a…

在Mac上离线安装k3s

目录 首先是安装multipass。 1. 系统要求 2. 环境准备 本来想照着网上文档学习安装一下k3s,没想到在docker被封了之后,现在想通过命令行去下载github的资源也不行了(如果有网友看到这个文档、并且知道问题原因的,请留言告知&am…

2025低代码平台选型策略:ROI导向下的功能与成本权衡

在当今快速变化的商业环境中,企业面临着前所未有的挑战与机遇。数字化转型已成为企业提升竞争力的关键,而软件开发的高成本和长周期无疑是实现这一转型的绊脚石。 低代码平台的兴起,为企业提供了一种高效、灵活的解决方案,使得非…

Redis的IO多路复用

1 传统的socket编码模型 传统 Socket 模型通常采用 多线程/多进程 或 阻塞 I/O 的方式处理网络请求。以下是典型实现步骤: 创建套接字(Socket) 步骤:调用 socket() 创建一个 TCP/UDP 套接字。通常把这个套接字称为【主动套接字】…