8.指令格式,指令的寻址方式

目录

一. 指令格式

二. 扩展操作码

三. 指令寻址

(1)指令寻址

(2)数据寻址

1.直接寻址

2.间接寻址

3.寄存器寻址

4.寄存器间接寻址

5.隐含寻址

6.立即寻址

7.基址寻址

8.变址寻址

9.相对寻址

10.堆栈寻址


一. 指令格式

指令(又称机器指令):是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。
注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。Eg: x86架构、ARM架构。

指令格式:一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。一条指令通常要包括操作码字段和地址码字段两部分。根据地址码数目不同,可以将指令分为零地址指令、一地址指令、二地址指令...

零地址指令OP:

  • 不需要操作数,如空操作、停机、关中断等指令
  • 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶。例如数据结构后缀表达式。

一地址指令OP A1:

  • 只需要单操作数,如加1、减1、取反、求补等。指令含义:OP(A1)→A1,完成一条指令需要3次访存:取指→读A1→写A1
  • 需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)。指令含义: (ACC)OP(A1)→ACC,完成一条指令需要2次访存:取指→读A1

注:A1指某个主存地址(类比C语言指针),(A1)表示A1所指向的地址中的内容(类比指针所指位置的内容)

二地址指令OP A1(目的操作数) A2(源操作数):
常用于需要两个操作数的算术运算、逻辑运算相关指令。指令含义:(A1)OP(A2)→A1。完成一条指令需要访存4次,取指→读A1→读A2→写A1

三地址指令OP A1 A2 A3(结果):
常用于需要两个操作数的算术运算、逻辑运算相关指令。指令含义:(A1)OP(A2)→A3。完成一条指令需要访存4次,取指→读A1→读A2→写A3

四地址指令OP A1 A2 A3(结果) A4(下址):
A4=下一条将要执行指令的地址。指令含义:(A1)OP(A2)→A3。完成一条指令需要访存4次,取指→读A1→读A2→写A3。正常情况下:取指令之后PC+1,指向下一条指令。而四地址指令执行指令后,将PC的值修改位A4所指地址。

地址码的位数有什么影响?n位地址码的直接寻址范围=2^n.若指令总长度固定不变,则地址码数量越多,每一个地址码位数越少,寻址能力越差。

指令字长:一条指令的总长度(可能会变)
机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和ALU直接相关)

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

半字长指令、单字长指令、双字长指令――指令长度是机器字长的多少倍
指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存。

定长指令字结构:指令系统中所有指令的长度都相等。变长指令字结构:指令系统中各种指令的长度不等

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

定长指令字结构(指令总长度不变)+可变长操作码→扩展操作码指令格式。

指令按操作类型分类:

二. 扩展操作码

定长操作码:在指令字的最高位部分分配固定的若干位(定长)表示操作码。一般n位操作码字段的指令系统最大能够表示2"条指令。

  • 优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利;
  • 缺:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限。

扩展操作码(不定长操作码):全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。

  • 优:在指令字长有限的前提下仍保持比较丰富的指令种类;
  • 缺:增加了指令译码和分析的难度,使控制器的设计复杂化。

在设计扩展操作码指令格式时,必须注意以下两点:
(1)不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
(2)各指令的操作码一定不能重复。
通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。

三. 指令寻址

(1)指令寻址

指令寻址:下一条欲执行指令的地址(始终由程序计数器PC给出)。

顺序寻址:(PC)+“1”→PC(1是指令字长,不是存储字长也不是1个字节),先有+1操作(也就是让PC指向下一条指令),然后在执行本条指令。
跳跃寻址:由转移指令指出。每次取指令之后,PC一定会自动+1,指向下一条应该执行的指令,JUMP会把PC的值强制修改。

(2)数据寻址

数据寻址:确定本条指令的地址码指明的真实地址。

例如:左:JMP 7,7就是真实地址;中:7解读为从程序初始地址100的偏移;右:3解读为执行103时PC的偏移量。

求出操作数的真实地址,称为有效地址(EA)。指令中的地址码记为A。为了区别寻址方式,可以在前加几位寻址方式位:

1.直接寻址

直接寻址:指令字中的形式地址A就是操作数的真实地址EA,即EA=A。

一条指令的执行:取指令访存1次,执行指令访存1次,暂不考虑存结果共访存2次
优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
缺点:A的位数决定了该指令操作数的寻址范围。操作数的地址不易修改。

2.间接寻址

间接寻址:指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址。所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)。

