机组 指令系统

机器指令

机器指令:每一条机器语言的语句

指令系统:全部机器指令的集合

指令的一般格式

指令由操作码和地址码两部分组成

操作码

作用:指明该指令要完成的操作

位数:反映机器的操作种类,即机器允许的指令条数

长度:可以是固定的,可以是变化的

  • 固定长度:操作码集中放在指令字的一个字段内,便于硬件设计,指令译码时间短,广泛用于字长较长的、大中型计算机和超级小型计算机以及 RISC
  • 不固定长度:操作码分散在指令字的不同字段,有效地压缩操作码地平均长度,在字长较短地微型计算机中被广泛使用

n 地址指令的操作码的高位不可以复用 n+1 地址指令的操作码

尽量安排指令使用频度高的指令占用短的操作码,对使用频度低的指令可占用较长的操作码,以缩短经常使用的指令的译码时间

地址码

作用:指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一个指令的地址【地址:主存的地址、寄存器的地址、I/O 设备的地址】

四地址指令

(A1)OP(A2)—>(A3)

若地址字段均指示主存的地址,完成一条四地址指令,需访存四次,取指令一次,取操作数两次,存放结果一次

三地址指令

(A1)OP(A2)—>(A3)

后续指令的地址隐含在程序计数器 PC 中

若地址字段均指示主存的地址,完成一条四地址指令 四次访存

二地址指令

(A1)OP(A2)—>(A1) A1 字段既代表源操作数的地址,又代表存放本次运算结果的地址 四次访存

(A1)OP(A2)—>(A2) A2 字段既代表源操作数的地址,又代表中间结果的存放地址 四次访存

(A1)OP(A2)—>ACC 中间结果暂存于累加器 ACC 中 三次访存(取指、取操作数、取操作数 )

一地址指令

(ACC)OP(A1)—>ACC ACC 既存放参与运算的操作数,又存放运算的中间结果 两次访存(取指、取操作数)

零地址指令

零地址指令在指令中无地址码

空操作 NOP、停机 HLT ……这类指令只有操作码

子程序返回 RET、中断返回 IRET ……这类指令没有地址码,其操作数的地址隐含在堆栈指针 SP 中

注意

硬件资源(PC、ACC……)承担指令字中需指明的地址码,在不改变指令字长的前提下,扩大指令操作数的直接寻址范围,缩短指令字长,减少访存次数

地址字段可用来表示寄存器。当 CPU 中含有多个通用寄存器时,对每个寄存器赋予一个编号,便可指明源操作数和结果存放在的寄存器,地址字段表示寄存器也有三地址、二地址、一地址之分,其共同点是,在指令的执行阶段都不必访问存储器,直接访问寄存器,提高机器运行速度 一次访存(取指)

指令字长

决定因素:操作码的长度、操作数地址的长度和操作数地址的个数

不同机器的指令字长不同

操作

操作数类型

操作类型

寻址方式

定义:指确定本条指令的数据地址以及下一条将要执行的指令地址的方法

与硬件结构紧密相关,直接影响指令格式和指令功能

分类:指令寻址、数据寻址

指令寻址

分类:顺序寻址、跳跃寻址

顺序寻址:通过程序计数器 PC +1,自动形成下一条指令的地址

跳跃寻址:通过转移类指令实现

数据寻址

数据寻址方式种类多,在指令字中必须设一字段指明属于哪一种寻址方式

形式地址 A:指令的地址码字段,通常不表示操作数的真实地址

有效地址 EA:操作数的真实地址,由寻址方式和形式地址共同确定

立即寻址

特点:操作数本身设在指令字内,形式地址 A 不是操作数的地址,而是操作数本身,称为立即数,数据采用补码形式存放

“#”表示立即寻址特征标记

优点:只要取出指令,便可立即获得操作数,指令执行阶段不必再访问存储器

缺点:A 的位数限制了这类指令所表述的立即数的范围

访存:一条指令的执行,不考虑存结果,访存一次(取指令)

直接寻址

特点:指令字中的形式地址 A 是操作数的真实地址 EA,即 EA=A

