指令:指令执行过程、指令寻址、指令组成、数据寻址、补充(扩展操作码指令格式)

news2025/1/12 1:44:43

计算机的工作过程是执行程序的过程,程序是一系列按一定顺序执行的指令。

指令是指挥机器执行某种操作的命令,是计算机运行的最小功能单元(一组二进制代码)。

指令系统:计算机中所有指令的集合,也称指令集。

一个指令系统中,若所有指令长度相同,称为定长指令字结构;若指令长度不同,称为变长指令字结构。

一、指令的执行过程

指令的执行过程:取指令,分析指令,执行指令。

取指令:按照程序设定的顺序,从内存取出当前执行的指令,并送到控制器的指令寄存器(IR)中。

分析指令:控制单元(CU)对指令的操作码进行分析,确定计算机应执行什么操作。

执行指令:由控制器发出完成操作所需的一系列控制电位,以便指挥计算机有关部件完成这一操作,同时,程序计数器加“1”或根据转移指令得到下一条指令的地址。

二、指令的寻址

程序执行之前,会将程序的起始地址(即第一条指令的地址)送入程序计数器(PC)中。

每取出一个指令,程序计数器就会得到下一个指令的地址,指令的寻址方式有两种:顺序寻址、跳跃寻址。

顺序寻址:按照顺序依次执行的指令。PC自动加“1”。“1”可以理解为指令字长,实际加的值会因指令长度、编址方式不同而不同。

跳跃寻址:由转移指令指出下一条指令的地址。即转移指令改变了PC的值。

三、指令的组成

指令的组成:操作码,地址码。

1、操作码

操作码:指明执行什么操作。

一个指令系统中,若所有指令操作码的长度相同,称为定长操作码(n位操作码对应2^{n}条指令);若指令操作码的长度不同,称为可变长操作码。

按操作类型,操作码可分为:数据传送类、运算类、程序控制类、输入输出类。

数据传送类:CPU与主存之间数据传送。

运算类:算术运算(加减乘除等)、逻辑运算(与或非异或等)、移位等。

程序控制类:改变程序执行顺序。例如:转移(条件转移、无条件转移)、调用和返回、Trap指令等。

输入输出类:主机与I/O设备之间数据传送。

2、地址码

地址码:指出被操作的数据(简称操作数)存放在哪里,即指明操作数地址,有的指令格式允许地址码就是操作数本身。

(1)四地址指令、三地址指令、二地址指令、一地址指令、零地址指令

地址码可以有若干个,因此,指令又分为四地址指令、三地址指令、二地址指令、一地址指令、零地址指令。

 (2)数据寻址

地址码可以是操作数、也可以是地址;跳跃寻址时的地址码也可以有不同解读。因此,为便于数据寻址,地址码的前几位用来指明是什么寻址方式(即寻址特征、或称寻址方式位)。

数据寻址方式:隐含寻址、立即寻址、直接寻址、间接寻址、寄存器(直接)寻址、寄存器间接寻址、基址寻址、变址寻址、相对寻址、堆栈寻址。

(2-1)隐含寻址

不会明确给出操作数的地址,而是在指令中隐含操作数地址。

例如:两个操作数,地址码中只给出1个,另一个隐含在ACC(累加寄存器)中。

完成一条指令(不考虑存结果)访问主存1次(取指令1次+执行指令0次)。

可以缩短指令字长,但需专门硬件存储操作数或操作数地址。

 (2-2)立即寻址

地址码就是操作数也称为立即数。操作数一般以补码形式表示。无需访问主存。

完成一条指令(不考虑存结果)访问主存1次(取指令1次+执行指令0次)。

 (2-3)直接寻址

地址码直接是主存的实际地址。直接访问主存读取数据。

完成一条指令(不考虑存结果)访问主存2次(取指令1次+执行指令1次)。

 (2-4)间接寻址

一次间接寻址:地址码是主存的形式地址(该地址存储了实际地址)。

访问主存的形式地址获取实际地址,再访问主存的实际地址读取所需的数据。

完成一条指令(不考虑存结果)访问主存3次(取指令1次+执行指令2次)。

两次间接寻址:地址码是主存的形式地址1(该地址存储的仍是形式地址2,形式地址2才存储了实际地址)。

访问主存的形式地址1获取形式地址2,再访问主存的形式地址2获取实际地址,再访问主存的实际地址读取所需的数据。

完成一条指令(不考虑存结果)访问主存4次(取指令1次+执行指令3次)。

 (2-5)寄存器(直接)寻址

地址码是寄存器的编号,且寄存器存储的是所需的数据。

