7-指令系统

README】

1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐;


机器指令:

  • CPU能够识别并且执行的操作命令;有可以理解为不同cpu,在生产时预设了一组或一簇指令;

指令集:

  • cpu能够执行的所有机器指令的集合;指令集也是软硬件的交界面
  • 软件通过指令系统告诉硬件做什么操作;硬件通过指令系统执行操作并返回操作结果;

【1】机器指令

 指令字长: 一条指令的长度有多少位

【1.1】指令的一般格式

操作码字段地址码字段

【1.1.1】操作码

操作码: 指出机器做什么操作?此外还有些操作码指出机器应该对什么类型的数据进行操作;
长度固定: 为了译码方便,译码器电路简单;

3)扩展操作码技术

3.1)为了支持操作码的长度可变,我们要采用扩展操作码技术来扩展操作码长度

  • OP:操作码部分;
  • A1,A2,A3:地址码;

假设操作码和地址码都是4位;所以指令集最多15条指令; 无法满足计算机进行复杂操作的需求;

3.2)总结:

  • 三地址指令:4位操作码,无标识,其中 15~12位是操作码;指令集最多15条指令;
  • 二地址指令:8位操作码,最高位4个1为标识,其中 11~8位是操作码;指令集最多15条指令;
  • 一地址指令:12位操作码,最高位8个1为标识,其中7~4操作码;指令集最多15条指令;
  • 零地址指令:16位操作码,最高位12个1为标识,其中3~0是操作码;指令集最多15条指令;

三地址指令操作码,每减少一种最多可多构成 2^4 种二地址指令;
如三地址指令的高4位是 1110,而不是1111;就可以多产生2^4种二地址指令;

3.3)问题1:哪些指令用长操作码,哪些用短操作码指令呢?

  • 高频使用的指令,用短操作码;
  • 低频使用的指令,用长操作码;

【1.1.2】地址码

地址码指的是内存地址;

1)四地址指令:

  • 它的寻址范围是2^6=64;内存寻址范围太小了,只能寻址到64个内存单元;

那如何增加指令寻址范围?

  • 移除A4地址:A4存储了下一条指令地址; 而下一条指令地址存储在PC寄存器中,而不是当前指令中;这样就形成了三地址指令

2)三地址的指令:

  • 它的寻址范围是 2^8=256;照样很小;继续改进;

3)二地址指令:

  • 移除A3地址码,用A1或A2存储计算结果;所以地址码就只有2个;寻址范围为 2^12=4k个存内存单元; 还是很小 ;

4)一地址指令

  • 用ACC累加寄存器代替A1或A2;所以移除A2,指令中可以只保留一个数的地址;另一个操作数保存在ACC寄存器;
  • 寻址范围:2^24=16M; 寻址范围大大增加 ;
  • (ACC可以使用隐含寻址的方式)

5)零地址:无地址码;

  • 如,计算ACC中的操作数是否等于0 ;
  • 如,add指令计算栈顶的两个操作数的和,并将和保存在栈顶;就不需要地址码;

【1.2】 指令字长

操作码:

  • 指出机器做什么操作?此外还有些操作码指出机器应该对什么类型的数据进行操作;

长度固定:

  • 为了译码方便,译码器电路简单;

【小结】指令操作码与地址码

1)用一些硬件资源代替指令字中的地址码:

  • 如ACC累加寄存器(隐含寻址)存储操作数,这样指令中就可以只存储一个操作数的地址;而无需存储两个操作数的地址;

2)当指令的地址字段为寄存器时

  • 三地址, OP R1 R2 R3 ; R1 R2 R3地址指的是寄存器的地址; 这样就直接访问寄存器,而不是访问内存;


【2】操作数类型和操作种类

操作数:指的是指令要处理的数据;
操作数的类型:内存地址,或数字,或字符,或逻辑数;

1)数据在存储器中的两种存放方式:

  • 大端方式:(内存字地址就是数据高字节所在地址)数据高字节放在内存高地址,数据低字节放在内存低地址;
  • 小端方式:(内存字地址就是数据低字节所在地址)数据低字节放在高地址,高字节放在低地址;

2)字节编址

2.1)方法1:从任意位置开始存储;

存储字长64位(8字节)

  • 内存的数据位(MDR寄存器)是64位,每次访存可以存取64bit的数据;

机器字长32位(4字节)

  • 寄存器的空间是32位,每次只能传输4字节数据;

