查缺补漏----扩展操作码

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

举个例子:

若指令长度为16位,并且每个地址码占4位,若设置三地址指令,则地址码总共占3*4=12位 ,剩余4位来表示操作码,4位基本操作码若全部用于三地址指令,则有16(2^4)条。但至少须将1111留作扩展操作码之用,即三地址指令为15条


1111 1111留作扩展操作码之用,二地址指令为15条;CPU取得一条指令时,会直接读入16位,CPU根据开头4位是否为全1,判断是三地址指令或二地址指令,若开头4位是1111,后4位不为全1,则为二地址指令

同理,后4位为全1保留下来,作为一地址指令,一地址指令为15条,若前8位全为1,则为一地址指令

最后4位为0000~1111,前面12位全为1,因为已经不需要拓展了,所以零地址指令为16条

当然还有其他扩展操作码设计方法,这里只是其中一种。

所以在设计扩展操作码指令格式时,必须注意以下两点:

(1) 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。

例如上面例子,二地址指令操作码为前8位,为长码,三地址指令的操作码为前4位,为短码,不允许短码是长码的前缀的含义为:这4位操作码不能为全1


(2)各指令的操作码一定不能重复。

通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。

再举一例扩展操作码的示例:

设指令字长固定为16位,若需要15条三地址指令:对于三地址指令而言,需要12位作为地址码,只用前4位(16-12=4)表示操作码,0000~1110表示操作码,1111表示扩展操作码:

需要12条二地址指令,则前4位为1111,二地址指令需要8位地址码,所以只能由中间4位表示操作码:0000(0)~1011(11)总共12条。我们会发现,剩余1100,1101,1110,1111没有对应的操作码,这些位都是以“11”开头的,所以如果开头为1111 11则表示超出了二地址指令的范围。

一地址指令只需要保留最后的4位作为地址码。需要62条一地址指令,则可以用剩下的6位,即黑框部分表示不同的一地址指令:000000(0)~111101(61)。同理,最大的能表示一地址指令的数为:1111 1111 1101 xxxx,如果超出了这一范围,即1111 1111 1110 xxxx,前面11位都为“1”,那么就超出了一地址指令的合法范围。

需要32条零地址指令,剩下的5位刚好能表示00000(0)~11111(31)

按照上面的扩展操作码的设计,若CPU访问的指令最前4位不为全1,则说明这是一条三地址指令

若前4位为全1,再判断紧接着后面2位是否为1,若不为全1,则为二地址指令,若为全1,那么会继续检测后面紧跟的5位是否全为1,若不是,则为一地址指令,若是,则为零地址指令。

对扩展操作码而言,若地址长度为n,上一层留出m种状态,下一层可扩展出 m*2^n 种状态

例如,对于三地址指令,需要用前4位表示操作码,表示2^4=16种状态,留出16-15=1种状态作为下一层的扩展。

对于下一层的二地址指令而言,可以用1111+紧接着后4位的信息,表示这是哪一种状态的指令,2^4=16,而上一层留下的扩展状态为1种,所以总共能表示的状态为1*2^4=16种,而只需要12条二地址指令,所以16-12=4种状态会留到下一层

对于下一层的一地址指令而言,就有4*2^4=64种状态,所以会留出64-62=2种状态到下一层

对于零地址指令而言,就有2*2^4=32种状态

对于留出xx种状态的理解:

每留出1种状态给下一层指令,下一层指令就会多出2^n条指令。

一地址指令给零地址指令留了一种状态,那么就是2^6=64种。

定长操作码和扩展操作码的对比:

定长操作码:在指令字的最高位部分分配固定的若干位(定长)表示操作码。

一般n位操作码字段的指令系统最大能够表示条指令。

优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利;

缺:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限


扩展操作码(不定长操作码):全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。

最常见的变长操作码方法是扩展操作码,操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度 的操作码,从而在满足需要的前提下,有效地缩短指令字长

优:在指令字长有限的前提下仍保持比较丰富的指令种类;

缺:增加了指令译码和分析的难度,使控制器的设计复杂化。

例题1:

(1)操作码固定:操作码位数为4位,所以可以有2^4=16条指令

16=一地址+二地址+零地址,所以二地址指令有16-M-N条。

(2)二地址指令至少给一地址指令留1个扩展窗口:所以二地址指令:2^4-1=15条。

(3)二地址指令操作码4位,有2^4种编码,题目说,二地址指令有p条,则留出2^4-p种编码用于一地址指令的扩展。

