4-1指令系统-指令格式

news2024/9/20 18:36:11

文章目录

  • 一.指令的基本格式
    • 1.结构
    • 2.长度
    • 3.根据操作数地址码数目分类
      • (1)零地址指令
      • (2)一地址指令
      • (3)二地址指令
      • (4)三地址指令
      • (5)四地址指令
  • 二.扩展操作码指令格式
  • 三.指令的操作类型
    • 1.数据传送
    • 2.算术逻辑单元
    • 3.移位操作
    • 4.转移操作
    • 5.输入输出操作

一.指令的基本格式

一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。

1.结构

一条指令通常包括操作码字段和地址码字段两部分。
(1)操作码OP:指出指令中应该执行什么性质的操作和具有何种功能。即进行什么操作,如取数、乘法、加法、停机
(2)地址码Ai:给出被操作的信息(指令或者数据)的地址。即对谁进行操作

2.长度

(1)指令字长:一条指令的总长度(可能会变)
(2)机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)(固定不变)
(3)存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)(固定不变)

  • 什么是指令字长、机器字长和存储字长?
    指令字长是指一个指令字中包含二进制代码的位数。机器字长指计算机能直接处理的二进制数据的位数。存储字长指一个存储单元存储一串二进制代码(存储字)的位数。

指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令(32bit)需要两次访存

①按指令长度分类

  • 单字长指令:长度等于机器字长
  • 双字长指令:长度等于两倍机器字长
  • 半字长指令:长度等于半个机器字长
  • 定长指令字结构:所有指令长度相同
  • 变长指令字结构:各种指令长度不同

②按操作码长度分类

  • 定长操作码:指令系统中所有指令的操作码长度都相同。n位的操作码可以支持2n条指令。控制器的译码电路设计简单,但灵活性较低
  • 可变长操作码:指令系统中各指令的操作码长度可变。控制器的译码电路设计复杂,但灵活性较高

3.根据操作数地址码数目分类

(1)零地址指令

只给出操作码,没有给出地址。
①不需要操作数的指令。如停机指令、空操作指令、关中断指令。
②零地址的运算类指令仅使用在堆栈计算机中
通常参与运算的两个操作数隐含的从栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含地压入堆栈。
类似于用栈实现中缀转后缀,详见3-2栈和队列-应用-2.表达式求值-(6)用栈实现中缀转后缀(运算符栈)

(2)一地址指令

给出操作码和一个地址码。若指令字长32位,操作码8位,地址码24位,则指令操作数直接寻址范围为224,其他同理

在这里插入图片描述

①只有目的操作数的单操作指令
按A1读取操作数,进行OP操作后,结果存回源地址。对地址码指定位置的操作数进行操作码操作,存回地址码指定位置OP(A1)→A1
如:加1、减1、取反

  • A1指某个主存地址,(A1)表示A1所指向的地址中的内容
  • 需要三次访存:取指令、取操作数、存放结果

②隐含约定目的地址的双操作数指令
按指令地址A1读取源操作数,指令可隐含约定。另一个操作数由ACC提供,运算结果也存入ACC中。对地址码指定位置的操作数与ACC存放的操作数进行操作码运算,结果存入ACC,即(ACC)OP(A1)→ACC
如:加法、减法、乘法、除法

  • 需要两次访存:取指令、取操作数

(3)二地址指令

给出操作码和两个地址码。常用于需要两个操作数的算术运算、逻辑运算相关指令。
对目的地址码A1指明的目的操作数和源地址码A2指明的源操作数进行操作码执行的运算,结果存回目的操作数的地址A1(目的地址码),即(A1)OP(A2)→A1

  • 需要四次访存:取指令、取两个操作数、存放结果

(4)三地址指令

(A1)OP(A2)→A3
需要四次访存:取指令、取两个操作数、存放结果

在这里插入图片描述

(5)四地址指令

(A1)OP(A2)→A3,A4指明下一条要执行指令的地址

  • 需要四次访存:取指令、取两个操作数、存放结果
  • 正常情况下,取指令后(PC)+1→PC,PC自动指向下一条指令。但在四地址指令中,应该将PC的值修改为A4所指向的地址

在这里插入图片描述

二.扩展操作码指令格式