机器字长:CPU一次能处理数据的位数,通常与CPU的寄存器位数有关。

存储字长:存储器中一个存储单元(存储地址)所存储的二进制代码的位数,即cpu中的MDR(数据寄存器)的位数。

指令字长:计算机指令字的位数。

数据字长:计算机数据存储所占用的位数。

上述定义的字长都必须是字节的整数倍;

 上述缺点有1个例子:一个数据跨了2个存储字进行存储;比如各占半个;这个时候就需要2个访存,每次取半个存储字;

2.2)方法2:从一个存储字的起始位置(每个存储字或机器字占4字节)开始访问;

缺点:

  • 浪费存储空间;

问题:有没有一种方式可以减少存储空间浪费,又可以保证任何一种类型的数据(小于存储字长)在一个存取周期当中,都可以进行访问?

2.3)方法3:边界对准方式(从内存地址的整数倍位置开始访问)

以机器字长32位=4个字节为例;

 数据存放的起始地址是数据长度(如8位或16位)的整数倍


【2.3】 操作类型

 

 

 


【3】 寻址方式

参见 指令寻址方式与数据寻址方式_PacosonSWJTU的博客-CSDN博客

 


【4】 指令格式举例

指令集举例:

【4.1】IBM360 CPU的指令格式

IBM360 有5种指令格式:

  • 第1种地址格式,RR格式:二地址,即2个寄存器参加操作,结果保存在1个寄存器中;操作码的长度是8位; 指令长度16位;
  • 第2种地址格式, RX格式: 二地址,即寄存器与存储器,其中R1是寄存器,X是变址寄存器,B是基址寄存器,D是偏移地址;采用基址+变址的方式进行寻址;
  • 第3种地址格式,RS格式:三地址,即寄存器与存储器间的操作;如寄存器和内存间进行成组的数据传送,如把寄存器R1到R3(包括R1 R3)的数据成组的传送到内存中;内存的起始地址采用基址寻址的方式来做; B是基址寄存器,D是偏移地址;
  • 第4种地址格式,SI格式:二地址,即立即数与内存操作数进行操作;
  • 第5种地址格式,SS格式:二地址,即内存操作数与内存操作数进行操作;如内存中进行数据传输; B1,D1分别是源地址基址和偏移量;B2,D2是目的地址基址和偏移量;含义是把起始地址为B1+D1,长度为L的内存块数据转存到以B2+D2为起始地址的内存块中;

补充:

  • S=Storage=内存;
  • R=Resiter=寄存器;
  • X=变址寄存器;
  • B=基址寄存器;
  • D=偏移量;

【4.2】Intel 8086 CPU的指令格式

 


【5】RISC技术

RISC: 精简指令集计算机;
CISC: 复杂指令集计算机;

RISC技术作用: 把20%的高频简单指令组合形成80%的低频指令;

 

操作码都是寄存器对内存的传输;

 

 

 

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

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

相关文章

WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例

最近出于工作需要,了解了一下微服务架构(Microservice Architecture,MSA)。我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架构的应用程序案例&a…

常用的数据交换格式有哪些_高程数据格式介绍

高程数据格式介绍1 概述目前业内常用的地形数据格式有img,tif,grp及dem,其中dem在地形表达中能力最强,效果最好,本文围绕dem的数据格式进行介绍。2 DEM简介数字高程模型(Digital Elevation Model),简称DEM,是通过有限的地形高程数…

switch case 支持的 6 种数据类型

转载自 switch case 支持的 6 种数据类型那么今天就讲一下 Java 中的 switch case 语句吧,有忘记的同学正好可以温习一下。 Java 中 switch case 语句用来判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。 语法格式如下: switc…

1-操作系统启动前的工作

【README】 1.本文总结自B站《操作系统(哈工大李治军老师)》的视频讲解,非常棒,墙裂推荐; 【1】计算机上电 1) 问题: 这神秘的黑色背后发生了什么 ?计算机是怎么工作的&#x…

傅里叶变换公式_理解1维傅里叶变换

上个学期,学习了信号与系统。虽然知道了傅里叶变换的作用以及如何使用。但是对于它的本质,也就是FT是如何探测到频率的尚有疑惑。而恰好在知乎上发现了一些很好的回答。故将这些回答整理在这。感性理解1维FT知友Heinrich写的傅里叶分析之掐死教程&#x…

ASP.NET Core的配置(3): 将配置绑定为对象

