5.2.2 控制相关
控制相关是指因为程序的执行方向可能被改变而引起的相关。可能改变程序执行方向的指令通常有无条件转移、一般条件转移、复合条件转移、子程序调用、中断等。
有些资料上把上一节中介绍的数据相关称为局部相关,而把本节将要介绍的控制相关称为全局相关。这是因为数据相关影响到的仅仅是本条指令附近的少数几条指令,而控制相关影响的范围要大得多,它可能引起程序执行方向的改变。
1、无条件转移
一段有无条件转移指令的程序如下:
k: ……
k+1: JMP L
…: ……
L: ……
无条件转移指令一般在指令分析器中就执行完成,形成转移地址L,如图5.29所示。如果转移距离比较远,指令L不在指令缓冲栈中,则要将指令缓冲栈中的所有指令全部作废,指令分析器要等待一个"取指令L"周期之后才能开始"分析L"。如果转移的距离比较近,有可能指令L已经被取到了指令缓冲栈中。这时,只要作废指令缓冲栈中的部分指令,即作废从k+3到L-1之间的所有指令。指令分析器在完成"分析k+1"之后,可以接着进行"分析L",即指令分析器仍然可以不停顿地连续工作。
在有的处理机中,为了进一步减少无条件转移指令造成的影响,在指令缓冲栈的入口处增设一个专门处理无条件转移指令的指令分析器。这样,取到指令缓冲栈中的指令就都是有用的,不会再发生作废先行缓冲栈中指令的情况。采用这种方法能够减少处理机与主存储器之间的通信量,而且,无条件转移指令对后面的指令分析器和指令执行部件等将不再造成影响,就象程序中没有无条件转移指令一样。