【硬件基础知识】指令集框架(ISA:Instruction Set Architecture)
指令框架(ISA:Instruction Set Architecture)
定义
指令集架构(英语:Instruction Set Architecture,缩写为ISA),又称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中断,异常处理以及外部I/O。指令集架构包含一系列的opcode即操作码(机器语言),以及由特定处理器执行的基本命令。-------- 中文维基百科
个人解说:这个类似与一个标准,和ECMA-335 协议类似.根据这个协议 做出.net framework\mono。根据isa这个规范制作成两个子集 cisc和risc。而后的x86等是这两个子集的具体实现。
指令系统主要分三大内容
- 想学习指令,肯定要先学会基础的指令格式,知道一条指令包括了什么部分
- 知道什么是指令之后,我们就要学习指令的执行流程,它是怎么寻址的?这里包括指令如何找到下一步操作寻址(指令寻址),以及指令如何找到操作对象寻址(地址寻址)两个部分。
- 学会上面两个部分,我们就可以学习如何设计一条指令,这里包括CISC和RISC两种方式
指令的格式
从最基本的结构上来说:一条指令通常要包括操作码字段和地址码字段
两部分:
- 操作码字段告诉用户做什么操作?
- 地址码
- 告诉用户对谁操作?
这是基本的指令结构,而一条指令更具体的样子应该是这样的:
这里地址码分为了4部分:其中,A1和A2地址代表的是要操作的对象在哪;A3代表运算存放的结果在哪;A4表示这条指令执行要执行的下一条指令在哪?
用符号可以记录为: (A1)OP(A2)→A3,A4=下一条将要执行指令的地址
举个具体的例子来体会一下指令的存放:
现在我们给出一段指令
这是一条指令
这条指令字长32位:其中操作码(OP) :8位,地址码(A):共4个,每个6位
那么指令访问我们的内存其实就是这样子的:
- 首先000000这个位置上存放着操作指令(000420C4H)
000420C4H就是【上方绿色指令】的十六进制
- A1,A2上存着两串数(12344321H)和(43211234H)
他们在000000指令的执行下,要进行加法操作,将结果填入到A3中 - 所以A3中的数据(555555555H)就是A1(12344321H)+A2(43211234H)的和
- 最后再去A4读取出指令(22343234H),开始下一轮工作
放在一起
我们可以在这个图中看到内存中既有操作码,又有地址码,这样把他们放在一起其实并不好,我们可以优化他们,把操作码放一起,地址码放一块。
分组存放
这样看起来是不是清晰多了呢?而且这样最大的好处是!!!:
将操作码放一块,我们可以让程序执行完一步就自动执行下一句指令,这样我们的指令就不用存放下一条指令的位置了。这样访存的次数少了一次,速度也会快点。
如无例外(指的是跳转指令),执行完就直接下一条继续就好啦,也就是顺序执行。
地址码
通过上面将操作码和地址码分开的操作,通过程序计数器使操作码+1顺序执行,我们的指令少了6位的A4,这6位地址可不能浪费了呀,我们可以将它重新设计,变成这样:
四地址指令变三地址指令
地址码变成了8位了,这样的好处是:原先每一条地址码最多只能寻址到2的6次方也就是64个地址,而现在地址搜寻的范围变成了2的8次方也就是256个地址,这样寻址的范围就大大增加了呀!
按着这个思想,我们又对某些指令进行了优化,比如:
对一些两个数进行操作完后结果覆盖到原来的地址上的数,(比如将A1和A2相加,结果返回到A1)我们可以舍去结果位:
二地址指令
这样寻址范围又广了不少:2的12次方=4K
再极端点,对一些进行自身操作的数(比如自增
、自减、取反)我们可以舍去另个操作数和结果位:
一地址指令
最后一种,就是连操作码都全部省去了:
零地址指令
这就是地址码的设计方案总结一下:
- 我们可以理解,不同的操作,所需要的地址码块数是不同的,所以我们应该灵活安排
- 即使我们减少了地址码的分块,但是整体指令的长度一直是32位
这种方式叫定长指令结构。与之相反的就是指令长度不固定的变长指令结构。
操作码
刚才我们分析了地址码的设计方式,现在学一下操作码的设计:
在上面的例子中,我们的操作码都是8位,是定长操作码,能发出2的8次方 64条操作。
同样操作码也能设计为不定长的方式,这种操作码叫做拓展操作码:
怎么拓展呢?我们以一个字长为16位的指令为例:
如果我们将前面的4位全部用作操作码,则一共能发出0000~1111 16种操作,现在我们稍微设计一下——舍弃一条操作(1111),只发出0000~1110 15种操作
将1111留着作为标记,如果是1111开头的,则代表A1也作操作码
这样就完成了拓展了。
以此类推:
将1111 1111留着作为标记,如果是1111 1111开头的,则代表A2也作操作码
全为操作码,没有地址码--->零地址指令
总结:
- 通常情况下,对使用频率较高的指令,分配较短的操作码
对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。 - 各指令的操作码一定不能重复
- 拓展操作码不一定只能有一条也就是说不一定只有1111作拓展操作码,对应15条地址,也可以1110、1111都做拓展码,留14条地址指令也行;甚至不要14条地址指令,只要13条、12条也可以,要根据题目本身设计。但是无论如何设计,它都符合一个规律:
- 操作码有定长操作码也有拓展操作码,他们各有优缺点:
因此,定长操作码一般用在指令长度比较长的机器上,就不用那么拘束调来调去啦直接固定长度简单除暴,拓展操作码对应指令长度有限的机器,需要灵活安排操作码和地址码的长短关系。
操作类型
最后我们再来了解一下操作码究竟能交代哪些操作?
总的来说分4大类:
- 1.数据传送类:进行CPU和主存之间的数据传送 LOAD作用:把存储器中的数据放到寄存器中
STORE 作用:把寄存器中的数据放到存储器中
- 运算类 算术:加、减、乘、除、增1、减1、求补、浮点运算
、十进制运算
逻辑:与、或、非、异或、位操作、位测试、位清除、位求反 移位操作:算术移位
- 、逻辑移位、循环移位(带进位和不带进位)
- 程序控制类:改变程序执行的顺序 转移操作:无条件转移 JMP 条件转移 JZ:结果为0; JO:结果溢出;JC:结果有进位调用和返回CALL和RETURN 陷阱(Trap)与陷阱指令
- 输入输出类(I/0):进行CPU和I/0设备之间的数据传送 输入输出操作:CPU寄存器
与IO端口之间的数据传送(端口即Io接口中的寄存器)
指令框架的分类:
复杂指令集框架(CISC:Complex instruction set computing)
复杂指令集侧重于硬件执行指令的功能性,其对应的硬件结构很复杂。
复杂指令集的特点是指令长度不固定,执行需要多个周期;其有很多用于特定目的的专用寄存器;处理器能够直接处理寄存器中的数据。
复杂指令集主要应用于电脑的处理器,我们的个人电脑处理器用的是X86:
精简指令集框架(RISC:Reduced instruction set computing)
精简指令集计算 这种设计思路可以想像成是一家模块化的组装工厂,对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高。目前常见的精简指令集微处理器包括DEC Alpha、ARC、ARM、AVR、MIPS、PA-RISC、Power ISA(包括PowerPC、PowerXCell)、RISC-V和SPARC等。
指令集
定义
指令集,顾名思义就是一系列指令的集合 通常也可以称作框架,是ISA的子集。其定义其实比较松散,因为集合可大可小。
指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合。而指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体现的一个重要标志。
详细学习地址:https://slidesplayer.com/slide/16239003/
作用:
指令集也作为一种标准规范,用于规范芯片设计工程师及编译器开发工程师:
常用的指令集:
X86
X86属于CISC:Complex instruction set computing 复杂指令集框架的子集。x86泛指一系列基于Intel 8086且向后兼容的中央处理器指令集架构。最早的8086处理器于1978年由Intel推出,为16位微处理器。目前x86的主要产品有Intel的至强,酷睿,奔腾,赛扬和凌动;amd的锐龙,apu等。上文提到的x64架构目前只有intel 安腾而且已经放弃了产品线。
早期的x86是cisc的代表,后来的发展中逐步引入了risc的部分理念,将内部指令的实现大量模块化,准确来说是一个cisc外加risc部分技术的架构。
该系列较早期的处理器名称是以数字来表示80x86。由于以“86”作为结尾,包括Intel 8086、80186、80286、80386以及80486,因此其架构被称为“x86”。因为接近80年代 所以前两位为80,x86的X是之前表示成品代数,386、486等,现在这一构架被统称为x86。
intel第一代4位:4004
intel第二代8位:8080
intel第三代16位:8086,包括80186、80286、80386
intel第四代32位:80486
intel第五代就是奔腾系列了,也称为80586
看见了吗?从8086开始都有个后缀86,后面产生的86处理器都是兼容以前的86处理器,因为使用的同一个架构,就把这种架构称为x86架构
arm
arm是risc的典型代表,不过在arm的发展过程中引入了部分复杂指令(完全没有复杂指令的话操作系统跑起来异常艰难),所以是一个risc基础外加cisc技术的cpu。
mips
另一个risc的典型处理器就是mips。mips是一个学院派的cpu,授权门槛极低,因此很多厂家都做mips或者mips衍生架构。令系统经过通用处理器指令体系MIPS
I、MIPS II、MIPS III、MIPS IV到MIPS
V,嵌入式指令体系MIPS16、MIPS32到MIPS64的发展已经十分成熟。在嵌入式方面,MIPS
K系列微处理器是仅次于ARM的用得最多的处理器之一(1999年以前MIPS是世界上用得最多的处理器),我们平时接触到的mips架构cpu主要用在嵌入式领域,其应用领域覆盖游戏机、路由器、激光打印机、掌上电脑等各个方面。
目前最活跃的mips是中国的龙芯,其loongisa架构其实是mips的扩展。在设计理念上MIPS指令集强调软硬件协同提高性能,同时简化硬件设计。其指
power cpu
risc的,老苹果用的就是这货
alpha架构
侧重超算,目前貌似最活跃是中国申威,神威太湖之光的cpu就是这货)。
【硬件基础知识】指令集框架(ISA:Instruction Set Architecture)的更多相关文章
- 2019企业linux运维最需要的了解的一些硬件基础知识
第3章 服务器 245 3.1 电脑的种类 245 3.2 服务器的介绍 246 3.2.1 服务器的类别 246 3.2.2 服务器的性能 247 3.2.3 服务器的 ...
- iOS蓝牙开发(二)蓝牙相关基础知识
原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...
- iOS蓝牙开发(一)蓝牙相关基础知识(转)
转载自:http://www.cocoachina.com/ios/20150915/13454.html 原文作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad , ...
- IOS 蓝牙相关-基础知识(1)
蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...
- springMVC1 springmvc的基础知识
springmvc第一天 springmvc的基础知识 springmvc课程安排: 第一天: 基础知识 springmvc框架(重点) mvc在b/s系统中应用方式 springmvc框架原理(Di ...
- iOS_SN_BlueTooth( 一)蓝牙相关基础知识
原文 http://www.cocoachina.com/ios/20150915/13454.html 作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad ,ip ...
- ios蓝牙开发(一)蓝牙相关基础知识
蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0 ...
- The art of multipropcessor programming 读书笔记-硬件基础1
本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...
- [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识
[源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...
随机推荐
- 集合框架-HashSet存储自定义对象
1 package cn.itcast.p4.hashset.test; 2 3 import java.util.HashSet; 4 import java.util.Iterator; 5 6 ...
- 多线程-线程间通信-多生产者多消费者问题(JDK1.5后Lock,Condition解决办法及开发中代码范例)
1 package multithread4; 2 3 import java.util.concurrent.locks.Condition; 4 import java.util.concurre ...
- 论文笔记——事件抽取之DMCNN
1.事件抽取介绍: 事件在不同领域中有着不同的含义,对于事件目前还没有统一的定义.在IE ( Information Extraction) 中,事件是指在某个特定的时间片段和地域范围内发生的,由一个 ...
- cookie ? 利用cookie实现 显示上次访问时间?
二. <%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.D ...
- 300iq Contest 1 C Cool Pairs
为了构造时恰好取到 \(k\) 对时的方便,可以考虑将 \(a\) 设为互不相同的 \(n\) 个数,这样对每个 \(b\) 的取值对答案的贡献就是可以通过调整变成任意值的. 因为要尽可能造成贡献,因 ...
- webbrowser 强制 ie11
假设winform程序的名称是TestWebBrowser.exe. 1.在开始菜单内输入"regedit.exe",进入注册表编辑器 2.找到注册表项:HKEY_LOCAL_MA ...
- vue+element ui中select组件选择失效问题原因与解决方法
codejing 2020-07-10 09:13:31 652 收藏 分类专栏: Web Vue Element UI 版权 .当表单form赋完值后,如果后续又对form中某一属性值进行操作如 ...
- NSMutableString练习
从要求讲3个520it拼接在一起 会生成很多新的字符串 NSString *res = @""; NSString *subStr = @"520"; // 1 ...
- MSTP多生成树协议
MSTP多生成树协议 目录 MSTP多生成树协议 1.MSTP(Multiple Spanning Tree Protocol)概述 2.STP.RSTP.PVST的应用缺陷 3.MSTP的主要特点 ...
- 【BZOJ2654】tree(生成树 二分)
题目链接 大意 给你一个无向带权连通图,每条边是黑色或白色,求一棵最小权的恰好有\(Need\)条白色边的生成树. 题目保证有解,输出最小权值. 其中每条边权在\([1,100]\)范围内. 思路 首 ...