出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的配置绑定为一个对象,我们将后者称为Options对象。我们在《ASP.NET Core的配置(1)&…

11 个简练的 Java 性能调优技巧

转载自 11 个简练的 Java 性能调优技巧想要让你的项目一直高性能运作吗?以下有一些技巧你可以拿去消除缓存瓶颈,还有一些其他的性能调优建议。 大多数开发者认为性能优化是一个复杂的话题,它需要大量的工作经验和相关知识理论。好吧&#xff…

pre1-flink理论-批处理与流处理+简单示例

【README】 1.本文包含了 批处理与流处理的代码示例; 批处理:把数据 攒在一起(或攒一段时间或攒一定内存大小),然后再处理,这叫批处理;流处理:数据每来一个就处理一个;…

python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式

本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式。分享给大家供大家参考,具体如下:表单介绍表单是HTML页面中负责数据采集功能的部件。由表单标签,表单域和表单按钮组成。通过表单,将用户输入的数据提交给服务器&am…

高级 | Java中获取类名的3种方法

转载自 高级 | Java中获取类名的3种方法获取类名的方法 Java 中获取类名的方式主要有以下三种。 getName() 返回的是虚拟机里面的class的类名表现形式。 getCanonicalName() 返回的是更容易理解的类名表示。 getSimpleName() 返回的是类的简称。 都有什么区别? 通过…

Asp.net 面向接口可扩展框架之核心容器

新框架的容器部分终于调通了!容器实在太重要了,所以有用了一个名词叫“核心容器”。 容器为什么那么重要呢?这个有必要好好说道说道。 1、首先我们从框架名称面向接口编程说起,什么是面向接口编程?(这个度娘回答一下) 解读一下:类是个体的定义…

pre2-flink单机部署与job提交

【README】 本文记录了flink单机部署,以及flink job2种提交方式; 【1】flink 单机部署 step1)下载flink 包; Apache Flink: Stateful Computations over Data Streamshttps://flink.apache.org/ step2)解压 tar -z…

到底什么是跨域?附解决方案

转载自 到底什么是跨域?附解决方案什么是跨域 要了解跨域,先要说说同源策略。 同源策略是由 Netscape 公司提出的一个著名的安全策略,所有支持 JavaScript 的浏览器都会使用这个策略。 所谓同源是指,域名,协议&#xf…

vue 字典_【开源】基于Vue的前端组件库HeyUI

说道vue组件库,目前主流的基本就是iview和element。今天又发现一个很不错的。HeyUI。组件也很丰富,入门比较简单。反正开源框架我们有不嫌多,多多益善啊。感兴趣的可以看看。关于HeyUIHeyUI 是一套基于 Vue2.0 的开源 UI 组件库,主…

(译)java8-流定义

【README】 本文翻译自 Stream In Java - GeeksforGeeks , 主要介绍了java8流; 【1】流 1)流定义:流是支持各种方法的对象序列(一系列对象),这些方法可以流水线化调用以产生期望结果&#xff…

基于CefSharp构建基于Chromium的应用程序

chromium是google chrome浏览器所采用的内核,最开始由苹果的webkit发展而出,由于webkit在发展上存在分歧,而google希望在开发上有更大的自由 度,2013年google决定自己开发webcore的分支,叫做Blink引擎,而后…

最新后端架构师技术图谱

转载自 最新后端架构师技术图谱深呼吸,慢慢学,技术长路漫漫… 数据结构二叉树完全二叉树平衡二叉树二叉查找树(BST)红黑树B-,B,B*树LSM 树队列集合链表、数组字典、关联数组栈树BitSet常用算法KPM 算法选择…

ansible脚本-Playbook(一)

Playbook组成部分: task 任务:包含目标主机上执行的操作,使用模块定义这些操作,每个任务都是一个模块的调用Variables变量:存储和传递数据,变量可以自定义,可以在playbook当中定义为全局变量&a…

三级pc技术_第十九周PC、笔电、数码周边新品汇总:AMD英特尔激战正酣

【dogkeji-科技犬】各位网友周末好,又到了2020年第十九周的PC、笔电、数码周边新品发布汇总时刻(2020年5月4日至2020年5月9日),那么本周有那些PC、笔电、数码周边新品发布呢?通过科技犬的汇总我们来一起回顾一下吧。AM…

【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端

在《WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例》文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Framework 4.6.1)开发的DDD/CQRS/微服务架构的案例项目:WeText。文章发出后反响很好…