首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
在ARM调用标准(ATPC)中,函数的参数是怎么传递?()
[单选题]
在ARM调用标准(ATPC)中,函数的参数是怎么传递?()
通过寄存器传递
通过堆栈传递
通过寄存器或堆栈传递
说法都错误
查看正确选项
添加笔记
求解答(24)
邀请回答
收藏(151)
分享
纠错
5个回答
添加回答
13
loooool
1. ATPC (Automatic Transfer Power Control)
自动
发信功率控制。技术的要点是微波发信机的输出功率在ATPC控制范围内自动跟踪接收段接收电平的变化而变化
2. 基本ATPCS规定了在子程序调用时的一些基本规则,包括下面3方面的内容:
1、寄存器的使用必须满足下面的规则:
1).子程序间通过
寄存器R0一R3来传递参数
,这时,寄存器R0~R3可以记作A1-A4。被调用的子程序在返回前无需恢复寄存器R0~R3的内容。
2).在子程序中,使用寄存器R4~R11来保存局部变量.这时,寄存器 R4 ~ R11可以记作V1 ~ V8。如果在子程序中使用到了寄存器V1~V8中的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;对于子程序中没有用到的寄存器则不必进行这些操作。在Thumb程序中,通常只能使用寄存器R4~R7来保存局部变量。
3).寄存器R12用作过程调用时的临时寄存器(用于保存SP,在函数返回时使用该寄存器出栈), 记作ip。在子程序间的连接代码段中常有这种使用规则。
4).寄存器R13用作数据栈指针,记作sp。在子程序中寄存器R13不能用作其他用途。寄存器sp在进入子程序时的值和退出子程序时的值必须相等。
5).寄存器R14称为连接寄存器,记作lr。它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器R14则可以用作其他用途。
6).寄存器R15是程序计数器,记作pc。它不能用作其他用途。
ATPCS下ARM寄存器的命名:
R0 a1 工作寄存器
R1 a2 工作寄存器
R2 a3 工作寄存器
R3 a4 工作寄存器
R4 v1 必须保护;局部变量寄存器
R5 v2 必须保护;局部变量寄存器
R6 v3 必须保护;局部变量寄存器
R7 v4 必须保护;局部变量寄存器
R8 v5 必须保护;局部变量寄存器
R9 v6 必须保护;局部变量寄存器
R10 sl 栈限制
R11 fp 帧指针
R12 ip 指令指针
R13 sp 栈指针
R14 lr 连接寄存器
参数的传递规则:
根据参数个数是否固定,可以将子程序分为参数个数固定的子程序和参数个数可变的子程序.这两种子程序的参数传递规则是不同的.
1.参数个数可变的子程序参数传递规则
对于参数个数可变的子程序,当参数不超过4个时,可以使用寄存器R0~R3来进行参数传递,当参数超过4个时,还可以使用数据栈来传递参数.
在参数传递时,将所有参数看做是存放在连续的内存单元中的字数据。然后,依次将各名字数据传送到寄存器R0,R1,R2,R3; 如果参数多于4个,将剩余的字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈.
按照上面的规则,一个浮点数参数可以通过寄存器传递,也可以通过数据栈传递,也可能一半通过寄存器传递,另一半通过数据栈传递.
2.参数个数固定的子程序参数传递规则
对于参数个数固定的子程序,参数传递与参数个数可变的子程序参数传递规则不同,如果系统包含浮点运算的硬件部件。
浮点参数将按照下面的规则传递:
(1)各个浮点参数按顺序处理;
(2)为每个浮点参数分配FP寄存器;
分配的方法是,满足该浮点参数需要的且编号最小的一组连续的FP寄存器.第一个整数参数通过寄存器R0~R3来传递,其他参数通过数据栈传递.
3、子程序结果返回规则
1.结果为一个32位的整数时,可以通过寄存器R0返回.
2.结果为一个64位整数时,可以通过R0和R1返回,依此类推.
3.结果为一个浮点数时,可以通过浮点运算部件的寄存器f0,d0或者s0来返回.
4.结果为一个复合的浮点数时,可以通过寄存器f0-fN或者d0~dN来返回.
5.对于位数更多的结果,需要通过调用内存来传递
发表于 2019-03-27 09:43:18
回复(2)
3
鄂学谦
没看懂,这意思不是就是通过寄存器和栈吗?哪位爸爸来解释一下,感谢🙏
发表于 2021-01-31 20:12:29
回复(0)
3
🐂①🐂
1. ATPC (Automatic Transfer Power Control)
自动
发信功率控制。技术的要点是微波发信机的输出功率在ATPC控制范围内自动跟踪接收段接收电平的变化而变化
2. 基本ATPCS规定了在子程序调用时的一些基本规则,包括下面3方面的内容:
1、寄存器的使用必须满足下面的规则:
1).子程序间通过
寄存器R0一R3来传递参数
,这时,寄存器R0~R3可以记作A1-A4。被调用的子程序在返回前无需恢复寄存器R0~R3的内容。
2).在子程序中,使用寄存器R4~R11来保存局部变量.这时,寄存器 R4 ~ R11可以记作V1 ~ V8。如果在子程序中使用到了寄存器V1~V8中的某些寄存器,子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;对于子程序中没有用到的寄存器则不必进行这些操作。在Thumb程序中,通常只能使用寄存器R4~R7来保存局部变量。
3).寄存器R12用作过程调用时的临时寄存器(用于保存SP,在函数返回时使用该寄存器出栈), 记作ip。在子程序间的连接代码段中常有这种使用规则。
4).寄存器R13用作数据栈指针,记作sp。在子程序中寄存器R13不能用作其他用途。寄存器sp在进入子程序时的值和退出子程序时的值必须相等。
5).寄存器R14称为连接寄存器,记作lr。它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器R14则可以用作其他用途。
6).寄存器R15是程序计数器,记作pc。它不能用作其他用途。
ATPCS下ARM寄存器的命名:
R0 a1 工作寄存器
R1 a2 工作寄存器
R2 a3 工作寄存器
R3 a4 工作寄存器
R4 v1 必须保护;局部变量寄存器
R5 v2 必须保护;局部变量寄存器
R6 v3 必须保护;局部变量寄存器
R7 v4 必须保护;局部变量寄存器
R8 v5 必须保护;局部变量寄存器
R9 v6 必须保护;局部变量寄存器
R10 sl 栈限制
R11 fp 帧指针
R12 ip 指令指针
R13 sp 栈指针
R14 lr 连接寄存器
参数的传递规则:
根据参数个数是否固定,可以将子程序分为参数个数固定的子程序和参数个数可变的子程序.这两种子程序的参数传递规则是不同的.
1.参数个数可变的子程序参数传递规则
对于参数个数可变的子程序,当参数不超过4个时,可以使用寄存器R0~R3来进行参数传递,当参数超过4个时,还可以使用数据栈来传递参数.
在参数传递时,将所有参数看做是存放在连续的内存单元中的字数据。然后,依次将各名字数据传送到寄存器R0,R1,R2,R3; 如果参数多于4个,将剩余的字数据传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个字数据先入栈.
按照上面的规则,一个浮点数参数可以通过寄存器传递,也可以通过数据栈传递,也可能一半通过寄存器传递,另一半通过数据栈传递.
2.参数个数固定的子程序参数传递规则
对于参数个数固定的子程序,参数传递与参数个数可变的子程序参数传递规则不同,如果系统包含浮点运算的硬件部件。
浮点参数将按照下面的规则传递:
(1)各个浮点参数按顺序处理;
(2)为每个浮点参数分配FP寄存器;
分配的方法是,满足该浮点参数需要的且编号最小的一组连续的FP寄存器.第一个整数参数通过寄存器R0~R3来传递,其他参数通过数据栈传递.
3、子程序结果返回规则
1.结果为一个32位的整数时,可以通过寄存器R0返回.
2.结果为一个64位整数时,可以通过R0和R1返回,依此类推.
3.结果为一个浮点数时,可以通过浮点运算部件的寄存器f0,d0或者s0来返回.
4.结果为一个复合的浮点数时,可以通过寄存器f0-fN或者d0~dN来返回.
5.对于位数更多的结果,需要通过调用内存来传递
发表于 2019-07-28 13:48:55
回复(0)
0
牛客336384802号
总结一下,就是根据参数不同,可以有寄存器,栈,寄存器+栈,内存的方式进行传递
发表于 2022-05-30 10:51:46
回复(0)
0
牛客486528920号
ATPCS下ARM寄存器的命名:
R0 a1 工作寄存器
R1 a2 工作寄存器
R2 a3 工作寄存器
R3 a4 工作寄存器
R4 v1 必须保护;局部变量寄存器
R5 v2 必须保护;局部变量寄存器
R6 v3 必须保护;局部变量寄存器
R7 v4 必须保护;局部变量寄存器
R8 v5 必须保护;局部变量寄存器
R9 v6 必须保护;局部变量寄存器
R10 sl 栈限制
R11 fp 帧指针
R12 ip 指令指针
R13 sp 栈指针
R14 lr 连接寄存器
R15 pc 程序计数器
发表于 2020-02-27 05:08:59
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
C++工程师
顺丰集团
ARM
Java工程师
来自:
顺丰科技2019秋招嵌...
上传者:
小小
难度:
5条回答
151收藏
2963浏览
热门推荐
相关试题
文法G[E]: E-> T|...
编译和体系结构
Java工程师
C++工程师
iOS工程师
安卓工程师
运维工程师
前端工程师
算法工程师
PHP工程师
测试工程师
顺丰集团
2019
信息技术岗
区块链
评论
(13)
来自
顺丰科技2019秋招运维...
下面是关于基于ARM内核的嵌入式芯...
嵌入式操作系统
基础
ARM
嵌入式
评论
(2)
下面关于ARM嵌入式处理器的GPI...
基础
ARM
嵌入式
评论
(1)
下列说法哪个是正确的()?
C语言
评论
(21)
来自
顺丰科技2019秋招嵌入...
一个函数不写返回值类型,默认的返回...
C语言
评论
(71)
来自
顺丰科技2019秋招嵌入...
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题