寻址方式之——相对寻址、堆栈寻址
相对寻址
- 与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值(R15中的值)为基地址,指令中的地址标号作为偏移量,将两者相加后得到操作数的有效地址。
- 相对寻址主要用于转移指令,执行本条命令后,转移到(PC)+ Disp,(PC)为程序计数器的内容。
- 特点:
- 转移地址不是固定的,它随着PC值的变化而变化,并且总是与PC相差一个固定的值disp,因此无论程序转入存储器的任何地方,均能正确运行,对浮动程序很适用。
- 位移量可正、可负,通常用补码表示。
堆栈寻址
堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用堆栈指针(Stack Pointer, SP)指示当前的操作位置,堆栈指针总是指向栈顶。
根据堆栈的生成方式不同,可以把堆栈分为递增堆栈和递减堆栈两种类型。
- 递增堆栈:向堆栈写入数据时,堆栈由低地址向高地址生长。
- 递减堆栈:向堆栈写入数据时,堆栈由高地址向低地址生长。
同时,根据堆栈指针(SP)指向的位置,又可以把堆栈分为满堆栈(Full Stack)和空堆栈(Empty Stack)两种类型。
- 满堆栈(Full Stack):堆栈指针指向最后压入堆栈的数据。满堆栈在向堆栈存放数据时的操作是先移动SP指针,然后存放数据。在从堆栈取数据时,先取出数据,随后移动SP指针。这样保证了SP一直指向有效的数据。
- 空堆栈(Empty Stack):堆栈指针SP指向下一个将要放入数据的空位置。空堆栈在向堆栈存放数据时的操作是先放数据,然后移动SP指针。在从堆栈取数据时,是先移动指针,再取数据。这种操作方式保证了堆栈指针一直指向一个空地址(没有有效数据的地址)。
Last updated:
这里可以给我留言。