ISA指令架构详解

微架构与指令集架构明晰:

由于不同的处理器开发团队采用的技术,具体的实现也不尽相同,不同的处理器使用了不同的指令集合,这样在处理器A上编写的程序就不能直接在处理器B上运行,需要重新编写,然后再次编译、汇编后才可以运行。显然这给程序设计,软件开发带来了极大的不便。
指令集架构(Instruction Set Artecture, ISA)首次出现在IBM的System/360中。ISA在编译器编写者和处理器设计者之间提供了一个抽象层,将编程所需要了解的硬件信息从硬件系统中抽象出来。这样软件开发者就可以面向ISA编程了,开发出来的软件不经过修改就可以在符合该ISA的计算机上运行了。ISA相当于一个抽象的机器,而不是某种处理器的具体实现,从编程人员的角度来看,ISA包括一套指令集和一些就寄存器,并且描述了CPU支持什么样的指令,每条指令完成什么任务。
我们经常听说某某架构,比如什么x86啊,这里的架构指的是微架构(Microartecture),微架构就是ISA的具体实现,也就是CPU中的实现处理器各个功能的数字电路。微架构和ISA之间的关系可以说是这样的:ISA是处理器设计的规范,微架构就是对应ISA的处理器的具体实现。同样的ISA,不同的微架构,在性能上存在一定的差异。
作为软硬件之间的接口,ISA定义了机器语言程序编写者需要知道的一切,这其中就包括指令集,指令集编码,基本数据类型,寄存器,寻址模式,存储体系,异常处理,中断,I/O模型等。

指令集架构分类:

指令集架构可以以很多方式进行划分,一种常见的划分方式是CISC(Complex instruction set computer)复杂指令集计算机和RISC(Reduced instruction set computer)精简指令集计算机。这两种就计算机分别采用的就是CISC和RISC指令集架构。CISC拥有很多特殊的指令,其中一些指令很少被用到,而且CISC的指令是变长的。这个是有历史原因的,早期人们编程的时候使用汇编语言,为了编程的灵活方便,人们将指令集设计的功能强大,而且为了节省空间,指令编码采用了边长方式。而RISC就不一样了,RISC简化了指令集,人们重新设计了指令集,剔除了那些不常使用的指令,只保留常用的指令。
当然还有其他类型的指令集架构,比如VLIM(Very long instruction word)超长指令字架构,EPIC(Explicity parallel instruction computing)显示并行指令集计算。这些指令集架构都在尝试通过使编译器负责指令流的调度来实现指令级别的并行并且使用比CISC和RISC更少的硬件。
现在更简化的指令集也正在研究中,比如MISC(Minimal instruction set computer,最小指令集计算机)和OISC(One instruction set computer,单指令集计算机)。

ISA的规定了什么?

1.数据类型;
2.寄存器;
3.字节次序;
4.指令格式;
5.指令集;
6.寻址方式;
7.协处理器:表示处理器的一个可选部件,负责处理指令集的某个扩展, 拥有与处理器想相独立的寄存器;
8.异常处理方式。

指令字长度:

指令字就是表示一条指令的机器字,指令字长就是表示一条指令的机器字的二进制位数。就所有的指令集架构来说,指令的长度范围是很广的,小的可以只有4位,长的却可达上百位。使用在个人计算机、大型主机、超级计算机中的指令字长一般是8位到64位,最长的指令是X86中的一条指令,足足15个字节,120位!!!
在一个指令集中,不同的指令可能有不同的长度。但也有例外,比如RISC,RISC的绝大部分指令都是定长的,而且一般是和机器的字长相匹配,因为机器从内存中读取指令都是因一个机器字为单位,所以如果大部分的指令字长能保持在一个机器字长或者更短,那么可以大大减少取指时间。
使用定长指令字可以不必去检查指令在缓存区中是否跨行或在虚拟内存中是否跨页,并且更加容易优化处理器的速度。

资料参考:
[1] 雷思磊.《自己动手写CPU》.硬件/嵌入式开发.北京:电子工业出版社,2014

猜你喜欢

转载自blog.csdn.net/miha_singh/article/details/80617416
isa