在嵌入式开发中,汇编程序常常用于非常关键的地方,比如系统启动时的初始化,进出中断时的环境保存、恢复,对性能要求非常苛刻的函数等。
ldr 指令既可能是大范围的地址读取伪指令,也可能是内存访问指令。当它的第二个参数前面有 “ = ” 时,表示伪指令,否则表示内存访问指令。
ldr 指令是从内存中读取数据到寄存器, str 指令把寄存器的值存储到内存中,它们操作的数据都是 32
为了使C语言程序和汇编程序之间能够互相调用,必须为子程序间的调用制定规则,在ARM处理器中,这个规则被称为 ATPCS :ARM程序和THUMB程序中子程序调用的规则。基本的ATPCS规则包括 寄存器使用规则 、 数据栈使用规则 、 参数传递规则 。
。如果在子程序中使用了它们的某些寄存器,子程序进入时要保存这些寄存器的值,在返回前恢复它们;对于子程序中没有使用到的寄存器,则不必进行这些操作。在THUMB程序中,通常只能使用寄存器 r4 ~ r7 来保存局部变量。
r13 不能用作其他用途。它的值在进入、退出子程序时必须相等。
寄存器 r14 称为连接寄存器,别名为 lr 。它用于保存子程序的返回地址。如果在子程序中保存了返回地址(比如将
子 程序内部调用的scratch寄存器 |
ARM状态局部变量寄存器8 |
ARM状态局部变量寄存器7、在支持数据栈检查的ATPCS中为数据栈限制指针 |
ARM状态局部变量寄存器6、在支持RWPI的ATPCS中为静态基址寄存器 |
ARM状态局部变量寄存器5 |
ARM状态局部变量寄存器4、THUMB状态工作寄存器 |
ARM状态局部变量寄存器3 |
ARM状态局部变量寄存器2 |
ARM状态局部变量寄存器1 |
参数/结果/scratch寄存器4 |
参数/结果/scratch寄存器3 |
参数/结果/scratch寄存器2 |
参数/结果/scratch寄存器1 |
数据栈有两个增长方向:向内存地址减小的方向增长时,称为 DESCENDING栈 ;向内存地址增加的方向增长时,称为 ASCENDING栈 所谓数据栈的增长就是移动栈指针。当栈指针指向栈顶元素(最后一个入栈的数据)时,称为 FULL栈 ;当栈指针指向栈顶元素(最后一个入栈的数据)相邻的一个空的数据单元时,称为
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。