优点:寻找操作数比较简单,不需要专门计算操作数的地址,在指令执行阶段对主存只访问一次

缺点:A 的位数限制了操作数的寻址范围,必须修改 A 的值,才能修改操作数的地址

访存:一条指令的执行,不考虑存结果,访存两次(取指令,取操作数)

隐含地址

特点:指令字中不明显地给出操作数的地址,其操作数的地址隐含再操作码或某个寄存器中

优点:有利于缩短指令字长

间接寻址

特点:有效地址由形式地址间接提供 EA=(A)

多次间接寻址时,可用存储字的首位标志间接寻址是否结束,当存储字首位为“1”时,标明还需继续访存寻址;当存储字首位为“0”时,标明该存储字即为 EA,存储字的首位不能作为 EA 的组成部分

优点:扩大了操作数的寻址范围【因为 A 的位数通常小于指令字长,存储字长可以与指令字长相等】,便于编制程序

缺点:指令的执行阶段需要访存两次(一次间接寻址)或多次(多次间接寻址),使指令执行时间延长

寄存器寻址

特点:地址码字段直接指出寄存器的编号 EA=Ri ,操作数在由 Ri 所指的寄存器内

优点:因为操作数不在主存中,所以寄存器寻址在指令执行阶段无须访存,减少了执行时间;由于地址字段只需指明寄存器编号,故指令字较短,节省了存储空间

访存:指令执行阶段不需要访存

寄存器间接寻址

特点:Ri 中的内容不是操作数,而是操作数所在主存单元的地址号,即有效地址 EA=(Ri)

访存:比间接寻址少访存一次,指令的执行阶段需要访存

基址寻址

特点:设基址寄存器 BR,其操作数的有效地址 EA 等于指令字中的形式地址与基址寄存器中内容相加,即 EA=A+(BR)

分类:隐式、显式

  • 隐式:在计算机内专门设有一个基址寄存器 BR,使用时用户不必明显指出该基址寄存器,只需由指令的寻址特征位反映出基址寻址即可
  • 显式:在一组通用寄存器里,由用户明确指出哪个寄存器作为基址寄存器,存放基地址

优点:扩大操作数的寻址范围(基址寄存器的位数可以大于形式地址 A 的位数)

基址寻址在多道程序中极为有用,操作系统或管理程序根据主存的使用状况,赋予基址寄存器内一个初始值(基地址),便可将用户程序的逻辑地址转换为主存的物理地址(实际地址),把用户程序安置于主存的某一空间区域

在程序执行过程中,用户不知道自己的程序在主存的哪个空间,用户不可修改基址寄存器的内容,以确保系统安全可靠地运行

变址寻址

特点:有效地址 EA 等于指令字中的形式地址 A 与变址寄存器 IX 的内容相加之和,即 EA=A+(IX)

变址寻址和基址寻址的区别:

  • 基址寻址:主要用于为程序或数据分配存储空间,基址寄存器中的内容通常由操作系统或管理程序确定,在程序的执行过程中其值不可变,而指令字中的 A 是可变的
  • 变址寻址:变址寄存器的内容由用户设定,在程序执行过程中其值可变,而指令字中的 A 是不可变的。变址寻址主要用于处理数组问题,在数组处理过程中,可设定 A 为数组的首地址,不断改变变址寄存器 IX 的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序

变址寻址与其他寻址方式结合:

  • 变址寻址与基址寻址合用:EA=A+(IX)+(BR)
  • 变址寻址与间接寻址合用:形成变址后间址或先间址再变址

相对寻址

特点:有效地址是将程序计数器 PC 的内容(即当前指令的地址)与指令字中的形式地址 A 相加而成,即

EA=(PC)+A

相对寻址常被用于转移类指令,转移后的目标地址与当前指令有一段距离,称为相对位移量,由指令字的形式地址 A 给出,A 称为位移量【A可正可负,通常用补码表示】

若位移量为 8 位,则指令的寻址范围为 (PC)+127~(PC)-128

最大特点:转移地址不固定,可随 PC 值的变化而变

