相对寻址是指程序在执行指令时,使用当前程序计数器(PC)中的值加上指定的地址偏移值来计算指令操作数的寻址方式。即在程序运行期间,通过地址偏移量来定位数据的地址,通常用于程序代码中的跳转、分支、寻址等指令中。
相对寻址常见的有两种模式:基于指令计数器(PC)的相对寻址和基于栈顶指针(SP)的相对寻址,其中基于指令计数器的相对寻址是应用最为广泛的一种寻址方式。
在基于指令计数器的相对寻址中,操作系统通过查询下一条指令的地址,加上指令中指定的地址偏移量,计算出目标地址,用于访问需要的数据。 这种寻址方式之所以广泛应用,主要是因为使用指令计数器(PC)作为参考点,使得指令的寻址地址可以在编译时之后确定,减少了程序运行时的计算,提高了程序的执行效率。
在基于栈顶指针(SP)的相对寻址中,操作系统会从当前栈顶指针中获取一个偏移地址来计算目标地址。通常情况下,这种寻址方式会在函数的调用和返回中使用。
具体来说,
相对寻址的优势在于可以根据指令中的地址偏移量快速计算出目标地址,通常应用于程序代码中的跳转、分支、寻址等指令中。此外,基于指令计数器的相对寻址还可以在编译期间解析指令,将寻址地址事先计算好,可以提高程序的执行效率。
相对寻址的局限在于,相对寻址地址的计算需要参考当前的运行状态,需要消耗一定的程序计算资源,可能会影响程序的执行效率。此外,相对寻址只适用于寻址地址相对于参考点的偏移地址的场景,对于需要访问非连续地址的数据结构,相对寻址并不适用。