指令系统和寻址方式

文章目录

  • 指令系统
    • 指令的基本格式
    • 扩展码指令格式
    • 指令的操作类型
  • 指令的寻址方式
    • 指令寻址
    • 数据寻址
      • 隐含寻址
      • 立即寻址
      • 直接寻址
      • 间接寻址
      • 寄存器寻址
      • 寄存器间接寻址
      • 相对寻址
      • 基址寻址
      • 变址寻址
      • 堆栈寻址
      • 使用场景
      • PSW
      • 小结
  • 程序的机器级代码表示
  • CISC和RISC
  • 刷题小结

指令系统

  • 指令:计算机系统执行的命令
  • 指令集:一台计算机的所有指令的集合
  • ISA:抽象概念,定义了计算机体系结构的基本特征和行为,如指令字格式和指令类型、通用寄存器的个数和位数、数据类型及格式、存储空间的大小和编址方式、寻址方式等

ISA完整定义了软件和硬件的接口,是计算机软/硬件界面之一(操作系统、驱动等也是计算机软/硬件界面)

指令的基本格式

image-20230408165531394

  • 指令分为操作码和地址码,操作码指的是执行哪条指令,地址码是要操作的数据存放在哪。

指令的地址由程序计数器PC给出,注意地址码是找到要操作的数据,而下一条要执行的指令是要找到指令的的地址 ,而指令的地址由PC给出。

  • 指令的长度,等于机器字长的叫单字长指令,等于半个机器字长的称为半字长指令,等于两个机器字长的称为双字长指令。计算机按字节编址,所以指令的位数是字节的整数倍(算出指令的长度23位足够也要取24位作为答案)

指令系统中如果所有指令的长度相同,就是定长指令字结构,指令的长度随着指令功能在变就称作变长指令字结构

  • 指令根据地址码的数目可分为零地址指令、一地址指令、二地址指令,三地址指令、四地址指令

零地址指令:

image-20230408170238352

空操作指令、停机指令、关中断指令。

零地址的运算指令常被用于堆栈寄存器,弹出栈顶和次栈顶的数据进行运算。


一地址指令:

image-20230408170602324

只有目的数的一地址指令:一个数算完存回原地址(a++)。OP(A1)→A1,

隐含约定目的地址的双操作数指令:有一个操作数已经在ACC里面了,默认将结果就存在ACC里,所以只需要提供一个操作数放入ACC进行相加即可。(ACC)OP(A1)→ACC


二地址指令:

image-20230408170821376

(A1)OP(A2)→A1

A1和A2其中有一个目的操作数,算完后结果依旧放在目的操作数中


三地址指令:

image-20230408170832695

(A1)OP(A2)→A3

如果地址都是主存地址,需要四次访存,取指令一次,取两个操作数两次,存放结果一次。(王道教材是这么说的,查到的资料说和具体架构、实现等相关)


四地址指令:

image-20230408170842586

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


扩展码指令格式

王道视频讲的很清楚

image-20230408192019732

指令的操作类型

  • 数据传送:MOV,LOAD,STORE

  • 算术和逻辑运算:ADD,SUB,CMP,MUL,DIV,INC,DEC,AND,OR,NOT,XOR

  • 转移操作:JMP,BRANCH,CALL,RET,TRAP

  • 输入输出操作:完成CPU与外部设备的信息交互

    王道书:

    image-20230408192437114

指令的寻址方式

指令寻址

指令寻址的目的是为了找到下一条指令在哪。

指令寻址分为顺序寻址和跳跃寻址

  • 取指阶段后让PC+“1”,这个1就是让PC指向下一条指令,也就是一个指令字长

顺序寻址:PC+1个指令字长自动形成下一条指令的地址

跳跃寻址:PC在取指后依旧会加“1”,但是当前指令会修改PC的值,比如JMP 7,把PC的值修改为7,下一条就会执行编号为7的指令,实现跳转的结果。

image-20230408210607118

数据寻址

数据寻址的目的是为了获取操作数的地址,然后可以正确的拿到操作数进行指令的执行。

具体的方式有隐含寻址、

image-20230409164201886

形式地址前面会有一个标志来表示是哪种寻址方式,也就是寻址特征。

隐含寻址

image-20230409163653232

比如要算A+B,这种寻址方式中指令里面只需要给出A,而默认B已经放在了ACC里,即不明显的给出第二个操作数的地址值。

优点缩短指令字长,需要的存储空间更少,执行效率更高
缺点增加存储隐含操作数的硬件

立即寻址

image-20230409164438897

A就是要找的数据的值,比如我们要找的数据是011(B),也就是3,一般是要找到3所在的地址再去拿到3。这种寻址方式就直接把数据3放在了地址位上,就不用寻址了,直接用,寻址特征是#。

优点执行时间最短,不用访存
缺点A的位数决定A的数据范围不会很大

直接寻址

image-20230409164754458

名字听上去和立即寻址很像,需要进行区分。

指令里的地址A就是有效地址EA,或者说数据的真实地址。有效地址我们也称为EA(Effective Address)。这里EA=A

根据A我们就能直接拿到操作数。

优点执行速度较快,不需要计算地址,执行阶段只需一次访存
缺点A的位数决定A的寻址范围不会很大

比如A的位数为8,那就只能找256个存储单元

间接寻址

image-20230409165515708

EA=(A),指令里的地址A是操作数的地址EA的地址(套娃),多级套娃就需要多次间接寻址。

这种方式一开始看起来很怪,但实际上扩大了寻址范围。因为实际地址EA是存在主存里的,假如有32位,而直接地址可能就只有16位甚至更短,所以这种办法可以扩大寻址范围。

优点相对于直接寻址扩大了寻址范围
缺点多次访存,速度较慢。

一次间接寻址需要两次访存,两次间接访存需要三次访存…

寄存器寻址

image-20230409170049343

EA=Ri

这里的Ri是寄存器编号,不是主存。

优点地址码短使得指令字短且不用访存,执行速度快
缺点寄存器数量贵,所以数量少

寄存器间接寻址

image-20230409170114384

EA=(Ri)

这里的Ri是寄存器编号,不是主存。

优点比一般的间接寻址速度快
缺点仍然需要访存

相对寻址

image-20230409170538787

EA = (PC)+A

A是偏移量,PC是下一条指令的位置。

实现JUMP A时可以使用相对寻址,这样就能跳转到指定位置。将偏移量加上PC的值就能得到跳转目标的有效地址

优点便于程序浮动,多到程序设计中最重要的寻址方式
缺点寻址范围收到A的位数限制,比如A为8位,那跳转就局限于[PC-256,PC+256]

为什么在多道程序设计中,最重要的寻址方式是相对地址寻址,而不是基址寻址?

在多道程序设计中,最重要的寻址方式是相对地址寻址。相对地址寻址是指在指令中使用相对于某个基址(通常是程序计数器或某个专用寄存器)的偏移量来表示操作数的地址。这种寻址方式适用于多道程序设计,因为它使得程序可以在内存的任何位置运行,而不需要修改指令中的地址值。

虽然基址寻址对于多道程序设计有一定的好处,但它并不是最重要的寻址方式。基址寻址是指使用专用寄存器(称为基地址寄存器)存储基址,然后在指令中使用偏移量来表示操作数的地址。这种方式确实可以改进程序的可重定位性,但它也有一些缺点:

  1. 基址寻址需要使用额外的寄存器来存储基址,这可能在寄存器有限的硬件环境中不是最优选择。
  2. 当程序需要访问不同的内存区域时,需要频繁地更新基址寄存器。这会增加程序的复杂性和执行时间。

相比之下,相对地址寻址不需要额外的寄存器,也不需要频繁地更新基址。因此,在多道程序设计中,相对地址寻址比基址寻址更为重要。

基址寻址

image-20230409171252280

EA=(BR)+A或EA=(R0)+A

BR是一个基址寄存器,寄存器里的内容由操作系统确定,用户不能更改。

优点扩大了A的寻址范围(BR的位数大于A的位数),利于多道程序设计
缺点这块缺点没找到(找到的资料全是王道的书)

变址寻址

image-20230409195600427

EA=(IX)+A

IX是一个寄存器,编址寻址的IX可以由用户自己设置。

优点利于编址循环程序和处理数组,比起基址寻址更具有灵活性和通用性
缺点增加了指令的数量和和程序的复杂度(王道书上也没讲缺点,只讲了特点)

