1.3.1 指令集体系结构:计算机体系结构的近距离审视
1、这里通过指令集体系结构 ISA来指代程序员可以看到的实际指令集。ISA相当于软件和硬件之间的界限。
(1)ISA分类
几乎所有的ISA都被划分到了通用寄存器体系结构中,在这种体系结构中,操作数要么是寄存器要么是存储地址。80x86有16个通用寄存器和16个浮点寄存器,而RISC-V有32个通用寄存器和32个浮点寄存器。
【知识补充】寄存器:寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。
这一类别有两个主流版本,一种是寄存器-存储器ISA,比如80x86,可以在许多指令中访问存储器,另一种是载入-存储ISA,比如ARMv8和RISC-V,他们只能用载入指令或存储指令来访问存储器。
(2)存储器寻址
几乎所有的桌面计算机和服务器计算机都是用字节寻址来访问存储器操作数。
(3)寻址模式
寻址模式不但指定寄存器和常量操作数,还指定了一个存储器对象的地址。RISC-V的寻址模式为:寄存器寻址、立即数寻址、位移量寻址。80x86支持上述三种模式,在加上位移量寻址的三种变化模式,即无寄存器(绝对数)、两个寄存器(用位移量进行基址寻址),以及两个寄存器(其中一个寄存器乘以操作数的字节大小)。ARMv8拥有3种RISC-V寻址模式,再加上相对PC(程序计数器)的寻址方式、两个寄存器之和,以及另一种方式——也是两个寄存器之和,但其中一个寄存器的内容要乘以操作数的字节大小。它还有自动递增寻址和自动递减寻址,计算得到的地址会被放在用于构造该地址的一个寄存器中,并替代其中的旧地址。
(4)操作数的类型和大小。
和大多数1SA类似,80x86、ARMv8和RISC-V支小为8位(ASCIⅡ字符)、16位(Unicode字符或半个字)、32位(整数或字、64位(双字或长整型),以及IEEE754浮点数[包括32位(单精度)和64位(双精度)]。80x86还支持80位浮点数(扩展双精度)。
(5)操作指令
常见的操作类别为数据传输指令、算术逻辑指令、控制指令(下面进行讨论)和浮点指令。RSC-V是一种简单的、易于实现流水化的指令集体系结构,它是2017年采用的RISC体系结构的代表。表1-4总结了整数RISC-VISA。表1-5列出了浮点ISA。80x86的操作指令集要丰富得多,也大得多(参见附录K)。
(6)控制流指令
包括上述3种在内的几乎所有ISA都支持条件分支、无条件跳转、过程调用和返回。这3种ISA都使用PC相对寻址方式,其中的分支地址由一个地址字段指定,该地址将被加到PC中。这3种ISA之间有一些微小的区别。RISC-V条件分支(BE、BNE等)检验寄存器中的内容,而80x86和ARMv8分支检测条件码位,这些位是在执行算术/逻辑运算时顺带置位的。ARMv8和RISC-V过程调用将返回地址放在一个寄存器中,而80x86调用(CALLF)将返回地址放在存储器中的一个栈内。
(7)ISA的编码
有两种基本的编码选择:固定长度和可变长度。所有ARMv8和RISC-V指令的长度都是32位,从而简化了指令译码。图1-2给出了RISC-V指令格式。80x86编码为可变长度,变化范围为1~18字节。与固定长度的指令相比,可变长度的指令占用的空间更少,所以为80x86编译的程序通常小于为RISC-V编译的相同程序。注意,上面提到的编码选择会影响将指令转换为二进制编码的方式。例如,由于寄存器字段和寻址模式字段可以在一条指令中出现多次,所以寄存器的数目和寻址模式的数目都对指令的大小有很大影响。(注意,ARMv8和RISC-V后来都进行了扩展,支持长16位和长32位的指令,以便缩小程序规模。这两种扩展分别叫作Thumb-2和RV64IC。这些紧凑版RISC体系结构的代码规模小于80x86。参见附录K。)
1.3.2 真正的计算机体系结构:设计满足目标和功能需求的组成和硬件
真正的计算机体系结构:设计满足目标和功能需求的组成和硬件计算机的实现包括两个方面:组成和硬件。组成organization一词包含了计算机设计高阶内容,比如存储器系统、存储器互连、内部处理器或CPU(中央处理器——算术、逻辑分支和数据输送功能都在这里实现)的设计。有时也使用微体系结构(microarchitecture)来代替“组成”。例如,AMD Opteron和Intel Core i7是两个指令集体系结构相同但组成不同处理器。这两种处理器都实现80x86指令集,但它们的流水线和缓存组成有很大不同由于单个微处理器上开始采用多个处理器,所以人们开始使用核(core)一词来称呼处理器。人们一般不说“多处理器微处理器”,而是使用多核(multicore)处理器。由于现今几乎有芯片都有多个处理器,所以人们不怎么使用“中央处理器”(或CPU)一词了。
硬件是指计算机的具体实现,包括计算机的详尽逻辑设计和封装技术。同一系列的计算机通常具有相同的指令集体系结构和非常相似的组成,但在具体硬件实现方面有所不同。例如,Intel Core i7(见第3章)和Intel Xeon E7(见第5章)基本相同,但提供了不同的时钟频率和不同的存储器系统,其中Xeon E7更适用于服务器计算机。
下面是架构师面对的一些重要的功能需求(拍得比较快,应该可以看清楚)