一条指令的执行:取指令访存1次,执行指令访存2次,暂不考虑存结果共访存3次

优点:可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。便于编制程序(用间接寻址可以方便地完成子程序返回)。缺点:指令在执行阶段要多次访存(一次间址需两次访存,多次寻址需根据存储字的最高位确定几次访存)。

3.寄存器寻址

寄存器寻址:在指令字中直接给出操作数所在的寄存器编号,即EA=Ri,其操作数在由Ri所指的寄存器内。

一条指令的执行:取指令访存1次,执行指令访存0次(访问寄存器),暂不考虑存结果共访问1次

优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速度快,支持向量/矩阵运算。
缺点:寄存器价格昂贵,计算机中寄存器个数有限。

4.寄存器间接寻址

寄存器间接寻址:寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(Ri)。

一条指令的执行:取指令访存1次,执行指令访存1次,暂不考虑存结果共访存2次。

特点:与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。

5.隐含寻址

隐含寻址:不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。

优点:有利于缩短指令字长。缺点:需增加存储操作数或隐含地址的硬件。

6.立即寻址

立即寻址:形式地址A就是操作数本身(不是操作数在主存的地址,这一点和直接寻址区分开),又称为立即数,一般采用补码形式。#表示立即寻址特征。

一条指令的执行:取指令访存1次,执行指令访存0次,暂不考虑存结果共访存1次

优点:指令执行阶段不访问主存,指令执行时间最短。
缺点:A的位数限制了立即数的范围。

7.基址寻址

基址寻址:以程序的起始存放地址作为“起点”。

左图:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,形成操作数的有效地址,即EA=(BR)+A。

右图:部分计算机没有BR,所以需要借用通用寄存器,在指令中指明要将哪个通用寄存器作为基址寄存器使用。

优点:便于程序“浮动”(修改BR的值即可),方便实现多道程序并发运行。可扩大寻址范围(基址寄存器的位数大于形式地址A的位数)。用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序(整个程序在内存里边的浮动)。

注:基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。

8.变址寻址

变址寻址:程序员自己决定从哪里作为“起点”。有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即EA= (IX)+A,其中IX可为变址寄存器(专用),也可用通用寄存器作为变址寄存器。

注:变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(IX作为偏移量),形式地址A不变(作为基地址)。而基址寻址中,BR保持不变作为基地址,A作为偏移量。

例如:执行求数组和的操作,如果采用直接寻址,每一次加法对应一条指令,编程就很不灵活:

而如果采用变址寻址方式:

在数组处理过程中,可设定形式地址A为数组的首地址,不断改变变址寄存器lX的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。

复合寻址:假如上面的代码存在编号100的起始地址:

9.相对寻址

相对寻址:以程序计数器PC所指地址作为“起点”。把程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于PC所指地址的位移量,可正可负,补码表示。

优点:操作数的地址不是固定的,它随着Pc值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动(一段代码在程序内部的浮动)。相对寻址广泛应用于转移指令。

补充:关于汇编语言的比较和跳转:

10.堆栈寻址

堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。

堆栈是存储器(或专用寄存器组)中一块特定的按“后进先出(LIFO)”原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP) 。

上面称为硬堆栈,硬堆栈直接使用寄存器,如果在主存中操作,我们称为软堆栈。堆栈可用于函数调用时保存当前函数的相关信息。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zabbix 5.0部署(centos7+server+MySQL+Apache)

环境 系统IPZABBIX版本主机名centos7192.168.231.2195.0zabbix-server 安装zabbix 我选择版本是zabbix-5.0 zabbix的官网是Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution 安装Zabbix软件源 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/…

神经网络中的量化与蒸馏

本文将深入研究深度学习中精简模型的技术:量化和蒸馏 深度学习模型,特别是那些具有大量参数的模型,在资源受限环境中的部署几乎是不可能的。所以就出现了两种流行的技术,量化和蒸馏,它们都是可以使模型更加轻量级&…

MySQL8 绿色版安装

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: MySQL学习 ✨特色专栏: My…

Selenium浏览器自动化测试框架简单介绍

selenium简介 介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google …

ARM Linux 基础学习 / 系统相关,文件系统,文件属性

