【硬件基础知识】指令集框架(ISA:
InstructionSetArchitecture)
指令框架(ISA:Instruction Set Architecture)
定义
指令集架构(英语:Instruction Set Architecture,缩写为ISA),⼜称指令集或指令集体系,是中与有关的部分,包含了,指令集,,,,,以及外部。指令集架构包含⼀系列的即操作码(),以及由特定处理器执⾏的基本命令。-------- 中⽂
个⼈解说:这个类似与⼀个标准,和ECMA-335 协议类似.根据这个协议做出 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)
精简指令集计算这种设计思路可以想像成是⼀家模块化的组装⼯⼚,对指令数⽬和寻址⽅式都做了精简,使其实现更容易,指令并⾏执⾏程度更好,编译器的效率更⾼。⽬前常见的精简指令集包括、、、、、、(包括、)、和等。
指令集
定义
指令集,顾名思义就是⼀系列指令的集合通常也可以称作框架,是ISA的⼦集。其定义其实⽐较松散,因为集合可⼤可⼩。
指令集,就是CPU中⽤来计算和控制计算机系统的⼀套指令的集合。⽽指令集的先进与否,也关系到CPU的性能发挥,它也是CPU性能体
现的⼀个重要标志。
作⽤:
指令集也作为⼀种标准规范,⽤于规范芯⽚设计⼯程师及编译器开发⼯程师:
常⽤的指令集:
X86
X86属于CISC:Complex instruction set computing 复杂指令集框架的⼦集。x86泛指⼀系列基于 8086且向后兼容的指令集架构。最早的8086处理器于1978年由Intel推出,为16位微处理器。⽬前x86的主要产品有Intel的⾄强,酷睿,奔腾,赛扬和凌动;amd的锐龙,apu等。上⽂提到的x64架构⽬前只有intel 安腾⽽且已经放弃了产品线。
早期的x86是cisc的代表,后来的发展中逐步引⼊了risc的部分理念,将内部指令的实现⼤量模块化,准确来说是⼀个cisc外加risc部分技术的架构。
该系列较早期的处理器名称是以数字来表⽰80x86。由于以“86”作为结尾,包括、、、以及,因此其架构被称为“x86”。因为接近80年代所以前两位为80,x86的X是之前表⽰成品代数,386、486等,现在这⼀构架被统称为x86。
intel第⼀代4位:4004
intel第⼆代8位:8080x86架构和arm架构区别
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就是这货)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。