实验(四):指令部件实验
一、实验内容与目的
实验要求:
利用CP226实验仪上的小键盘将程序输入主存储器EM,通过指令的执行实现微程序控制器的程序控制。
实验目的:
1.掌握模型机的操作码测试过程;
2.掌握模型机微程序控制器的基本结构以及程序控制的基本原理。
二、实验步骤
一条机器指令有一个微程序解释执行,一个微程序有若干条微指令构成。每条指令的操作码OP就是微程序第一条微指令在控制存储器uM的微地址,通过操作码找到第一条微指令地址的过程称为操作码测试或P1测试。微程序的多条微指令在控制存储器uM的组织方式可以是链表式(下一条微指令的微地址由当前微指令的顺序控制部分决定),也可以是顺序式(下一条微指令的微地址是当前微指令的微地址加1产生)。
模型机的操作码测试规则如下:
指令的六位操作码 OP,低位补加两个零构成八位微地址作为微程序第一条微指令的微地址。
指令 MOV A, #12H 的操作码OP=011111B,低位补加00B,解释执行该机器指令的第一条微指令的微地址是01111100B,即7CH。该微指令在控制存储器的7CH单元。
模型机的微程序组织方式是顺序式。
实验程序段:
MOV A, #12H
MOV A, R1
MOV A,@R2
MOV A, 10H
IN A,SW
OUT LED,A
将该程序转换为机器码写入主存储器 EM。
2.1 微地址实验
下面以第一条指令为例说明微地址的形成方式。
指令MOV A, #12H 开始执行的第1条微指令一定是取指令的微指令,由于所有指令取指令的微指令都一样,所以取指令的微指令作为公共操作放在控制存储器的00H单元。
解释执行指令MOV A, #12H 的第一条微指令的微地址是7CH。
执行完指令MOV A, #12H 需要取下一条指令,第二条微指令是取值的微指令,微地址是7DH。
标明微地址的指令周期图如下所示。指令周期图的一个方块是一个机器周期(一次STEP 按键操作),对应一条微指令,方框上面的数字就是微地址,波浪号是取指公操作。

将指令地址 PC 和微指令地址 uPC 置为 00H,如果不是可以通过小键盘输入改写,按下 STEP 按键,观察 uPC 值得变化。
2.2 微指令实验
模型机的微程序组织方式是顺序式,微指令只有 24 位操作控制字段,没有顺序字段,微指令格式如下:
| X R D | E M W R | E M W R | P C O E | E M E N | I R E N | E I N T | E L P | M A R E N | M A R O E | O U T E N | S T E N | R R D | R W D | C N | F E N | X 2 | X 1 | X 0 | W E N | A E N | S 2 | S 1 | S 0 |
24 个操作控制位是 3 个字节,最高 8 位称为微指令的高字节,简写为 MH;中间 8 位称为微指令的中字节,简写为 MM;最低 8 位称为微指令的低字节,简写为 ML。
下面以第一条指令为例说明微微程序控制。
指令 MOV A, #12H 开始执行的第 1 条微指令是取指令的微指令,取指的微指令在控存 00H 单元,将 00H 单元的微指令读出,其值为 CBFFFFH,具体操作详见 1.3 的第 5 部分的观察和修改微程序控制器 uM 的内容。
该微指令对应的三个控制位是 EMRD、PCOE、及 IREN 为低,此三位有效,其它所有位都处于无效状态。在程序第一次运行时或复位后,uPC 和 PC 的值都为 0。PCOE 有效将 PC 值送到 ABUS,做为主存储器 EM 的指令地址,同时 PC 加 1;EMRD 信号有效就是从主存储器 EM 中读出程序指令,IREN 将读出的指令送到 IR 寄存器。
此微指令的作用就是:从主存储器 EM[0]的读取指令,并存入 IR 中进行操作码测试,得到微程序入口地址 7CH 来修改 uPC,同时 PC 加 1 为读下一条指令或数据做准备。
将 7CH 单元的微指令读出,其值为 C7FFF7H,对应到各个控制位是 EMRD、PCOE、 EMEN 及 AEN 为低,处于有效状态,其它控制位为无效状态。PCOE 是将 PC 输出到 ABUS 做为主存储器 EM 的地址,同时 PC 加 1;EMRD 就是从程序存储 EM 中读出数据,EMEN 将读出的数据送到 DBUS 总线上,AEN 是将 DBUS 总线上的值存入累加器 A 中。
此微指令的作用就是:从主存储器 EM[1] 的读取数据 12H 送入 A,uPC 加 1,给出下一条微指令的地址,同时 PC 加 1 为读下一条指令或数据做准备。
将 7DH 单元的微指令读出,其值为 CBFFFFH 与 00H 单元微指令作用一样。
三、实验过程分析
3.1 微地址实验
1. 实验过程分析
- 实验准备:
在开始实验之前,需要将指令地址 PC 和微指令地址 uPC 设置为 00H,以确保模型机处于初始状态。这样,我们可以从第一条微指令开始执行,并观察微地址的变化。
- 第一条指令 MOV A, #12H:
根据给定的程序段,第一条指令是将立即数 12H 存储到寄存器 A 中。根据转换得到的机器码(0111 1100),将该机器码写入主存储器 EM 的相应地址单元。按下 STEP 按键后,模型机执行取指令的微指令,微地址为 7CH。
- 第二条指令 MOV A, R1:
根据给定的程序段,第二条指令是将寄存器 R1 的值存储到寄存器 A 中。根据转换得到的机器码(0111 0001),将该机器码写入主存储器 EM 的相应地址单元。按下 STEP 按键后,模型机执行取值的微指令,微地址为 71H。
- 第三条指令 MOV A, @R2:
根据给定的程序段,第三条指令是将寄存器 R2 指向的内存单元的值存储到寄存器 A 中。根据转换得到的机器码(0111 0110),将该机器码写入主存储器 EM 的相应地址单元。按下 STEP 按键后,模型机执行取值的微指令,微地址为 76H。
- 第四条指令 MOV A, 10H:
根据给定的程序段,第四条指令是将立即数 10H 存储到寄存器 A 中。根据转换得到的机器码(0111 1000),将该机器码写入主存储器 EM 的相应地址单元。按下 STEP 按键后,模型机执行取值的微指令,微地址为 78H。
- 第五条指令 IN A, SW:
根据给定的程序段,第五条指令是将开关 SW 的值输入到寄存器 A 中。根据转换得到的机器码(1100 0000),将该机器码写入主存储器 EM 的相应地址单元。按下 STEP 按键后,模型机执行取值的微指令,微地址为 C0H。
- 第六条指令 OUT LED, A:
根据给定的程序段,第六条指令是将寄存器 A 的值输出到 LED 灯。根据转换得到的机器码(1100 0100),将该机器码写入主存储器 EM 的相应地址单元。按下 STEP 按键后,模型机执行取值的微指令,微地址为 C4H。
通过按下 STEP 按键,我们可以观察到微地址在每个指令周期(一次按键操作)中的变化。微地址的变化对应着不同的微指令的执行,通过控制存储器中存储的微指令,模型机可以按照特定的顺序执行指令,并完成相应的操作。
2. 补全指令流程图中的微地址

3.2 微指令实验
实验过程分析:
- 第一条指令:MOV A, #12H
微地址 7CH:将立即数 12H 送入累加器 A
EMRD、PCOE、EMEN、AEN 有效,其余控制位无效
将 PC 的值送到 ABUS,作为主存储器 EM 的地址,同时 PC 加 1
从主存储器 EM 中读取数据 12H,将数据存入累加器 A

图1 第一条指令的微程序
- 第二条指令:MOV A, R1
微地址 70H:将寄存器 R1 的值送入累加器 A
EMRD、PCOE、EMEN、REN、AEN 有效,其余控制位无效
将 PC 的值送到 ABUS,作为主存储器 EM 的地址,同时 PC 加 1
从主存储器 EM 中读取寄存器 R1 的值,将值存入累加器 A

图2 第二条指令的微程序
- 第三条指令:MOV A, @R2
微地址 74H:将间址存储器 R2 的值送入累加器 A
EMRD、PCOE、EMEN、MA、AEN 有效,其余控制位无效
将 PC 的值送到 ABUS,作为主存储器 EM 的地址,同时 PC 加 1
从主存储器 EM 中读取间址存储器 R2 的值,将值存入累加器 A