所以一地址指令有2^6(2^4-p)种编码。

设留出n种用于零地址的扩展,则2^6*n=Q,则n=Q/2^6

所以一地址最多有:2^6(2^4-p)-Q/2^6

y例题2:

设计某指令系统时,假设采用 16 位定长指令字格式,操作码使用扩展编码方式,地址码为6位,包含零地址,一地址和二地址3种格式的指令,若二地址指令有12条,一地址指令有254条,则零地址指令的条数最多为()

A.0        B.2        C.64        D.128

答案:D

先分析一下:

二地址指令占12(2*6=12)位地址空间,4位用来表示操作码,二地址指令有12条,那么剩余16-12=4条操作码扩展给一地址指令。

0000~1011  xxxx xxxx xxxx

一地址指令格式为,:

11xx xxxx xxxx xxxx,其中低6位为地址码,一地址指令有254条,那么一地址指令可表示的范围:

1100 0000 00xx xxxx~1111 1111 01xx xxxx

其中,00 0000 00~11 1111 01表示0~253,总共254条指令。剩余256-254=2条指令扩展给零地址指令。

1111 1111 1xxx xxxx,前9位固定,因为超过1111 1111 01xx xxxx,就是零地址能表示的范围了。剩余位为16-9=7。所以零地址指令的条数最多为2^7=128条。

当然可以直接用刚刚讲的公式:

二地址指令有12条,则剩余16-12=4种操作码给一地址指令,一地址指令有254条,4*2^6-254=2种操作码给零地址指令,所以零地址指令一共有2*2^6=128条。

还可以这么想:

地址码为6位,一条二地址指令会占用2^6条一地址指令的空间,一条一地址指令会占用2^6条零地址指令的空间。若全都是零地址指令,则最多有2^16条,减去一地址指令和二地址指令所占用的零地址指令空间,即2^16-254x2^6-12x2^6x2^6=128。

例题3:

某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条、二地址指令107条,每个地址字段为6位,则指令字长少应该是()

A.24位        B.26位        C.28位        D.32位

分析:三地址指令有29条,需要至少5位操作码,最后会剩余:2^5=32 ,32-29=3种操作码扩展给二地址指令,而二地址额外多了6位操作码,所以数量最大达到3*2^6=192条。所以指令字长最少为5+6+12=23位。

又因为计算机按字节编址,需要8的倍数,所以指令字长至少为24位。

答案:Ass

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

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

相关文章

AI 编译器学习笔记之七四 -- cann接口使用

1、安装昇腾依赖 # CANN发布件地址 https://cmc.rnd.huawei.com/cmcversion/index/releaseView?deltaId10274626629404288&isSelectSoftware&url_datarun Ascend-cann-toolkit_8.0.T15_linux-aarch64.run Ascend-cann-nnal_8.0.T15_linux-aarch64.run Ascend-cann-ker…

【机器学习】并行计算(parallel computation)Part2

Asynchronous Parallel Gradient Descent Using Parameter Server 用Parameter Server实现异步并行梯度下降 Parameter Server这种编程模型可以实现异步并行梯度下降,架构采用的是Client-Server,通信方式是Message-passing,同步方式是异步的…

阿里 C++面试,算法题没做出来,,,

我本人是非科班学 C 后端和嵌入式的。在我面试的过程中,竟然得到了阿里​ C 研发工程师的面试机会。因为,阿里主要是用 Java 比较多,C 的岗位比较少​,所以感觉这个机会还是挺难得的。 阿里 C 研发工程师面试考了我一道类似于快速…

2023年4月自考《数据库系统原理》04735试题

目录 一:选择题 二:填空题 三:设计题 四:简答题 五:综合题 一:选择题 1.在数据库系统中,专门用户建立和管理数据的软件是 (书中)P28页 A.DBS B.DB C.DBA D.DBMS 2.通常所说的数据库系统容不包括 (书中)P29页 A.应用程序 B.数据库管理员 C.用户 D.网络环境 …

MD5消息摘要算法学习

MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,它用于生成128位的哈希值(也称为消息摘要)。MD5主要用于确保信息的完整性,即可以通过对数据生成的哈希值来验证数据是否被篡改。尽管MD5在过去被…

C嘎嘎入门篇:类和对象(3)

前言: 小编在写完了类和对象的1,2以后,下面紧接着开始类和对象3的学习,这一部分的知识是很重要的,各位读者朋友一定要好好的理解这篇文章,现在,代码时刻到。 目录 1.再探构造函数 前瞻 1.1.再探构造函数的特…