相对寻址可与间接寻址配合使用

堆栈寻址

堆栈寻址要求计算机中设有堆栈

堆栈既可用寄存器组(硬堆栈)实现,也可利用主存的一部分空间作堆栈(软堆栈)

堆栈的运行方式为先进后出和先进先出两种

RISC 技术

RISC 精简指令系统计算机

CISC 复杂指令系统计算机

RISC 主要特点

  1. 选取使用频度较高的一些简单指令以及一些很有用但不复杂的指令,让辅助指令的功能由频度高的简单指令的组合实现 指令系统复杂庞大,各种指令使用频度相差很大
  2. 指令长度固定,指令格式种类少,寻址方式种类少 指令字长不固定,指令格式多,寻址方式多
  3. 只有取数/存数(LOAD/STORE)指令访问存储器,其余指令的操作都在寄存器内完成 可以访存的指令不受限制
  4. CPU 中有多个通用寄存器 CPU中设有专用寄存器
  5. 采用流水线技术,大部分指令在一个时钟周期内完成。采用超标量和超流水线技术,可使每条指令的平均执行时间小于一个时钟周期 绝大多数指令需要多个时钟周期方可执行完毕
  6. 控制器采用组合逻辑控制,不用微程序控制 采用微程序控制器
  7. 采用优化的编译程序 难以用优化编译生成高效的目标代码

紫色是 CISC 的特点

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

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

相关文章

瞅瞅 Opencv:扫描图像

扫描图像查询表 一、概述二、图像矩阵如何存储在内存中?三、高效的方式四、迭代器(安全)方法五、带引用返回的动态地址计算六、核心功能七、性能差异 一、概述 让我们考虑一种简单的色彩还原方法。通过使用unsigned char C和c类型进行矩阵项存储,一个像素通道可以…

音视频技术开发周刊 | 318

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 日程揭晓!速览深圳站大会专题议程详解 LiveVideoStackCon 2023 音视频技术大会深圳站,保持着往届强大的讲师阵容以及高水准的演讲质量。两天的参会…

git commit规范提交

Git每次提交代码时,都要写Commit Message(提交说明),通常情况下,Commit Message应该清晰明了,说明本次提交的目的和具体操作等。然而笔者工作多年来发现,有些公司对Commit Message没有明确的要求…

wpf Grid布局详解 `Auto` 和 `*` 是两种常见的设置方式 行或列占多个单元格,有点像excel里的合并单元格。使其余的列平均分配剩余的空间

比如只有行的界面 <Window x:Class"GenerateTokenApp.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/exp…

SpringCloudAlibaba——Sentinel

Sentinel也就是我们之前的Hystrix&#xff0c;而且比Hystrix功能更加的强大。Sentinel是分布式系统的流量防卫兵&#xff0c;以流量为切入点&#xff0c;从流量控制、流量路由、熔断降级等多个维度保护服务的稳定性。 Sentinel采用的是懒加载&#xff0c;这个接口被访问一次&a…

企业级低代码开发,科技赋能让企业具备“驾驭软件的能力”

科技作为第一生产力&#xff0c;其强大的影响力在各个领域中都有所体现。数字技术&#xff0c;作为科技领域中的一股重要力量&#xff0c;正在对传统的商业模式进行深度的变革&#xff0c;为各行业注入新的生命力。随着数字技术的不断发展和应用&#xff0c;企业数字化转型的趋…

SpringBoot自动装配 Spring相关 常用设计模式 双亲委派 MongoDB Redis 适配器模式与策略模式

SpringBoot自动装配 阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 Spring相关 阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 常用设计模式 双亲委派 Java虚拟机定义了三个主要的类加载器: 1、启动类加载器 2、扩展类加载器 …

《网络协议》02. 物理层 · 数据链路层 · 网络层

title: 《网络协议》02. 物理层 数据链路层 网络层 date: 2022-08-31 22:26:48 updated: 2023-11-08 06:58:52 categories: 学习记录&#xff1a;网络协议 excerpt: 物理层&#xff08;数据通信模型&#xff0c;信道&#xff09;、数据链路层&#xff08;封装成帧&#xff0c…