编辑整理 by Staok。 本文部分内容摘自 “100ask imx6ull” 开发板的配套资料(如 百问网的《嵌入式Linux应用开发完全手册》,在 百问网 imx6ull pro 开发板 页面 中的《2.1 100ASK_IMX6ULL_PRO:开发板资料》或《2.2 全系列Linux教程&#xf…

MAT工具定位分析Java堆内存泄漏问题方法

原创/朱季谦 一、MAT概述与安装 MAT,全称Memory Analysis Tools,是一款分析Java堆内存的工具,可以快速定位到堆内泄漏问题。该工具提供了两种使用方式,一种是插件版,可以安装到Eclipse使用,另一种是独立版…

STM32——STM32F4系统架构

文章目录 前言STM32F4XX系统架构 前言 本篇文章为STM32F4系列的系统架构,因为最近在学习F4的板子,暂时先更F4的,有需要F1的后续再更新。 主系统由 32 位多层 AHB 总线矩阵构成,可实现以下部分的互连: STM32F4XX系统架…

Latex在图表标题里面引用参考文献时,出现参考文献顺序混乱的解决方案(适用于bibtex)

问题描述 如果你在figure环境的\caption或\captionof中使用\cite,但是参考文献的顺序仍然不正确,可能是因为LaTeX的处理流程导致了这个问题。 比如图片在第二章节但里面引用了参考文献,在文章末尾的参考文献第二章图片的参考文献顺序&#…

代码随想录Day45 动态规划13 LeetCode T1143最长公共子序列 T1135 不相交的线 T53最大子数组和

LeetCode T1143 最长公共子序列 题目链接:1143. 最长公共子序列 - 力扣(LeetCode) 题目思路: 动规五部曲分析 1.确定dp数组的含义 这里dp数组的含义是结尾分别为i-1,j-1的text1和text2的最长公共子序列长度 至于为什么是i-1,j-1我之前已经说过了,这里再…

kafka+ubuntu20.04+docker配置

记录一次配置过程 安装docker 参加下面链接的第一部分 Ubuntu20.04使用docker安装kafka服务-CSDN博客 安装zookeeper docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper安装kafka服务 docker run -d --name kafka …

序列化模块-json和pickle

一、json json是所有语言都通用的一种序列化格式 ,只支持 列表、 字典、 字符串、 数字 , 字典的key必须是字符串 1、dumps、loods # 在内存中做数据转换 : # durps 数据类型 转成 字符串 序列化 # loods 字符串 转成 数据类型 反序…

Postman for Mac(HTTP请求发送调试工具)v10.18.10官方版

Postman for mac是一个提供在MAC设备上功能强大的开发,监控和测试API的绝佳工具。非常适合开发人员去使用。此版本通过Interceptor添加了对请求捕获的支持,修正了使用上下文菜单操作未复制响应正文的问题和预请求脚本的垂直滚动条与自动完成下拉列表重叠…

桥接模式 rust和java的实现

文章目录 桥接模式介绍应用实例优点缺点使用场景关键角色 实现javarsut rust代码仓库 桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间…

大数据-之LibrA数据库系统告警处理(ALM-12045 网络读包丢包率超过阈值)

告警解释 系统每30秒周期性检测网络读包丢包率,并把实际丢包率和阈值(系统默认阈值0.5%)进行比较,当检测到网络读包丢包率连续多次(默认值为5)超过阈值时产生该告警。 用户可通过“系统设置 > 阈值配置…

【Python】【应用】Python应用之一行命令搭建http、ftp服务器

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:Python应用&…

041:vue中 el-table每个单元格包含多个数据项处理

第041个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

基于SSM的超市积分管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

JavaWeb——HTML常用标签

目录 1. 标题标签 2. 段落标签 3. 换行/分割线标签 4. 列表标签 4.1. 有序列表 4.2. 无序列表 5. 超链接标签 6. 多媒体标签 6.1. img 图片标签 6.2. audio 音频标签 6.3. video 视频标签 7. 表格标签(重点) 8. 表单标签(重点) 1. 标题标签 …

vue3配置环境变量,小白简单易学

环境变量的意义就是防止我们更新打包的时候写错变量,合并代码这些一系列问题 首先看看效果 左边是本地测试环境,右边是打包后的生产环境,写这个环境变量的好处就是,你在本地开发的时候变量随便改,不会影响生产环境&am…

数字货币swap交易所逻辑系统开发分析方案

随着数字货币市场的快速发展, Swap交易所已成为一种重要的交易方式。本文将对数字货币Swap交易所逻辑系统开发进行分析,并探讨其优势、开发难点和解决方案。 一、数字货币Swap交易所逻辑系统开发的优势 数字货币Swap交易所是一种点对点的交易方式&#x…