【上海大学计算机组成原理实验报告】六、内存系统实验
一、实验目的
- 学习内存访问机制。
- 理解代码和数据的分区存放原理和技术。
二、实验原理
-
根据实验指导书的相关内容,地址寄存器
MAR
用来存放要进行读或写的存储器EM
的地址。其内容经数据总线DBUS
写入,因此必须在数据总线上具有数据后,配合MAR
允许写的信号MAREN
,在时钟上升沿跳变时写入。 -
根据实验指导书的相关内容,当要向存储器
EM
读或写数据时,必须指明读、写EM
哪个地址的内容。这个地址则由地址寄存器MAR
或指令计数器PC
通过地址总线ABUS
给出。因此在地址寄存器MAR
设置了地址后,配合MAR
允许输出的信号MAROE
,以及存储器EM
被选通并允许写的时候,数据总线上的数据才会写到MAR
指定的地址中。 -
CP226
是一款汇编语言程序集成开发环境,通过这款软件我们可以更方便地进行汇编语言程序的编制、运行和调制工作。
三、实验内容
实验任务一:手动方式把立即数33H
写入内存D1H
单元
(1)实验步骤
-
注释仪器,打开电源,手不要远离电源开关,随时准备关闭电源,注意各数码管、发光管的稳定性,静待10秒,确信仪器稳定、无焦糊味。
-
按
Reset
键初始化系统,并设置实验箱进入手动模式。 -
按照下表对实验箱线路进行连接:
连接 | 信号孔 | 接入孔 | 作用 | 有效电平 |
---|---|---|---|---|
1 | J2座 | J3座 | 将K23-K16接入DBUS[7:0] | |
2 | STEN | K15 | ST寄存器写允许 | 低电平有效 |
3 | X2 | K10 | 三位组合来译码选择将数据送到DBUS上的指定寄存器 | |
4 | X1 | K9 | ||
5 | X0 | K8 | ||
6 | IREN | K6 | IR,uPC写允许 | 低电平有效 |
7 | PCOE | K5 | PC输出地址 | 低电平有效 |
8 | MAROE | K4 | MAR输出地址 | 低电平有效 |
9 | MAREN | K3 | MAR写允许 | 低电平有效 |
10 | EMEN | K2 | 存储器与数据总线相连 | 低电平有效 |
11 | EMRD | K1 | 存储器读允许 | 低电平有效 |
12 | EMWR | K0 | 存储器写允许 | 低电平有效 |
-
先在
MAR
中设置存储器地址。将MAREN
设为允许写MAR
,而后用开关K23
~K16
,设置数值为D1H
,表示选择地址D1H
,最后按下STEP
键向DBUS
中写入数据D1H
。 -
将数据写入
EM
中。将MAR
设置为允许输出,并将EM
设为允许写,而后用开关K23
~K16
,设置数值为33H
后按STEP
键向DBUS
中写入数据33H
。 -
观察并记录实验现象。
(2)实验现象
MAR
寄存器显示D1H
,EM
寄存器显示33H
。
实验任务二:手动方式把D1H
单元的内容读出,再送入ST
单元
(1)实验步骤
- 保持实验任务一的接线,将
K10
-K8
全部置1
,使数据无法从K23
-K16
中输入。 - 将
MAR
设为允许输出,并将EM
设为允许读,按下STEP
键,观察ST
寄存器内容变化。
(2)实验现象
ST寄存器显示33H
。
实验任务三:在CP226
汇编语言程序集成开发环境下编写程序
通过调试和跟踪运行,将初始值05H
赋予累加器A
,每次减1
,到0
时,OUT
寄存器输出FFH
,期间注意观察数据走向及寄存器的输入输出状态。
(1)实验步骤
- 拔下实验箱上的接线,并将开关
K23
-K16
全部置0
,开关K15
-K0
全部置1
,按下Reset
键初始化系统。 - 打开电脑上的
CP226
软件,点击源程序编写如下代码:
- 将文件保存为
.asm
文件,并进行编译和下载。 - 通过单微指令运行文件,观察运行情况并记录实验结果。
(2)实验现象
初始情况下,累加器的值为05H
,随着程序的运行递减,当递减到0
时,OUT
寄存器输出FFH
。
(3)实验结论
- 通过设置地址寄存器
MAR
,以及指明EM
是读还是写,我们可以对MAR
中的地址进行读入和写出。 - 通过一系列正确的设计,我们成功地通过
CP226
软件完成了“将初始值05H
赋予累加器A
,每次减1
,到0
时,OUT
寄存器输出FFH
”操作功能的实现。
四、建议
- 在从
MAR
寄存器中读数据时,要注意将控制X2X1X0
的信号关闭,防止数据通过K23
~K16
输入。 - 在编写汇编代码时,要注意大小写,当前串行口连接无效时,可切换其他串行口进行实验。
五、体会
通过此次实验,我学会了如何通过手动的方式对指定地址单元的数据进行读入和写出,也学会了如何在汇编语言程序集成开发环境下编写程序,还加深了我对计算机内存系统的理解,为进行下一次实验打下了扎实基础。
六、思考题
既然有ORG
微指令,为什么集成开发环境下载到实验箱的目标程序的第一条执行语句最好存放在0号地址?
答:因为程序是顺序执行的,如果第一条执行语句不存放在0号地址,在程序执行时,在存放第一条执行语句的地址的前面,可能还存有其他指令,进而可能导致程序运行出错。
相关文章:

【上海大学计算机组成原理实验报告】六、内存系统实验
一、实验目的 学习内存访问机制。理解代码和数据的分区存放原理和技术。 二、实验原理 根据实验指导书的相关内容,地址寄存器MAR用来存放要进行读或写的存储器EM的地址。其内容经数据总线DBUS写入,因此必须在数据总线上具有数据后,配合MAR允…...

C++:细谈Sleep和_sleep
ZINCFFO的提醒 还记得上上上上上上上上上上上上上上上上上上(上的个数是真实的)篇文章吗? 随机应变——Sleep()和_sleep() 但在ZINCFFO的C怪谈-02中: 我不喜欢Sleep...... 奤?媜煞鷥! 整活!…...
CORS前端:深度解析跨域资源共享机制及其前端应用
CORS前端:深度解析跨域资源共享机制及其前端应用 在前端开发领域,CORS(跨源资源共享)是一个不可或缺的概念。它允许网页应用在不同的源(域、协议或端口)之间进行资源请求和共享,从而打破了同源…...
React@16.x(15)PureComponent 和 memo
目录 1,什么是 PureComponent2,什么是 memo3,举例3.2,优化13.1,优化2-函数位置 4,注意点4.1,为了提升效率,应该尽量使用 PureComponent4.2,不要直接改变之前的状态&#…...

[C++11/14新特性] tuple元组介绍
C11 标准新引入了一种类模板,命名为 tuple(中文可直译为元组)。tuple 最大的特点是:实例化的对象可以存储任意数量、任意类型的数据。tuple 的应用场景很广泛,例如当需要存储多个不同类型的元素时,可以使用…...

小熊家务帮day8-day9 客户管理模块2 (用户定位,地址簿,实名认证,银行卡信息上传等功能)
客户管理模块 0.用户定位功能0.1 需求0.2 接口分析0.3 接口开发Controller层开发Service层开发 1.我的地址簿功能1.1 需求1.2 数据库设计1.3 新增地址簿1.3.1 接口设计1.3.2 接口开发Controller层开发Service层开发测试功能 1.4 地址簿查询1.4.1 接口设计1.4.2 接口开发Control…...
amis 事件动作 和 行为按钮 常用用法
行为按钮 action (仅是对click事件的处理) actionType:这是 action 最核心的配置,来指定该 action 的作用类型,支持:ajax、link、url、drawer、dialog、confirm、cancel、prev、next、copy、close。 Butt…...

4K高刷显示器 - 蚂蚁电竞ANT27VU
可以毫不夸张地说,每一局游戏最终能够取得胜利,实际上都与一套极为优秀的电竞 PC 有着紧密的关联,因为其能够提供强大的性能支持与流畅的体验。同样的道理,一套优秀的电竞 PC 若想发挥出最佳的效果,那也都离不开一台能…...