扩展操作码是定长指令字结构(所有指令长度相同)和可变长操作码(操作码的长度可变)的结合。操作码的长度随地址码的减少而增加,不同地址数的指令可具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。但增加了指令译码和分析的难度,使控制器的设计复杂化。

1.三地址指令:OP4位,0000~1110,15条
对于三地址指令,前4位为基本操作码OP,后面三个地址字段A1、A2、A3分别占4位,指令字长共16位。4位基本操作码若全部用于三地址指令,即从0000到1111共16条。为保证零地址、一地址、二地址指令的使用,需留出1111开头的OP作为扩展操作码。因此三地址指令共15条。
在这里插入图片描述
2.二地址指令:OP8位,11110000~11111110,15条
对于二地址指令,前8位为基本操作码OP,后面两个地址字段A1、A2分别占4位,指令字长共16位(不变)。8位基本操作码若全部用于二地址指令,二地址指令的OP以111开头,范围1111 0000~1111 1111,共16条。同样二地址指令需要将1111 1111开头的OP留作扩展操作码,供一地址和零地址使用。因此二地址指令共15条。

3.一地址指令:OP12位,111111110000~111111111110,15条
对于一地址指令,前12位为基本操作码OP,后面一个地址字段A1占4位,指令字长共16位(不变)。12位基本操作码全部用于一地址指令,一地址指令以1111 1111开头,范围1111 1111 0000~1111 1111 1111,共16位。同样一地址指令需要将1111 1111 1111开头的OP留作扩展操作码,供零地址使用。因此一地址指令共15条。

4.零地址指令:OP16位,1111111111110000~1111111111111111,16条
对于零地址指令,16位全部为基本操作码OP,指令字长16位(不变)。16位基本操作码全部用于零地址指令,范围1111 1111 1111 0000~1111 1111 1111 1111,共16条。

可以看出,操作码的长度随地址码的减少而增加,使得所有指令长度相同。

以上设计满足:
①不允许短码是长码的前缀
②各指令的操作码一定不能重复
(类似于哈夫曼编码)

通常来说,对于使用频率较高的指令分配较短的操作码,从而尽可能减少指令译码和分析的时间。

[例] 设指令字长固定为16位试设计一套指令系统满足:有15条三地址指令,12条二地址指令,62条一地址指令,32条零地址指令

解:
①三地址指令:0000~1110
②二地址指令:1111 0000~1111 1011
③一地址指令:在以下范围内任取62条
1111 1100 0000~1111 1100 1111
1111 1101 0000~1111 1101 1111
1111 1110 0000~1111 1110 1111
1111 1111 0000~1111 1111 1101(零地址32条,至少留2组,即10和11)
④零地址指令:
1111 1111 1110 0000~1111 1111 1110 1111
1111 1111 1111 0000~1111 1111 1111 1111

注:设地址长度为n,上一层留出m种状态,下一层可扩展出m×2n种状态

在本例中地址长度为4,三地址指令留出一位给二地址,二地址可扩展出1×24=16种状态,而二地址只需要12条,给一地址留出4条。一地址可扩展出4×24=64种,而一地址只需要62种,留个零地址指令2种。零地址指令可扩展出2×24=32种

三.指令的操作类型

1.数据传送

传送指令通常有寄存器之间的传输(MOV)、从内存单元读取数据到CPU寄存器(LOAD)(如取a置ACC)、从CPU寄存器写数据到内存单元(STORE)(如将存放在ACC中的计算结果写回主存)

2.算术逻辑单元

加(ADD)、减(SUB)、比较(CMP)、乘(MUL)、除(DIV)、加1(INC)、减1(DEC)、与(AND)、或(OR)、取反(NOT)、异或(XOR)

在这里插入图片描述

3.移位操作

算法移位、逻辑移位、循环移位等

4.转移操作

无条件转移(JMP)、条件转移(BRANCH)、调用(CALL)、返回(RET)、陷阱(TRAP)等。无条件转移指令在任何情况下都执行转移操作,而条件转移指令仅在特定条件满足时才执行转移操作,转移条件一般是某个标志位的值,或几个标志位的组合。(转移主要依靠PC的指向)

  • 调用指令和转移指令的区别
    执行调用指令时必须保存下一条指令的地址(返回地址),当子程序执行结束时,根据返回地址返回到主程序继续执行;而转移指令则不返回执行。