Python 基础的类型和操作符

Python特点 易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。易于阅读:Python代码定义的更清晰。易于维护:Python的成功在于它的源代码是相当容易维护的。一个广泛的…

24.4 基于consul服务发现模式

本节重点介绍 : consul 安装consul go代码注册服务,注销服务,获取服务node_exporter改造为consul服务发现在数量比较大时,在注册服务的时候,关闭check,可以降低consul的压力 consul 安装 准备工作 # 下载consul wge…

软考24.10.15每日一练打卡 - 错题笔记

题目来源:https://ruankaodaren.com/ ##1. M公司将其开发的某软件产品注册商标为S,为确保公司在市场竞争中占据地位,M公司对员工进行了保密约束,此情形下,该公司不享有( 商标权)。 本题题干中提…

打造卓越APP体验:13款界面设计软件推荐

你知道如何选择正确的UI设计软件吗?你知道设计美观的用户界面,及带来良好用户体验的APP,需要什么界面设计软件吗?基于APP界面的功能不同,选择的APP界面设计软件也会有所不同。然而,并不是要把所有APP界面设…

低代码策略量化平台更新|大模型agents生态的一些思考

原创内容第680篇,专注量化投资、个人成长与财富自由。 用户判断星球会员后,会获得10个积分: 当其他用户发布策略,设置为下载需要积分时: 下载策略会扣除相应的积分,扣除的积分属于策略所有者。 策略运行结…

谈谈我的理解:引用计数 vs 可达性分析

前言 在学习垃圾回收机制时,首先需要了解如何判定哪些对象需要被回收,以及如何实现垃圾回收。本文将分享作者对两种常见的垃圾回收判断机制——引用计数法和可达性分析法——的理解与思考,旨在帮助读者更深入地理解这两种机制。 一、引用计数…

结合seata和2PC,简单聊聊seata源码

当前代码分析基于seata1.6.1 整体描述 整体代码流程可以描述为 TM开启全局事务,会调用TC来获取XID。TC在接收到通知后,会生成XID,然后会将当前全局事务保存到global_table表中,并且返回XID。在获取到XID后,会执行业务…

conda创建的新环境不干净!一定要注意!

总是出现明明是不同的环境,但是总是出现包交叉混用的问题,导致跑很多模型总是出现改了这个环境的包,那个环境又用不了了。就像下面这样,明明激活的是pyskl,安装mediapipe包显示在thwircamera中索引到就显示Requirement…

postgresql 安装

一、下载 PostgreSQL: File Browser 下载地址 PostgreSQL: File Browser 上传到服务器,并解压 二、安装依赖 yum install -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel 创建postgresql 和目录 useradd …

『Mysql集群』Mysql高可用集群之主从复制 (一)

Mysql主从复制模式 主从复制有一主一从、主主复制、一主多从、多主一从等多种模式. 我们可以根据它们的优缺点选择适合自身企业情况的主从复制模式进行搭建 . 一主一从 主主复制 (互为主从模式): 实现Mysql多活部署 一主多从: 提高整个集群的读能力 多主一从: 提高整个集群的…

一、定时器的时钟来源

计数器的时钟选择8个时钟源,可以分成4类: 一、来自RCC的内部时钟TIMx CLK 二、芯片内部其他定时器的触发输入ITR 使用某一个定时器作为另外一个定时器的分频 ITR1、ITR2、ITR3和ITR4 三、外部时钟源模式1: 外部捕获引脚上的边沿信号 TI1FP…

【jeston】torch相关环境安装

参考:玩转NVIDIA Jetson (25)— jetson 安装pytorch和torchvision 我的jeston信息: torch install 安装环境 conda create -n your_env python3.8 conda activate your_envpytorch_for_jeston 安装.whl文件 验证&#xff1…

循环神经网络(Recurrent Neural Network,RNN)

简介:个人学习分享,如有错误,欢迎批评指正。 一. 核心理念 循环神经网络(Recurrent Neural Network,RNN)是一类专门用于处理序列数据的神经网络架构。其独特之处在于能够处理输入序列中元素的时序关系&…

STM32定时器

目录 STM32定时器概述 STM32基本定时器 基本定时器的功能 STM32基本定时器的寄存器 STM32通用定时器 STM32定时器HAL库函数 STM32定时器概述 从本质上讲定时器就是“数字电路”课程中学过的计数器(Counter),它像“闹钟”一样忠实地为处…