数据在寄存器中,访问寄存器即可,不需要访问主存,因此速度快,但价格贵且寄存器数量有限。

完成一条指令(不考虑存结果)访问主存1次(取指令1次+执行指令0次)。

 (2-6)寄存器间接寻址

地址码是寄存器的编号,但寄存器存储的是所需数据的主存的实际地址。

寄存器间接一次寻址:访问寄存器获取主存的实际地址,再访问主存的实际地址读取所需的数据。

完成一条指令(不考虑存结果)访问主存2次(取指令1次+执行指令1次)。

 (2-7)基址寻址

程序可以在主存的任意位置,可通过程序的起始位置加上数据相对于程序起始位置的偏移量(即数据在程序中的位置)找到数据。即程序的起始地址+偏移量。基址寻址属于偏移寻址。

地址码是“偏移量”。基址寄存器(BR)存储当前程序的起始地址。也可以使用通用寄存器,若使用通用寄存器,需在指令上指明是哪个寄存器。

基址寄存器中的基地址加上偏移量得到主存的地址,再访问主存读取所需的数据。

多用于多道程序,适合程序在主存中浮动。

基址寄存器面向操作系统,基址寄存器的内容只能操作系统修改。若使用通用寄存器,可由用户指定用哪个通用寄存器,但内容仍只能操作系统修改。

 (2-8)变址寻址

处理数组时,数组中的数据可通过数组的起始地址加上数据相对于数组起始地址的偏移量来找到。即数组的起始地址+偏移量。而数组的起始地址可用户设定。即变址寻址。变址寻址属于偏移寻址。

地址码是“基地址”。变址寄存器(IX)中的值为“偏移量”。也可以使用通用寄存器。

“基地址”加上变址寄存器中的“偏移量”得到主存地址,再访问主存读取所需的数据。

多用于循环程序以及处理数组(设定地址码为数组的起始地址)。

变址寄存器面向用户,变址寄存器的内容可由用户修改。

 (2-9)相对寻址

程序内部的某些代码改动位置,因此该段代码相对于程序内部的位置在改变,使用相对寻址。相对寻址属于偏移寻址。

地址码是相对于程序计数器的“偏移量”,可正可负,一般用补码表示。

程序计数器(PC)中的值加上“偏移量”得到主存地址,再访问主存读取所需的数据。

相对寻址用于程序浮动(程序内部的浮动)。广泛应用于转移指令。

 (2-10)堆栈寻址

隐含的地址码是堆栈指针(SP)。操作数存放在堆栈中。

堆栈可以由一组寄存器组成,称为硬堆栈。也可以在主存中划分一块区域作为堆栈使用,称为软堆栈。寄存器价格贵,一般使用软堆栈。堆栈指针(SP)实际是一个特定的寄存器。

 

补充:

1、扩展操作码指令格式

扩展操作码指令格式:指令长度相同(定长指令字结构)的情况下,操作码长度不同(可变长操作码)。

n位操作码对应2^{n}条指令,留出1条或多条(即m条)作为更长操作码的前缀(扩展操作码,假设扩展n位);更长操作码共有m*2^{​{n}}条指令。

操作码不能重复;操作码不能是更长操作码的前缀,否则分析指令时会发生错误。

 

 2、指令字长、机器字长、存储字长

指令字长:一条指令的总长度。(指令长度可能会变)

机器字长:CPU进行一个整数运算所能处理的二进制数据的位数。(通常和ALU直接相关)

存储字长:一个存储单元中的二进制代码的位数。(通常和MDR位数相同。)

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

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

相关文章

idea安装插件JRebel

一、安装插件 二、下载代理服务并启动 首先下载服务,网址 Releases ilanyu/ReverseProxy (kgithub.com) 下载后直接双击运行,杀毒软件可以会报警告,直接忽略就行 启动好,等着就行,接下来会用到。 三、在线获取GUID …

通讯协议044——全网独有的OPC HDA知识一之聚合(十二)持续坏值时间

本文简单介绍OPC HDA规范的基本概念,更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化,以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

Python绘图系统6:自定义坐标列表控件

文章目录 自定义坐标列表控件显示和隐藏加载按钮坐标设置控件的显示和隐藏源代码 Python绘图系统: 基础:将matplotlib嵌入到tkinter 📈简单的绘图系统 📈数据导入📈三维绘图系统自定义控件:坐标设置控件&a…

Threejs学习04——球缓冲几何体环境光以及直线光源

