ARM指令的寻址方式
多寄存器寻址和堆栈寻址之间的关系 堆栈 之前 之后 之前 之后
LDMDA LDMFA
向上生长 满
STMIB STMFA STMIA STMEA LDMDB LDMEA
向下生长 满 空
LDMIB LDMED LDMIA LDMFD STMDB STMFD STMDA STMED
多寄存器 寻址
ARM指令的寻址ห้องสมุดไป่ตู้式
STMFA r13!, {r0-r5} ; Push onto a Full Ascending Stack LDMFA r13!, {r0-r5} ; Pop from a Full Ascending Stack STMFD r13!, {r0-r5} ; Push onto a Full Descending Stack LDMFD r13!, {r0-r5} ; Pop from a Full Descending Stack STMEA r13!, {r0-r5} ; Push onto an Empty Ascending Stack LDMEA r13!, {r0-r5} ; Pop from an Empty Ascending Stack STMED r13!, {r0-r5} ; Push onto Empty Descending Stack LDMED r13!, {r0-r5} ; Pop from an Empty Descending Stack
ARM指令的寻址方式
堆栈寻址 堆栈是一种数据结构,按先进后出( 堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的 , ) 方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆 方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置, 栈指针总是指向栈顶. 栈指针总是指向栈顶. 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈( 满堆栈 ), 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack), 而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈 空堆栈( 而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack). ) 同时,根据堆栈的生成方式,又可以分为递增堆栈( 同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending 递增堆栈 Stack)和递减堆栈(Decending Stack),当堆栈由低地址向高地址 ),当堆栈由低地址向高地址 ) 递减堆栈( ), 生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈. 生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈. 这样就有四种类型的堆栈工作方式, 这样就有四种类型的堆栈工作方式,ARM微处理器支持这四种类型的堆栈 微处理器支持这四种类型的堆栈 工作方式, 工作方式,即: