ARM数据栈的使用规则
数据栈有两个增长方向:向内存地址减小的方向增长时,称为DESCENDING栈;向内存地址增长的方向增长时,称为ASCENDING栈。
所谓数据栈的增长方向就是移动栈指针。当栈指针指向栈顶元素(最后一个入栈的数据)时,称为FULL栈;当栈指针指向栈顶元素(最后一个入栈的数据)相邻的一个空的数据单元时,称为EMPTY栈。
综合这两点,数据栈可以分为以下4种。
1.FD:Full Descending,满递减。
2.ED: Empty Descending,空递减。
3.FA:Full Ascending,满递增。
4.EA:Empty Ascending,空递增。
ARM的ATPCS规定数据栈为FD类型,并且对数据栈的操作是8字节对齐的。使用stmdb/ldmia批量访问内存指令来操作FD数据栈。
使用stmdb命令往数据栈中保存内容时,先递减sp指针,再保存数据,使用ldmia命令从数据栈中恢复数据时,先获得数据,再递增sp指针,sp指针总是指向栈顶元素,这刚好是FD栈的定义
ARM数据栈的使用规则
最新推荐文章于 2023-09-11 23:19:17 发布