堆栈寻址

硬堆栈:寄存器堆栈

软堆栈:从主存中划出一部分区域来做堆栈

硬堆栈不访存,软堆栈访存一次

堆栈寻址的特点是使用一个栈指针寄存器(通常称为SP寄存器)来管理堆栈中数据的存储和取出。SP寄存器里的内容是栈顶的地址。

使用场景

  1. 立即寻址:适用于需要访问常数或立即数的指令,例如赋值操作等。
  2. 直接寻址:适用于内存空间地址已知且固定的情况,例如静态数据的存储和读取。
  3. 寄存器寻址:适用于需要频繁访问寄存器中的数据的指令,因为寄存器的访问速度比内存快得多,例如循环中的计数器变量等。
  4. 寄存器间接寻址:适用于通过寄存器访问内存中的数据,例如数组中的元素。
  5. 基址寻址:适用于需要动态分配内存或需要访问偏移地址的情况,例如程序中动态分配内存的操作。
  6. 变址寻址:适用于数组和矩阵等数据结构的处理,因为数组和矩阵中的元素通常是按一定规律排列的,可以通过寄存器中的偏移量来访问数组和矩阵中的元素。
  7. 堆栈寻址:适用于程序中的函数调用和返回等操作,因为函数调用和返回时需要保存和恢复栈中的数据。

PSW

cmp指令比较a和b实际上是执行a-b

状态字寄存器PSW会记录a-b的结果,根据PSW的几个标志位进行判断来决定是否转移。

标志位含义
进位标志CF进位则为1,否则为0
零标志ZF结果为0则ZF为1,否则为0
符号位标志SF结果为负则SF为1,否则为0
溢出标志OF结果溢出则OF为1,否则为0

小结

image-20230410203320093

除了间接寻址外别的寻址方式最外层都没有括号,说明别的寻址方式通过加减之后可以直接得到EA,而不用再去取一次存储单元的值得到EA。

程序的机器级代码表示

常见的汇编指令和通用寄存器如下:

汇编指令:

  • MOV:数据传送指令,用于将一个源操作数的值传送到目的操作数中。
  • ADD:加法指令,将两个操作数相加,并将结果存放到目的操作数中。
  • SUB:减法指令,将两个操作数相减,并将结果存放到目的操作数中。
  • CMP:比较指令,将两个操作数进行比较,结果不存储,只修改标志寄存器。
  • JMP:跳转指令,将程序执行的控制权转移到另一个指定的地址处。
  • JZ:零标志位跳转指令,当零标志位为1时,将程序执行的控制权转移到指定的地址处。
  • JE:等于标志位跳转指令,当等于标志位为1时,将程序执行的控制权转移到指定的地址处。
  • JNE:不等于标志位跳转指令,当等于标志位为0时,将程序执行的控制权转移到指定的地址处。
  • CALL:调用指令,将当前指令的下一条指令的地址压入栈中,并将控制权转移到指定的过程中。

通用寄存器:

  • AX:累加器寄存器,用于存储运算结果和参与运算的数据。
  • BX:基址寄存器,用于存放数据存储区的基地址。
  • CX:计数器寄存器,用于循环和移位指令中的计数器。
  • DX:数据寄存器,用于存放数据和进行数据传输操作。在乘法和除法指令中用于存放操作数或运算结果的高位。
  • SI:源变址寄存器,用于存放源操作数的偏移地址。
  • DI:目的变址寄存器,用于存放目的操作数的偏移地址。
  • SP:栈指针寄存器,用于存放栈顶地址。
  • BP:基址指针寄存器,用于存放数据存储区的基地址,通常与堆栈操作有关。

CISC和RISC

CISC和RISC是指令系统的两种设计方向

直接贴王道课件了

image-20230409201231077

image-20230409201918484

简单来说:CISC就像给了你C语言语法+库函数,RISC相当于只给了C语言语法。
CISC更难优化编译代码,RISC更容易。且CISC由于指令复杂导致电路也比较复杂,而RISC电路简单。

这些年都在向RISC靠,以前是CISC

