Pentium.Labs

System全家桶:https://zhuanlan.zhihu.com/c_1238468913098731520

导航

计算机系统结构总结_Instruction Set Architecture

Textbook:
《计算机组成与设计——硬件/软件接口》    HI
《计算机体系结构——量化研究方法》           QR


这节我们来看CPU内部的一些东西。

 

Instruction Set Architecture

指令集是介于硬件(CPU microarchitecture / IO / ....)和软件(compiler / OS / ....)之间的一个interface。硬件(486-586-PentiumPro)和软件(Win98-WinXP)都会更新换代,但指令集很少变化(比如x86)。现在比较流行的是General-purpose register architecture,这也是我们重点学习的。早期还有stack architecture和accumulator architecture,不过已经不流行了...

Java VM:HI P89

 

Register

寄存器是在cpu内部的存储单元,访问简单,速度也非常快。

和前面说的cache不同,寄存器是对软件可见的(explictly managed)。比如下面的一段程序:

 1 void foo(){
 2     ....
 3 }
 4 
 5 void bar(){
 6     int a,b;
 7     a=233;
 8     foo();
 9     printf("%d\n", a);
10 }

foo()和bar()都可能会用满所有的寄存器。那么在Line 8调用foo()之前,编译器就要手动把bar()当前运行时寄存器的值备份一下(存到stack),等foo()结束后再还原回来。

 

Memory Addressing

指令可以分为以下几类:

  • Load/Store就是在内存和寄存器之间搬运数据......
  • ALU operation是用来计算的。它操作数据的主要来源是寄存器
    • 在RISC中,ALU inst只能从寄存器中读写,不能读内存地址。而在x86中一条指令最多可以读写1个内存地址

那么指令是如何进行memory addressing呢?要考虑如下几个问题:

  1. Bytes addressed。即每个地址包含多少个byte。大多数情况下是一次读一个byte(参考这张图)。也有些奇怪的机器是一次读一个word(多个bytes)
  2. Little/Big Endian
  3. Alignment。比如4bytes alignment表示每个数据的起始地址必须是4 bytes的倍数。

Addressing Mode:(PPT P6)

 

Control Flow Instructions

分支指令

 

几种常见的ISA

CISC:硬件资源少,人类手些汇编的硬核年代......指令集比较复杂,并且提供一些复杂指令,以便让program的汇编代码量尽量小

RISC:此时硬件资源已经多了,编译器技术也好一些了。因此需要只包括更简单的指令(fixed length,涉及更少的hardware control),以便支持instruction-level parallelism。这样即使需要的指令多了,但总体来看还是快不少。load-store architecture

但其实现在CISC和RISC差距已经没有很大了......像CISC的x86指令集,也加入了很多RISC的特性。比如用RISC Engine来执行microcode(动态解码后的CSIC指令)

 

RISC pipeline

PPT P14-

我们以Alpha为例来看看一个RISC ISA是怎样设计的吧。

指令种类:可以分为RR、RI、Load/Store、Branch、Jump五种(PPT P14-P16)

为了执行这些指令,我们定义了一个五级的流水线:

 

  • IF:Fetch 32bit instructions,并送到instruction memory
  • ID:Decode Instruction(通过电路...),然后送到对应的component
  • EX:进行计算
  • MEM:(有可能)涉及到访问内存
  • WB:将结果写回寄存器(Reg Array)

我们分别看看这五种指令各自是如何执行的:

PPT P19-24

 

 

......

posted on 2019-10-25 05:55  Pentium.Labs  阅读(2554)  评论(0编辑  收藏  举报



Pentium.Lab Since 1998