求C语言,嵌入式大师帮忙~
发布网友
发布时间:2023-08-01 04:52
我来回答
共2个回答
热心网友
时间:2024-12-03 23:39
这个看着是arm汇编吧!
这个你需要学习ATPCS(arm thumb procere call standard),即arm thumb 过程调用标准。
对于汇编语言中的寄存器,在C语言中使用时,被赋予了新的含义,如下:
寄存器名字
Reg # APCS 意义
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 程序计数器
在C语言中调用函数时,工作寄存器就是用来保存形参的。以上a1-a4一共有4个,也就是说,如果形参个数小于4个,那么,形参就会一次传给这四个工作寄存器。
对于这个例子,汇编中的r0,r1中的值也就是形参555 168,
通过指令 ADD R0,R0,R1 ;r0中的值也就成了相加的结果。
程序返回的是a0(也就是r0)中的值。
如果是C语言中嵌入汇编,那需要遵循AT&T汇编标准,这时,用于传递形参的寄存器,称为输入寄存器,以及用于返回的寄存器,称输出寄存器,都是可以指定的,详细查看arm嵌入汇编
参考资料:atpcs过程调用标准
热心网友
时间:2024-12-03 23:40
表示关注追问如何以指针形式传递参数?
追答一般不是 定义函数的时候 fun(int * a, int b)...
然后使用的时候不是 fun(&x, &b);
就这样传递啊,不知道你想问什么?难道是问汇编?