RISC和CISC不具备直接的兼容性,两者都不能运行对方的机器码,在兼容性这块上基本扯不上关系。(实现上有一些技术可以将RISC指令翻译为CISC指令)

RISC的指令字长是定长,只用Load和Store指令,且按边界对齐存放,这些使得取指令、去操作数的操作简化且时间长度固定,可以有效地简化流水线的复杂度。

刷题小结

  • 机器语言是指令系统的实现方式,且指令系统的出现避免了用户编写程序时直接与二进制打交道。

  • 指令的地址由PC给出

  • 中断隐指令是一种处理器指令,是为了能够让处理器执行当前任务时随时响应设备的中断请求,完成中断后返回原来的程序执行。他是由外部事件触发的,中断隐指令的执行和程序的正常流程是分离的,所以中断隐指令不是程序控制指令。

  • 如果说一指令有254条,从0编址是编到253,所以写题时得注意别写成254。

  • 指令系统中采用不同寻址方式的目的是可缩短指令字长,扩大寻址空间,提高编程的灵活性

  • 直接寻址的无条件转移指令的功能是将指令的地址码送入PC中,而不是MAR.

  • 操作数和操作数的有效地址需要进行区分,寄存器寻址的寄存器中存的就是操作数,寄存器间接寻址的寄存器中存的是EA,还要通过这个EA去主存里拿到操作数

  • 有些寻址方式需要标识是哪个寄存器的得分配位数给寄存器编号

  • 基址寻址的形式地址,即地址码里放的是补码,如果所给补码是4位,而主存地址是8位,这时需要进行符号扩展,不然基址加上偏移量的结果是错的。

  • PSW的各个标志位需要注意,比如SF表示的是符号位标志,但是是负数时为1,而结果为0时符号位标志也是0.

  • 题目给了有多少种寻址方式的话得注意指令字长分配位数时要考虑指令特征。比如有4个指令的话指令特征要分配2位。

  • CISC会尽量去增强指令的功能,且需要用到微程序处理器。而RISC是不用或少用微程序处理器,以硬布线控制器为主(电路被设计为直接执行指令)。

  • 基址寻址的基址寄存器面向操作系统,用户操作不了,而变址寻址的寄存器面向用户,用户可操作,所以数组操作时常常可以用上变址寻址。

  • 大端模式下指令中给出的地址是MSB,小端模式下指令给出的地址是LSB(0x123456里的MSB是0x12,LSB是0x56)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Revit插件 | 建模助手2023年度版本大更新,就是这么懂你

​大家好,本期是懂你的建模助手。 从去年开始,建模助手几乎每个月都会有大大小小的活动,目的是让大家用最低的成本尝试极棒的建模体验!强行挽尊ing 但作为一支很pro的团队,单一地搞活动肯定不行滴,还得在…

Python SMTP发送邮件和线程

文章目录一、Python SMTP发送邮件二、Python3 多线程总结一、Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 python的smtplib提供…

使用ChatGPT帮助我们编码的10种场景

文章目录1、技术搜索2、生成常用工具函数3、帮助解读代码4、添加注释5、优化代码6、Vue2 转 Vue37、Vue 转 React8、补充 TypeScript 类型9、生成文档10、工具配置总结ChatGPT 的出现,彻底改变的很多代码开发的方式,特别是通用型的代码,使用它…

基于公私密钥的单点登录

目前已知的单点登陆方式有: 多个系统集群 建立一个SSO认证中心,用户只需要登录一次就可以访问所有相互信任的应用系统。 1、可以通过session广播机制实现:在一个集群中的一个模块登录后,然后把这个session复制n份,发…

JUC-01 线程的创建和状态转换

本次我们主要讲三个问题 线程是什么?线程有哪些状态?各状态间的转换了解吗?创建线程的3种方法你都了解吗? 1. 线程是什么?(了解即可) 进程: 进程是一个具有一定独立功能的程序在一…

计算机网络考试复习——第一章 1.7

1.7 计算机网络体系结构 两台计算机要互相传送文件需解决很多问题: (1) 必须有一条传送数据的通路。 (2) 发起方必须激活通路。 (3) 要告诉网络如何识别接收方。 (4) 发起方要清楚对方是否已开机,且与网络连接正常。 (5) 发起方要清楚对方是否准备好接收和存储文件…