实现随机多个三角形随机位置随机颜色展示效果 这是一个非常简单基础的threejs的学习应用!本节主要学习的是球面缓冲几何体在环境光合直线光源下的效果,可以学习到环境光和直线光源的生成效果等功能!主要使用的是球缓冲几何体对象SphereGeome…

综合能源系统(8)——综合能源系统支撑技术

1、大数据技术 1.1、大数据技术概述 大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 维克托迈尔舍恩伯格和肯尼斯克耶编写…

【面试八股文】每日一题:谈谈你对IO的理解

谈谈你对IO的理解 每日一题-Java核心-谈谈你对对IO的理解【面试八股文】 1.Java基础知识 Java IO(Input/Output)是Java编程语言中用于处理输入和输出的一组类和接口。它提供了一种在Java程序中读取和写入数据的方法。 Java IO包括两个主要的部分&#x…

从零开始学习 Java:简单易懂的入门指南之Objects、BigInteger、BigDecimal(十四)

常用API,Objects、BigInteger、BigDecimal 5 Objects类5.1 概述5.2 常见方法 6 BigInteger类6.1 引入6.2 概述6.3 常见方法6.4 底层存储方式: 7 BigDecimal类7.1 引入7.2 概述7.3 常见方法7.4 底层存储方式: 5 Objects类 5.1 概述 tips&…

optee中如何开启或关闭所有中断的

我们知道在Linux Kernel中开启或关闭中断的函数是:local_irq_enable()和local_irq_disable(), 那么在optee os中是怎样做到的呢? optee中通过使用thread_mask_exceptions()和thread_unmask_exceptions()来开启或关闭中断。 thread_mask_exceptions()和thread_unmask_excepti…

C语言:选择+编程(每日一练)

目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:尼科彻斯定理 示例1 题二:等差数列 示例2 本人实力有限可能对一些地方解释和理解的不够清晰&…

【C++深入浅出】初识C++中篇(引用、内联函数)

目录 一. 前言 二. 引用 2.1 引用的概念 2.2 引用的使用 2.3 引用的特性 2.4 常引用 2.5 引用的使用场景 2.6 传值、传引用效率比较 2.7 引用和指针的区别 三. 内联函数 3.1 内联函数的概念 3.2 内联函数的特性 一. 前言 上期说道,C是在C的基础之上&…

Linux Kernel的local_irq_enable()和local_irq_disable()函数

代码如下图所示,最终操作的是msr daifset, #3 和 msr daifclr, #3 寄存器。 (include/linux/irqflags.h) #define local_irq_enable() do { raw_local_irq_enable(); } while (0) #define local_irq_disable() do { raw_local_irq_disable(); } while (0)#define ra…

历数浙大MPA提前批面试的三大变化

从2019年招生开始,浙大mpa项目的招生趋势一直处于稳增状态,特别是提前批面试政策的出现,更加为项目的整体招录添上神奇的一笔。为什么要举行提面?一方面报考的人数比较多,有了选拔的余地和基础;另一方面也能…

Python学习笔记_进阶篇(一)_浅析tornado web框架

tornado简介 1、tornado概述 Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于…

【办公自动化】使用Python批量生成PPT版荣誉证书

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

LeetCode--HOT100题(33)

目录 题目描述:148. 排序链表(中等)题目接口解题思路代码 PS: 题目描述:148. 排序链表(中等) 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 LeetCode做题链接&#xff1…

SpringBoot项目集成ElasticSearch服务

本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍优势说明集成过程1.引入依赖2.添加配置文件3.初始化 示例说明代码结果 总结提升 版本介绍 Spring boot的版本是: 2.3.12   ElasticSearch的版本是:7.6.2 背景介绍 在我们的项目中经常会遇到对于…

《Linux从练气到飞升》No.15 Linux 环境变量

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

Java算法_ 验证二叉搜索树(LeetCode_Hot100)

题目描述: 给你一个二叉树的根节点 ,判断其是否是一个有效的二叉搜索树。root 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 获得…

iTOP-STM32MP157开发板编写驱动程序和应用程序

通过 40.1 章节的学习,我们已经把内核层和用户层实现数据交互的基本概念搞懂了,在上一章节的基础上我们编写驱动程序实现在内核层与应用层传数据。 新建 file_operation.c 文件在 Ubuntu 的/home/driver/04_file_operation 目录下,可以在上次…

基于Javaweb的摄影作品网站/摄影网站

摘 要 随着信息化时代的到来,系统管理都趋向于智能化、系统化,摄影作品网站也不例外,但目前国内的有些网站仍然都使用人工管理,浏览网站人数越来越多,同时信息量也越来越庞大,人工管理显然已无法应对时代的…