1 说明

实验平台: JZ2440

CPU:       S3C2440


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

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


2.1 数据栈结构

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

图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 反汇编代码分析


附录1:源码

Start.S

main.c


附录2:参考文献

《嵌入式Linux应用开发》

《ARM体系结构与编程》

《S3C2440A_UserManual_Rev13》

点亮一个LED之参数传递规则的更多相关文章

  1. 点亮一个led灯

    /********************************* 代码功能:点亮一个led灯 使用函数: pinMode(引脚号,模式); digitalWrite(引脚号,电平状态); //默认 ...

  2. 点亮一个led

    1:RS232电平:计算机串口 高电平为-12v,低电平为+12v,所以计算机与单片机进行通信的时候需要加电平转换芯片max232(高电平为-9到-12,低电平为+3到+12之间的. max232通常 ...

  3. 从点亮一个LED开始,Cortex-A9裸机程序设计

    电路原理图: 如何点亮一个LED? 通过对原理图进行分析,我们能够发现给三极管的基极加上一个高点平时,三级管be结导通构成通路,此时二极管就点亮了.若要将LED熄灭只需取消高电平输出. 如何使三级管基 ...

  4. 进阶之路(基础篇) - 001 亮一个led灯

    /********************************* 代码功能:点亮一个led灯 使用函数: pinMode(引脚号,模式); digitalWrite(引脚号,电平状态); //默认 ...

  5. 单片机基础——使用GPIO输出点亮一个LED灯

    1. 准备工作 硬件准备 开发板首先需要准备一个小熊派IoT开发板,并通过USB线与电脑连接. 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的代码,可参考MDK安装教程 ...

  6. STM32学习笔记(一)——点亮一个LED

    引言 最近报名了2017全国大学生电子设计竞赛,我们学校是第一次参加这个比赛,由于8/9月份就要比赛了,所以现在准备是比较晚的了,指导老师说只能做控制类的题目了,让我们学习一下STM32单片机,51到 ...

  7. 第一个程序点亮一个LED灯

    #include <reg52.h> // 引用52包文件 可以理解为命名空间 sbit P1_0 = P1^0;   // 定义P1管脚0 void main()             ...

  8. linux IMX6 汇编点亮一个LED灯

    驱动Linux引脚与驱动STM32其实是一样的,都是在操作寄存器,在相应的寄存器上附上相应的值即可驱动. IMX6U手册上有各个管脚的命名,跟STM32不同,IOMUXC_SW_MUC_CTL_PAD ...

  9. 《STM32CubeMX配置STM32H743XI工程》第一讲《初始化UART,重定义printf函数,点亮一个LED灯》

    1.打开STM32CubeMX软件->新建一个工程(软件自行到ST官网下载安装) 2.输入对应的芯片型号(本次基于野火STM32H743XI Pro 开发板)点击Start Project生成项 ...

随机推荐

  1. js缓慢运动,Math.ceil向上取整,floor向下取整

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. LPS(最长回文子序列)

    (注意:我发现最长回文子序列(Longest Palindromic Subsequence)问题与最长回文子串(Longest Palindromic Substring)不一样,子序列不要求下标一 ...

  3. HTML5画的简单时钟

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 40个超有趣的Linux命令行彩蛋和游戏

    40个有趣的Linux命令行彩蛋和游戏,让你假装成日理万机的黑客高手.附一键安装脚本,在树莓派和ubuntu云主机上亲测成功,有些还可以在Windows的DOS命令行中运行. 本文配套B站视频:40个 ...

  5. Java 使用 JDBC 连接数据库的代码整合[MySql、SqlServer、Oracle]-[经过设计模式改造](2020年寒假小目标01)

    日期:2020.01.08 博客期:121 星期三 今天对过去整个大二和大三上半学期用到的数据库的方法进行汇总,可以有效的使用.套用,每一个部分都有<软件设计模式>知识,上述代码满足了开闭 ...

  6. 算法设计与分析 - AC 代码 - 第 6 弹(重复第 3 弹)

    PTA-算法设计与分析 - c++(g++) #include<bits/stdc++.h> using namespace std; long max3(long a,long b,lo ...

  7. 如何查看python的notebook文件.ipynb

    文章中的ipython notebook和jupyter notebook基本可以互换,不过使用ipython notebook会警告您要使用jupyter notebook.其他没有区别. ---- ...

  8. HTML<video></video>视频无法自动播放

    1.video 标签属性 src: 设置显示视频路径 controls: 显示控制栏 loop: 控制视频循环播放 autoplay: 自动播放 muted:设置静音播放 2.解决视频或音频标签自动播 ...

  9. C# Stream篇(—) -- Stream基类

    写在前头: Stream系列文章共收录7篇,本着备忘和归纳的目的本着备忘和归纳的目的,全部收录于本分类中. 下面是有原文连接,望各位看官还是到原作者处学习,毕竟CV过来的文字难免有走样之处. 原始连接 ...

  10. Ubuntu18.04--双显卡Nvida笔记本安装之各种问题

    (1)安装   出现卡logo或者黑屏 关机重启,按住esc键或shift键不放,进入选择模式,按F6进入选择,nomodeset模式 (2)循环的登陆,或者安装好后重启无法再次进入系统 关机重启,在 ...