数据结构——栈与队列相关题目

数据结构——栈与队列相关题目232. 用栈实现队列思路225. 用队列实现栈1.两个队列实现栈2.一个队列实现栈20. 有效的括号思路1047. 删除字符串中的所有相邻重复项思路155. 最小栈150. 逆波兰表达式求值思路239. 滑动窗口最大值单调队列347. 前 K 个高频元素思路232. 用栈实现队…

2023版Postman接口测试使用全指南(原来使用 Postman测试API接口如此简单)

下面是一篇详细介绍postman接口测试的文章,如果文章内容不太明白的话, 我建议看看视频版本,更加清洗,更加直观! 最详细的postman接口测试实战教程_哔哩哔哩_bilibili最详细的postman接口测试实战教程共计129条视频&am…

ToBeWritten之ARM汇编基础铺垫

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 转移发布平台通知:将不再在CSDN博客发布新文章,敬…

FPGA解码4line MIPI视频 IMX291/IMX290摄像头采集 提供工程源码和技术支持

目录1、前言2、Xilinx官方主推的MIPI解码方案3、我已有的MIPI解码方案4、纯Vhdl代码解码MIPI5、vivado工程介绍6、上板调试验证7、福利:工程代码的获取1、前言 FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了,MIPI解码难度之高&…

关键词采集软件在SEO优化中的应用与效果

搜索引擎的优化被广泛认为是提高网站排名和在线可见性的重要方法之一。SEO人员需要进行大量的工作以确保网站的内容和标签可以被搜索引擎正确地解析和索引。在这项任务中,使用搜索引擎关键词采集软件可以帮助SEO人员完成许多繁琐的任务并简化他们的工作流程。在本文…

Linux 基础IO(Input与output)学习

进程间通信:讲的是操作系统为用户提供的几种进程间的通信方式概念:进程间通信其实就是多个进程之间进行数据交互问题:进程间通信为什么不能直接进行数据交互,需要使用系统提供的方式?原因:进程之间是具有独…

电动力学问题中的Matlab可视化

电磁场的经典描述 小说一则 电磁场的经典描述就是没有啥玩意量子力学的经典电动力学下对电磁场的描述,以后有空写个科幻小说,写啥呢,就写有天张三遇见了一个外星人,外星人来自这样一个星球,星球上的物质密度特别低,导致外星人的测量会明显的影响物质的运动,外星人不能同时得到…

JNI 调用

简介 JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。 本地代码与 Java 虚拟机…

【ChatGPT】ChatGPT-5 强到什么地步?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 ChatGPT-5 强到什么地步? 技术 深度学习模型的升级 更好的预测能力 自适应学习能力 特点 语言理解能力更强 自我修正和优化 更广泛的应用领域 应用 对话系统 智能写作…

【机器学习】吴恩达机器学习Deeplearning.ai

机器学习已经强大到可以独立成为人工智能的一个子领域。 可以通过对机器编程实现比如执行网络搜索、理解人类语言、通过x光诊断疾病,或制造自动驾驶汽车。 机器学习定义 一般来说,给一个算法学习的机会越多,它的表现就越好。 机器学习的两种…

阿里云5、6代云服务器实例免费升级至第7代(不限次数)

简介: 阿里云推出云服务器实例免费升级至第7代优惠活动,第5、6代云服务器,可享受实例部分免费升级至第7代实例,让你的云服务器拥有更高的安全、存储、网络等性能。 阿里云服务器升级有优惠吗?当然是有的&am…

长安信托:拥抱数字信托,探索多项目管理新路径

长安信托:公司使用 ONES 已经 2 年了。ONES 最大的优势是能够有效串联我司信息科技研发过程中的各个环节,从需求管理到研发任务跟踪,再到测试管理,ONES 能明确地展示出业务部门从需求提出到研发上线的全链路,体现信息科…

免费ChatGPT接入-国内怎么玩chatGPT

免费ChatGPT中文版 OpenAI 的 GPT 模型目前并不提供中文版的免费使用,但是有许多机器学习平台和第三方服务提供商也提供了基于 GPT 技术的中文版模型和 API。下面是一些常见的免费中文版 ChatGPT: Hugging Face:Hugging Face 是一个开源社区…