CSDN中: Markdown编辑器使用说明

Markdown编辑器使用说明 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一…

Android UI 开发·界面布局开发·案例分析

目录 ​编辑 1. 线性布局&#xff08;LinearLayout&#xff09; 2. 相对布局&#xff08;RelativeLayout&#xff09; 3. 表格布局&#xff08;TableLayout&#xff09; 4. 帧布局&#xff08;FrameLayout&#xff09; 5. 网格布局&#xff08;GridLayout&#xff0…

05【保姆级】-GO语言的标识符

之前我学过C、Java、Python语言时总结的经验&#xff1a; 先建立整体框架&#xff0c;然后再去抠细节。先Know how&#xff0c;然后know why。先做出来&#xff0c;然后再去一点点研究&#xff0c;才会事半功倍。适当的囫囵吞枣。因为死抠某个知识点很浪费时间的。对于GO语言&a…

Android 10.0 系统默认打开OEM解锁开关功能实现

1.前言 在10.0的系统定制中,在9.0系统以后为了设备的安装,系统开始启用oem机制,所以在adb push文件就需要先oem解锁,然后才可以 进行相关操作,所以就需要默认打开oem解锁的开关,来方便oem解锁功能的实现 如图: 2.系统默认打开OEM解锁开关功能实现的核心类 packages\ap…

初步了解 RabbitMQ

目录 ​编辑一、MQ 概述 1、MQ 的简介 2、MQ 的用途 &#xff08;1&#xff09;限流削峰 &#xff08;2&#xff09;异步解耦 (3)数据收集 二、RabbitMQ 概述 1、RabbitMQ 简介 2、四大核心概念 3、RabbitMQ 的核心部分 ​编辑 4、名词解释&#xff1a; 三、Hello …

ESP32 C3 smartconfig一键配网报错

AP配网 在调试我的esp32c3的智能配网过程中&#xff0c;发现ap配网使用云智能App是可以正常配置的。 切记用户如果在menu菜单里使能AP配网&#xff0c;默认SSID名字为adh_PK值_MAC后6位。用户可以修改这个apssid的键值&#xff0c;但是要使用云智能app则这个名字的开头必须为ad…

香港金融科技周VERTU CSO Sophie谈Web3.0的下一个风口 手机虚拟货币移动支付

10月31日&#xff0c;香港金融科技周正式拉开帷幕。这项香港金融科技界地年度盛事今年已经踏入了第八届&#xff0c;本届活动吸引超过数百位金融科技专业人士、创业者和行业领袖现场参与&#xff0c;线上参与观众超过10万人次。 在金融科技周的圆桌会议上&#xff0c;VERTU首席…

Java-继承

1 继承 1.1 为什么需要继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;但是现实世界错综复杂&#xff0c;事物之间可能会存在一些关联&#xff0c;那在设计程序是就需要考虑。 以下…

Vulnhub靶场之Funbox

正如该靶场的描述所说&#xff0c;它对初学者来说非常简单。 项目地址&#xff1a;Funbox: Scriptkiddie ~ VulnHub 所需工具&#xff1a; KaliLinux即可。 0x00 信息收集 打开虚拟机后使用nmap扫描一下网段存活&#xff0c;这里我给的虚拟机的范围是100-253,其中kali的IP是10…

Git 安全警告修复手册:解决 `fatal: detected dubious ownership in repository at ` 问题 ️

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

postman接口测试

postman使用 开发中经常用postman来测试接口&#xff0c;一个简单的注册接口用postman测试&#xff1a; 接口正常工作只是最基本的要求&#xff0c;经常要评估接口性能&#xff0c;进行压力测试。 postman进行简单压力测试 下面是压测数据源&#xff0c;支持json和csv两个格式…

论文阅读——变化检测

Viewpoint Integration and Registration with Vision Language Foundation Model for Image Change Understanding 只有fused adapter image encoder, viewpoint registration flow, semantic emphasizing module, 和 fully connected layer 训练&#xff0c;其他参数冻结。 F…