5.输入输出操作

这类指令用于完成CPU与外部设备交换数据或传送控制命令及状态信息。

按指令的操作类型分类:
(1)数据传送类:进行主存和CPU之间的数据传送(数据传送)
(2)运算类:算术逻辑操作、移位操作
(3)程序控制类:改变程序执行的的顺序(转移操作)
(4)输出/输出类:进行CPU和I/O设备之间的数据传送(输入输出操作)

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

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

相关文章

Maven学习(二):Maven基础概念

Maven基础概念一、仓库二、坐标三、全局setting与用户setting区别一、仓库 仓库:用于存储资源,包含各种jar包;仓库分类: 本地仓库:自己电脑上的存储仓库,连接远程仓库获取资源;远程仓库&#x…

信息论复习—离散信道及其容量

目录 信道的简介: 信道的分类: 离散无记忆信道(DMC)模型: 转移概率: 离散无记忆信道的转移矩阵 输出仅与当前的输入有关: 后验概率: 离散无记忆信道的后验概率矩阵 &#xf…

spring-boot-starter-jdbc和mysql-connector-j依赖爆红的解决办法

spring-boot-starter-jdbc和mysql-connector-j依赖爆红的解决办法 目录spring-boot-starter-jdbc和mysql-connector-j依赖爆红的解决办法出现问题之前出现的问题:解决办法:方案一:第一种是继承 spring-boot-starter-parent 然后 依赖覆盖方案…

怎么用Python测网速?

“speedtest-cli” 是一个 Python 的第三方库,它可以用来在命令行中测试网络速度。它使用了 Speedtest.net 的服务器来进行测速,并可以提供下载和上传速度、延迟、丢包率等信息。使用这个库可以很方便地在终端中测试网络速度,而无需在浏览器中…

轻量级代码生成器加测试数据生成器

轻量级代码生成器加测试数据生成器介绍代码生成常用注解基本使用全局控制属性模板文件相关属性模板文件配置模拟数据生成自定义词库索引注意事项从已经存在的表完成映射,生成模板代码使用步骤Gitee项目链接 介绍 本项目是一个轻量级代码生成器,并提供多种方式来完成模拟数据的…

力扣(LeetCode)2299. 强密码检验器 II(C++/Python3)