图解支付系统的渠道路由设计
大家好,我是隐墨星辰,今天和大家聊聊渠道路由设计。 这篇文章主要讲清楚:渠道路由是什么,为什么需要渠道路由,渠道路由的几种形态,一个简洁而实用的基于规则的渠道路由设计。 注:有些公司称渠…...
Leecode---347:输出前k个高频元素(使用unordered_map)
题目: 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 思路: 三步: 1、用map来记录每个元素出现的次数 2、按map中的值大小排序,先让其有序,再逆…...
k8s ceph(静态pvc)
1.在 Kubernetes 节点上安装ceph-common 包。这个包包含了连接到 Ceph 集群所需的工具和库。可以使用以下命令在每个节点上安装: sudo apt-get install ceph-common2.在 Kubernetes 中创建一个 Secret 对象,用于存储连接到 Ceph 集群所需的密钥和配置信息…...

Qt QScript 之 C++/JavaScript相互调用
文章目录 Qt Script什么是ECMAScriptQt 中JavaScriptclass 详解Basic UsageQObject对脚本引擎可用使用信号槽connect 三种模式访问属性, 子对象使c++对象可用于用Qt Script编写的脚本C++ 类成员函数可用于脚本C++ 类属性可用于脚本对脚本中的c++对象信号的反应函数对象和本机函…...
可能会引起空指针
PreparedStatement preparedStatement null; preparedStatement conn.prepareStatement(sql); 如果直接下面这个可能会赋值给空指针 因为要在try{}和catch{}里面都用,所以要定义在try外面为null //如果只是测试,可以PreparedStatement preparedStatement conn.prepareSta…...

Linux input输入子系统
Linux input 更多内容可以查看我的github Linux输入子系统框架 Linux输入子系统由驱动层、核心层、事件处理层三部分组成。 驱动层:输入设备的具体驱动程序,负责与具体的硬件设备进行交互,并将底层的硬件输入转化为统一的事件形式ÿ…...

dataworks调度参数
概述 调度参数是DataWorks任务调度时使用的参数,调度参数会根据任务调度的业务时间及调度参数的取值格式自动替换取值,实现在任务调度时间内参数的动态取值。 调度参数通过赋值方式分为自定义参数(推荐)和系统内置变量两大类。 …...
JavaScript第五讲:事件,条件循环语句,错误处理
前言 在编程的世界里,事件、条件和循环语句、以及错误处理是构建任何复杂程序或应用的基石。无论是开发一个简单的网页交互,还是构建一个庞大的企业级系统,这些基础概念都扮演着至关重要的角色。今天星途将通过这篇文章,分别深入…...

BrainGPT1,一个帮你b站点歌放视频的多模态多轮对话模型
BrainGPT1,一个帮你b站点歌放视频的多模态多轮对话模型 返回论文目录 项目地址 模型地址 作者:华东师范大学,计算机科学与技术学院,智能教育研究院的小怪兽会微笑。 介绍 BrainGPT1是一个工具调用多轮对话模型,与G…...

带DSP音效处理D类数字功放TAS5805M中文资料
国产替代D类数字功放中文资料访问下方链接 ACM8628 241W立体声182W单通道数字功放中文寄存器表 内置DSP多种音频处理效果ACM8628M-241W立体声或182W单通道数字功放 1 特性 具有增强处理能力和低功率损耗的 TAS5805M 23W、无电感器、数字输入、立体声、闭环 D 类音频放大器 …...
java中BigDecimal的比较
BigDecimal是Java中的一个类,位于java.math包中,它提供了任意精度的有符号十进制数字的表示,以及对这些数字进行算术运算的方法 BigDecimal的主要用途包括: 1.金融计算:金融领域对数值的精度要求非常高,使…...

张大哥笔记:你卖什么,就反着来卖
普通人打工的一生,就是努力工作,买房,买车,送孩子上好的学校,为了孩子不要输在起跑线上,拼命报各种补习班等,这些都是普通人认为的主流价值观文化,也造就了一批批的赚钱机器…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...