zoukankan      html  css  js  c++  java
  • 点亮一个LED之参数传递规则

    1 说明

    实验平台: JZ2440

    CPU:       S3C2440


    2 ARM-THUMB Procedure Call Standard(ATPCS: ARM-Thumb过程调用标准)

    image

                               图1 ATPCS中各寄存器的使用规则和名称


    2.1 数据栈结构

    我们使用的栈结构为FD(Full Descending)类型。注意:栈基址所指向的内存单元,不存放数据。

    clip_image004 

                                图2 栈结构


    2.2 参数传递规则

    根据参数个数是否固定,可以将子程序分为参数个数固定的子程序和参数个数可变的的子程序。

    2.2.1 参数个数可变的子程序传递规则

    参数传递时,可以将所有参数看作是存放在连续的存储字单元中的字数据。

    当参数个数不超过4个时,使用寄存器R0-R3来传递参数,依次将各个字数据分别传送到寄存器R0-R3中去。

    当参数个数超过4个时,还需使用数据栈来传递参数,把前4个字数据分别传送到寄存器R0-R3中去,剩余的字数据传送到数据栈中,需要注意的是,入栈顺序与参数顺序相反,即最后一个字数据先入栈。


    2.2.2 参数个数固定的子程序传递规则

    第一个整数参数通过寄存器R0-R3来传递,其他参数通过数据栈传递。


    2.2.3 子程序结果返回规则

    结果为一个32位的整数时,可以通过寄存器R0来返回。

    结果为一个64位的整数时,可以通过寄存器R0和R1来返回,以此类推。

    对于位数更多的结果,需要通过内存来反回。


    3 反汇编代码分析

    clip_image006


    附录1:源码

    Start.S

    clip_image008


    main.c

    clip_image010


    附录2:参考文献

    《嵌入式Linux应用开发》

    《ARM体系结构与编程》

    《S3C2440A_UserManual_Rev13》

  • 相关阅读:
    决策树算法
    数据挖掘建模-Logistic回归
    Python数据结构与算法-栈和递归函数
    使用python自动化生成软件著作权的源代码
    一起玩转图论算法(1)图的基本表示
    全网最最最详细的软件著作权申请步骤
    时间序列模式(ARIMA)---Python实现
    宝塔面板怎样部署SSL证书?
    Linux基础概念入门
    转载:VMware workstation创建虚拟机,安装Ubuntu系统
  • 原文地址:https://www.cnblogs.com/lilto/p/10831938.html
Copyright © 2011-2022 走看看