图3 第三条指令的微程序
- 第四条指令:MOV A, 10H
微地址 78H:将立即数 10H 送入累加器 A
EMRD、PCOE、EMEN、AEN 有效,其余控制位无效
将 PC 的值送到 ABUS,作为主存储器 EM 的地址,同时 PC 加 1
从主存储器 EM 中读取数据 10H,将数据存入累加器 A

图4 第四条指令的微程序
- 第五条指令:IN A, SW
微地址 C0H:将开关 SW 的值输入到累加器 A
EMRD、PCOE、INEN、AEN 有效,其余控制位无效
将 PC 的值送到 ABUS,作为主存储器 EM 的地址,同时 PC 加 1
从主存储器 EM 中读取开关 SW 的值,将值存入累加器 A

图5 第五条指令的微程序
- 第六条指令:OUT LED, A
微地址 C4H:将累加器 A 的值输出到 LED
EMRD、PCOE、OUTEN、AEN 有效,其余控制位无效
将 PC 的值送到 ABUS,作为主存储器 EM 的地址,同时 PC 加 1
将累加器 A 的值输出到 LED

图6 第六条指令的微程序

四、实验总结
本次实验旨在通过实践,掌握模型机的程序控制方式以及微程序控制器的基本结构和原理。实验一主要针对微地址的形成方式进行了实验,而实验二则重点在于微指令的执行和控制过程。通过对实验一和实验二的进行分析和实验操作,我们对模型机的程序控制有了更深入的了解。
实验一中,我们使用了给定的程序段,并将其转换为机器码写入主存储器 EM。通过将指令转换为机器码,我们能够更好地理解指令在计算机中的表示方式和存储方式。在实验过程中,我们首先设置微地址为00H,并通过按下STEP按键,观察uPC值的变化。实验结果表明,uPC值根据指令的执行逐步递增,说明微程序控制器按顺序执行微指令。通过这一实验,我们深入了解了微地址的形成方式以及微程序控制的基本原理。
实验二则更加注重微指令的执行和控制过程。我们根据实验中给定的微指令格式,以第一条指令为例,详细分析了微指令的控制位和对应的操作。通过对微指令的解析,我们了解到微指令中的每个控制位都对应着不同的控制信号,控制着计算机的各个部件的工作状态。实验过程中,我们根据微指令的地址,逐步执行微指令,并观察各个控制信号的状态变化。这样的实验设计使我们更加直观地了解了微指令的执行流程和控制机制。
通过本次实验,我们对模型机的程序控制方式有了更深入的了解。我们掌握了指令的机器码表示和存储方式,了解了微地址的形成方式以及微程序控制器的基本结构和原理。我们通过实验操作,观察了微指令的执行过程,并分析了不同控制位对计算机各部件的控制作用。这些实验帮助我们更好地理解了计算机的工作原理和程序执行的过程。
通过本次实验,我们还加深了对计算机体系结构的认识。我们理解了指令的执行过程是通过微程序控制器来实现的,微指令控制着计算机的各个部件的工作状态,从而完成指令的执行。我们意识到微程序控制器在计算机体系结构中的重要性,它为计算机提供了灵活的指令执行方式和可扩展的控制功能。
总而言之,我们在实践中深入了解了模型机的程序控制方式和微程序控制器的工作原理。我们通过对实验一和实验二的分析和操作,掌握了指令的机器码表示、微地址的形成方式以及微指令的执行和控制过程。这些实验对于我们加深对计算机体系结构的理解和掌握计算机的程序控制技术具有重要意义。通过实验,我们提高了对计算机工作原理的认识和理解,为今后的学习和研究打下了坚实的基础。
相关文章:
实验(四):指令部件实验
一、实验内容与目的 实验要求: 利用CP226实验仪上的小键盘将程序输入主存储器EM,通过指令的执行实现微程序控制器的程序控制。 实验目的: 1.掌握模型机的操作码测试过程; 2.掌握模型机微程序控制器的基本结构以及程序控制的基本原…...
【Android11】在内置的Tvsettings的界面中显示以太网Mac地址
【Android11】在内置的Tvsettings的界面中显示以太网Mac地址 了解Preference必要信息步骤:1. 在设置页面的xml文件中增加一个Preference ,这是要显示出来的设置项2. 在strings.xml文件中增加我们在第一步新设置的值3. 为新加的设置项增加一个新的XXXPref…...
在Oracle 11g 数据库上设置透明数据加密(TDE)
本文回答2个问题: 11g下简明的TDE设置过程由于11g不支持在线TDE,介绍2中11g下的加密表空间的迁移方法 设置表空间TDE之前 表空间没有加密时,很容易探测到明文数据: create tablespace unsectbs datafile unsectbs.dbf size 10…...
互动直播 之 视频帧原始数据管理
目录 一、视频帧管理 1、存储图片数据的数据结构 1.1)、图片数据首地址...
基于tcp协议及数据库sqlite3的云词典项目
这个小项目是一个网络编程学习过程中一个阶段性检测项目,过程中可以有效检测我们对于服务器客户端搭建的能力,以及一些bug查找能力。项目的一个简单讲解我发在了b站上,没啥心得,多练就好。 https://t.bilibili.com/86524470252640…...
C/C++内存管理(1):C/C++内存分布,C++内存管理方式
一、C/C内存分布 1.1 1.2 二、C内存管理方式 C可以通过操作符new和delete进行动态内存管理。 2.1 new和delete操作内置类型 int main() {int* p1 new int;// 注意区分p2和p3int* p2 new int(10);// 对*p2进行初始化 10int* p3 new int[10];// p3 指向一块40个字节的int类…...
11 redis中分布式锁的实现
单机锁代码 import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.con…...
循环链表3
插入函数——插入数据,在链表plsit的pos位置插入val数据元素 位置pos(在无特别说明的情况下)是从0开始计数的 要改变链表结构,就要依赖前驱,每个前驱的next存储着下一个数据结点的地址,也就是依靠前驱的ne…...
如何修改百科内容?百度百科内容怎么修改?
百科词条创建上去是相当不易的,同时修改也是如此,一般情况下,百科词条是不需要修改的,但是很多时候企业或是人物在近期收获了更多成就或是有更多的变动,这个时候就需要补充维护词条了,如何修改百科内容&…...
mysql8.0英文OCP考试第131-140题
Q131.You have upgraded the MySQL binaries from 5.7.28 to 8.0.18 by using an in-place upgrade. Examine the message sequence generated during the first start of MySQL 8.0.18: 。。。[System]。。。/usx/sbin/mysqld (mysqld 8.0.18-commercial) starting as proces…...
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
目录 介绍 案例 通过SQLSTATE指定具体的状态码 通过SQLSTATE的代码简写方式 NOT FOUND 介绍 条件处理程序(Handler)可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤。具体语法为: DECLARE handler_action HANDLER FOR c…...
信号的处理时机(内核态,用户态,如何/为什么相互转换,内核空间,cpu寄存器),信号的处理流程详细介绍+抽象图解
目录 信号的处理时机 引入 思考 -- 什么时候才能算合适的时候呢? 用户态转为内核态 引入 内核地址空间 引入 思考 -- 进程为什么能切换成内核态呢? 虚拟地址空间 注意点 原理 (总结一下) 为什么如何进入内核态 引入 介绍 底层原理(int 80) cpu的寄存器 用…...
【JavaEE】Spring的创建和使用(保姆级手把手图解)
一、创建一个Spring项目 1.1 创建一个Maven项目 1.2 添加 Spring 框架支持 在pom.xml中添加 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.3.RELEASE&…...
MyBatis:关联查询
MyBatis 前言关联查询附懒加载对象为集合时的关联查询 前言 在 MyBatis:配置文件 文章中,最后介绍了可以使用 select 标签的 resultMap 属性实现关联查询,下面简单示例 关联查询 首先,先创建 association_role 和 association_…...
第十二章 控制值的转换
文章目录 第十二章 控制值的转换介绍处理特殊 XML 字符文字和 SOAP 编码格式的转义形式 示例防止泄漏的另一种方法 第十二章 控制值的转换 类和属性参数 ESCAPE CONTENT XMLTIMEZONE DISPLAYLIST VALUELIST XMLDEFAULTVALUE XMLLISTPARAMETER XMLSTREAMMODE 介绍 支…...
SQL并集、交集、差集使用
一、概述 SQL语句实现数据的并集(union)、交集(intersect)、差集(except)。 二、案例 1、stu表 idname1张三2李四3王二 2、并集 union union 运算:表示取并集,例如:…...
【双指针】盛水最多的容器
盛水最多的容器 文章目录 盛水最多的容器题目描述算法原理思路一思路二 代码实现Java代码实现C代码实现 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与…...
win11,引导项管理
1,打开cmd,输入msconfig 2,进入引导选项卡 3,删除不需要的引导项...
YoloV8改进策略:WaveletPool解决小目标的混叠问题,提高小目标的检测精度
文章目录 摘要论文:《抗混叠在微小目标检测中的重要性》1、简介2、相关研究2.1、微小物体检测2.2. 抗锯齿过滤器3、方法3.1. Wavelet Pooling3.2 一致顺序的Wavelet Pooling的WaveCNet3.3、Bottom-Heavy Backbone4、实验4.1、预训练数据集4.2、微小目标检测数据集4.3、抗混叠方…...
JavaScript中的假值对象是什么?
JavaScript是一种非常灵活且强大的编程语言,但有时候它的一些特性可能会让人感到困惑。其中一个常见的问题就是假值对象。在本文中,我们将探讨什么是假值对象,并通过代码示例来解释这个概念。 什么是假值对象? 在JavaScript中&am…...
别再死记硬背五层需求了!用马斯洛理论设计产品,这3个实战案例让你秒懂
产品设计的底层密码:用马斯洛需求理论打造用户无法拒绝的体验 深夜两点,某社交App的产品经理盯着用户留存曲线发愁——明明新增功能增加了30%,次日留存率却下降了5个百分点。这场景你是否熟悉?当我们沉迷于功能堆砌和界面美化时&a…...
HoRain云-PHP循环优化:提升性能的5个关键技巧
🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...
苹果手机怎么把照片抠图?2026年最全免费工具推荐指南
最近有个粉丝问我,苹果手机怎么把照片抠图,想给宝宝换个证件照背景,但不想下载一堆APP。说实话,这个问题我听得特别多,很多人都觉得抠图是个技术活,其实现在已经没那么复杂了。我用苹果手机这么多年&#x…...
import os
import os 的原理os 是 Python 内置标准库,提供了操作系统接口——让 Python 代码可以操作文件、目录、环境变量、进程等,而且同一套代码在 Windows、macOS、Linux 上都能用。核心原理:抽象层 os 模块的本质是一个跨平台抽象层: 你…...
测试02测试02测试02测试02测4测试02测试02测试02测试02测4
测试02测试02测试02测试02测4测试02测试02测试02测试02测4...
WindowsCleaner完全掌控指南:高效运用开源工具彻底解决C盘爆满问题
WindowsCleaner完全掌控指南:高效运用开源工具彻底解决C盘爆满问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否厌倦了Windows系统越用越慢、…...
JetBrains IDE试用期重置终极指南:2026年开源解决方案详解
JetBrains IDE试用期重置终极指南:2026年开源解决方案详解 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 你是否曾经在项目开发的关键时刻,突然被JetBrains IDE弹出的试用期结束提示打断思…...
知识付费选型新局:课堂街、小鹅通与海豚知道的深度解析
在2026年的当下,知识付费行业早已过了“有网就能卖课”的草莽时期。对于教育者和内容创作者而言,选对工具不仅关乎功能的实现,更决定了流量的承接效率与变现的利润率。目前市场上,课堂街、小鹅通、海豚知道构成了三足鼎立的格局。…...
Reor:本地AI笔记应用,构建私有知识库与RAG实践指南
1. 项目概述:一个真正属于你的“第二大脑” 如果你和我一样,常年被海量的笔记、想法和碎片信息淹没,总是在需要时找不到半年前记下的那个关键灵感,那么“第二大脑”这个概念对你一定不陌生。市面上的笔记软件层出不穷,…...
下载安装 Temurin® JDK JDK 21 - LTS 速度很慢,有办法加速吗?
下载 Temurin JDK JDK 21 - LTS 速度很慢,有办法加速吗? 加速下载 Temurin JDK 21 的方法 方法一:清华大学 TUNA 镜像(推荐 ⭐⭐⭐⭐⭐) 这是目前最快、最稳定的国内镜像,速度可以跑满带宽。 直接访问目…...
