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

news2024/11/22 16:13:50

目录

一. 指令格式

二. 扩展操作码

三. 指令寻址

(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.coloradmin.cn/o/1209425.html

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

相关文章

HTML 之常用标签的介绍

文章目录 h标签p标签a标签img 标签table、tr、td标签ul、ol、li 标签div 标签 h标签 <h> 标签用于定义 HTML 文档中的标题&#xff0c;其中 h 后面跟着一个数字&#xff0c;表示标题的级别。HTML 提供了 <h1> 到 <h6> 六个不同级别的标题&#xff0c;其中 &…

bclinux aarch64 ceph 14.2.10 对象存储 http网关 CEPH OBJECT GATEWAY Civetweb

相关内容 bclinux aarch64 ceph 14.2.10 文件存储 Ceph File System, 需要部署mds&#xff1a; ceph-deploy mds-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【3】vdbench fsd 文件系统测试-CSDN博客 ceph-deploy bclinux aarch64 ceph 14.2.10【2】vdbench rbd 块设…

桥接模式 rust和java的实现

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

JS操作canvas

<canvas>元素本身并不可见&#xff0c;它只是创建了一个绘图表面并向客户端js暴露了强大的绘图API。 1 <canvas> 与图形 为优化图片质量&#xff0c;不要在HTML中使用width和height属性设置画布的屏幕大小。而要使用CSS的样式属性width和height来设置画布在屏幕…

STM32中独立看门狗和窗口看门狗的使用方法

独立看门狗&#xff08;Independent Watchdog&#xff0c;IWDG&#xff09;和窗口看门狗&#xff08;Window Watchdog&#xff0c;WWDG&#xff09;是STM32微控制器中提供的两种看门狗定时器。看门狗定时器是一种硬件计时器&#xff0c;用于监视系统的运行状态&#xff0c;并在…

HTTP/2.0协议详解

前言 HTTP/2.0&#xff1a;互联网通信的革新标准 随着互联网技术的飞速发展&#xff0c;HTTP协议作为互联网应用最广泛的通信协议&#xff0c;也在不断演进和优化。HTTP/2.0是HTTP协议的最新版本&#xff0c;它旨在提供更高效、更安全、更快速的互联网连接。 一、HTTP/2.0的…

​软考-高级-系统架构设计师教程(清华第2版)【第6章 数据库设计基础知识(234~262)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第6章 数据库设计基础知识&#xff08;234~262&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-LSTM-Attention粒子群优化长短期记忆神经网络融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果…

XUbuntu22.04之安装pkg-config(一百九十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

机器学习—基本术语

目录 1.样本&#xff08;示例&#xff09; 2.属性 3.属性值 4.属性空间 5.样本空间 6.学习&#xff08;训练&#xff09; 7.数据集 8.测试 9.假设 10.学习器 11.标记 12.样例 13.标记空间&#xff08;样例空间&#xff09; 14.分类与回归 15.有监督学习、无监督…

【HUST】网安纳米|2023年研究生纳米技术考试参考

目录 1 纳米材料是什么 2 纳米材料的结构特性 3 纳米结构的其他特性 4 纳米结构的检测技术 5 纳米材料的应用 打印建议&#xff1a;PPT彩印&#xff08;这样重点比较突出&#xff09;&#xff0c;每面12张PPT&#xff0c;简单做一下关键词目录&#xff0c;亲测可以看清。如…

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):FREERTOS移植

前言: 一般的GUI工程都需要一个操作系统,可能是linux,重量级的,也可能是FreeRTOS,轻量级的。 一句话理解那就是工程就是FreeRTOS task任务的集合。 一个main函数可以看到大框架: 很显然,除了第一个是硬件配置的初始化,中间最重要的部分就是要创建任务,把AWTK的应用…

DDR SDRAM 学习笔记

一、基本知识 1.SDRAM SDRAM : 即同步动态随机存储器&#xff08;Synchronous Dynamic Random Access Memory&#xff09;, 同步是指其时钟频率与对应控制器&#xff08;CPU/FPGA&#xff09;的系统时钟频率相同&#xff0c;并且内部命令 的发送与数据传输都是以该时钟为基准…

竞赛选题 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…

EasyExcel入门使用教程

文章目录 简介一、工程创建&#x1f391;二、读操作&#x1f38a;二、写操作&#x1f384;总结 简介 数据导入导出意义 后台管理系统是管理、处理企业业务数据的重要工具&#xff0c;在这样的系统中&#xff0c;数据的导入和导出功能是非常重要的&#xff0c;其主要意义包括以下…

了解STM32看门狗定时器的工作原理和原则

STM32 系列微控制器的看门狗定时器 (Watchdog Timer&#xff0c;WWDG) 是一种重要的硬件资源&#xff0c;用于检测系统的异常状态&#xff0c;并在发生异常时执行特定的操作&#xff0c;以确保系统能够正常运行。在本文中&#xff0c;我将详细介绍 STM32 看门狗定时器的工作原理…

Java Elasticsearch 按一定时间间隔(timeInterval)循环查询数据

最近有个需求&#xff0c;前端传入时间间隔&#xff0c;去elasticsearch按照时间间隔统计每个时间间隔内数据量。 public List<HashMap<String,Object>> getCount(RequestParam Integer time, RequestParam String selectedDatedTime) {SimpleDateFormat format n…

Oracle(2-3) Basic Oracle Net Server Side Configuration

文章目录 一、基础知识1、The Listener Process监听器进程2、Connection Methods 连接方法3、Spawn and Bequeath Conn4、Direct Hand-Off Connections 直接切换连接5、Redirection Session 重定向会话6、Simple to Complex:N-Tier 简单到复杂&#xff1a;N层7、Service Config…

双写绕过 [极客大挑战 2019]BabySQL 1

打开题目 随便输入账号密码 根据报错信息可知这是单引号的字符型注入 那我们试试万能密码 1 or 11 页面报错 1 or 11 页面报错 而且根据报错内容显示是没有我们注入上去的or的 那我们就试试 1 order by 3 # 页面报错&#xff0c;根据报错显示页面过滤掉了or和by 那我们…

Java 并发-Lock

目录 Lock 源码 lock() tryLock() tryLock(long time, TimeUnit unit) Lock与synchronized Lock Lock 是 java.util.concurrent.locks包 下的接口。 上图是 java.util.concurrent.locks包下主要常用的类与接口的关系。 源码 public interface Lock {void lock();void l…