RISC要达到很高的性能,必须有相应的技术支持。目前,RISC采用主要技术有如下几种:
  1、延时转移技术
  在RISC中,指令一般采用流水线方式工作。取指令和执行指令并行进行。如果取指令和执行指令各需要一个周期,那么,在正常情况下,每一个周期就能执行完成一条指令。然而,在遇到转移指令时,流水线有可能断流。如图3.5(a)所示的一个简单程序,当执行JMP指令时,由于转移的目的地址要在指令执行完成后才能产生,这时,下一条指令已经取出来了,因此,必须把已经取出来了的指令3作废,并按照转移地址重新取出正确的指令,如图3.5(b)所示。如果已经取出来了的指令3不作废,而继续执行,那么,整个程序的语义就可能发生错误。
图3.5 因转移指令引起的流水线断流
  有两种办法可以作废指令3,一种是用硬件来作废指令,即控制指令3的执行结果不写入目的寄存器。另一种办法是通过软件在转移指令后面加入一条空操作指令(NOP)。但是,无论采用那一种办法,都要浪费一个周期。
  如果把JMP这条指令提前执行,情况就完全不同了。如图3.6(a)所示,把第一和第二条指令交换位置。程序在流水线中执行的情况如图3.6(b)所示。这时,流水线没有断流情况发生,程序语义也正确。
  延时转移技术:在转移指令之后插入一条或几条指令。在程序执行过程中,要等这些插入的指令执行完成之后才执行转移指令,这种延迟执行转移指令的技术称为延迟转移技术。
  采用指令延迟转移技术时,指令序列的调整由编译器自动进行,一般不需要人来干预,但是,如果要在目标程序一级调试程序,这种已经被调整过了的程序将很难阅读,很容易引起人们的误解。
图 3.6 采用延时转移即使的指令流水线

  很容易会提出这样一个问题:如果是条件转移指令时,还能不能采用延迟转移技术呢?我们来看下面的程序:
  
  以上程序在执行时流水线就不会有断流情况发生。然而,必须注意:调整指令序列时一定不能改变原来程序的数据相关关系,即被移动指令中的所有数据存储单元与移动过程中所经过的指令的所有数据存储单元之间不能有数据的读写、写读和写写相关。另外,还要求,被移动的指令不要破坏机器的条件码,至少不要影响后面的条件码测试指令所使用的条件码。