题目描述 模拟 仅当密码包含强密码的所有特性,它是一个 强 密码。提示我们,遍历密码,维护 444 个标志,标志记录特性。遍历结束,根据标志判断特性。 class Solution { public:bool strongPasswordCheckerII(string pa…

MySQL建立数据库时字符集和排序规则的选择

文章目录前言一、字符集?二、Mysql中的字符集1.Unicode与UTF8、UTF8MB4、UTF16、UTF32关系2.Mysql新建数据库时选择哪种字符集呢?三、Mysql排序规则四、Mysql查询字符集和排序规则常用的命令前言 在MySQL中,字符集和排序规则是区分开来的&am…

【ArcGIS 小贴士】Pro VS ArcMap及软件获取

有朋友问我,ArcGIS Pro是不是比ArcMap好用。 我觉得用Pro的感觉,用Pro的感觉比ArcMap Ribbon界面 Pro采用的是Ribbon用户界面,与现在的微软的Office软件相似,功能的组织更加清晰。10.x版本的ArcGIS则是传统的工具条界面 有些朋友…

day42|● 1049. 最后一块石头的重量 II ● 494. 目标和 ● 474.一和零

1049. 最后一块石头的重量 II 1.代码 class Solution { public:int lastStoneWeightII(vector<int>& stones) {int sum 0;for(int i: stones) {sum i;}int t sum;sum sum /2;vector<int>f(sum 1);for (int i 0; i < stones.size(); i) {for (int j …

【Pytorch基础(2)】张量的索引,切片与维度变换

一、张量的维度索引 张量的索引是从第零维度开始的。让我们来创建一个四维的张量做举例说明&#xff1a;torch.Tensor(2,3,64,64) 此时&#xff0c;这个张量可以表示两张边长为64的正方形彩色图像&#xff0c;具体来说&#xff0c;张量的第零维表示图像的数量&#xff1b;第一…

Apollo星火计划学习笔记——Control 专项讲解(LQR)

文章目录1. 算法相关基础1.1 一阶倒立摆1.2 二自由度车辆横向跟踪偏差模型1.3 车辆横向跟踪偏差模型1.4 车辆横向跟踪偏差倒车模型1.5 轮胎侧偏角与侧偏刚度1.6 LQR 线性二次型问题:2. LQR代码解析2.1 WriteHeaders&#xff08;调试过程中的状态量&#xff09;2.2 LatControlle…

Android APK 瘦身

Android APK 瘦身的几个方法将项目中的图片由png、jpg转为webp格式。如下操作&#xff1a;1.1选中图片或者含有图片的文件夹 右键选择Convert toWebP..1.2根据自身情况选择有损压缩还是无损压缩备注&#xff1a;官网连接&#xff1a;https://developer.android.google.cn/studi…

leetcode-每日一题-强密码检验器II(简单,数学逻辑)

如果一个密码满足以下所有条件&#xff0c;我们称它是一个 强 密码&#xff1a;它有至少 8 个字符。至少包含 一个小写英文 字母。至少包含 一个大写英文 字母。至少包含 一个数字 。至少包含 一个特殊字符 。特殊字符为&#xff1a;"!#$%^&*()-" 中的一个。它 不…

Golang 从菜鸟到大咖的必经之路_GO 语言的转义字符、注释、规范和代码风格要求

目录 一、GO 语言转义字符 A.Golang 常用的转义字符&#xff08;escape char&#xff09;: B.课程练习 二、Go 语言注释&#xff1a; A.注释&#xff08;Comment&#xff09;: B.Go 语言中的注释类型&#xff1a; C.注释不会被编译 D.shifttab 三、规范的代码风格要求…

聚焦儿童羽绒服产业,看用友YonSuite打造领先实践的数智创新小灯塔

有一种冷“是妈妈觉得你冷”。每每想起小时候&#xff0c;为了应对寒冷的冬季&#xff0c;都会“全副武装”&#xff0c;裹得厚厚的&#xff0c;里三层外三层。 放到如今&#xff0c;有了羽绒服的萌娃们&#xff0c;已不再像我们当年一样穿得厚厚的了。现在的年轻爸妈喜欢装扮…

Udev 为设备节点起别名

查看设备信息&#xff1a; 操作udev&#xff0c;可以使用udevadm命令&#xff0c;如果我们要查看/dev/sda 设备节点信息&#xff0c;我们可以使用下面命令&#xff1a; 命令&#xff1a;udevadm info -a --namesda rootubuntu:/sys/kernel/debug/usb# udevadm info -a --nam…

【C语言】文件操作(1)

文件操作一、关于文件的基础知识1.为什么要学习文件2.什么是文件3.文本文件与二进制文件二、文件的打开和关闭1. 文件指针2.文件的打开和关闭3.文件结尾三、文件的顺序读写1.fputc与fgetc2.fputs与fgets3.fprintf与fscanf4.fwrite与fread5.三个标准流一、关于文件的基础知识 1…

低代码平台的优缺点

全文 1518 字 阅读时间约 5 分钟 本文首发于码匠技术博客 目录 低代码平台的优点 低代码平台的缺点 写在最后 低代码工具大大减少了开发者需要编写的代码量&#xff0c;通过增加可复用代码和组件的数量来帮助企业适应发展需求&#xff0c;设计和部署自定义应用程序以紧跟市…

科研快报|二代加三代扩增子测序探究苏铁植物根部复杂微生物群落组成

背景介绍苏铁俗称铁树&#xff0c;是地球上现存最古老的活化石植物&#xff0c;也是种子植物中最原始的种群。我国是世界上苏铁植物资源最丰富的国家之一&#xff0c;本文对我国的特有种德保苏铁&#xff08;Cycas debaoensis&#xff09;和仙湖苏铁&#xff08;Cycas fairylak…

【复习 自用】JavaScript知识汇总(基础版)

注&#xff1a;之前学过JavaScript&#xff0c;本贴仅用于复习(自用)&#xff0c;建议没基础的朋友先学基础。会混入typescript&#xff01; 更新中~~~~~~~~~~ 对象.属性和对象[‘属性’]的区别&#xff1a;总的来说没啥区别&#xff0c;但是&#xff0c; &#xff01;&#…