根据程序调用标准的arm架构,在"双"型 c程序应与多少字节的边界对齐

根据程序调用标准的arm架构,在"双"型 c程序应与多少字节的边界对齐,第1张

什么叫双型C程序。。。

字节边界对齐 一个看系统,标准arm是4字节对齐

一个看实际类型。

如果实际类型大于这个4字节,那就是按照实际类型对齐。

其实原则就是一句话,让cpu可以尽量少的次数,把变量读过去。

一、 参数传递的基本规则(ATPCS(ARM—Thumb Procedure Call Standard))

1、 参数传递

二、汇编程序、C程序相互调用举例

1、 C程序调用汇编程序

汇编程序的设计要遵守ATPCS(ARM—Thumb Procedure Call Standard),保证程序调用时参数的正确传递。在汇编程序中使用EXPORT 伪 *** 作声明本程序,使得本程序可以被别的程序调用。在C程序使用extern声明该汇编程序。

下面是一个C程序调用汇编程序的例子。其中汇编程序strcopy实现字符串复制功能,C程序调用strcopy完成字符串复制的工作。

//C程序

#include <stdioh>

extern void strcopy(char d, const char s);

int main( )

{

const char srcstr=”First string-source”;

char dststr[ ]=”Second string-destination”;

printf(“Before copying:\n”);

printf(“%s\n %s\n”, srcstr,dststr);

strcopy(dststr,srcstr);

printf(“After copying:\n”);

printf(“%s\n %s\n “,srcstr,dststr);

while(1) ;

}

;汇编程序

AREA Scopy, CODE, READONLY

EXPORT strcopy

Strcopy

LDRB R2, [R1], #1

STRB R2, [R0], #1

CMPR2,#0

BNE Strcopy

MOV PC, LR

END

2、 汇编程序调用C程序

汇编程序的设计要遵守ATPCS,保证程序调用时参数的正确传递。在汇编程序中使用IMPORT伪 *** 作声明将要调用的C程序。下面是一个汇编程序调用C程序的例子。其中在汇编程序中设置好各参数的值。本例中有6个参数,分别使用寄存器R0存放第1个参数,

R1存放第2个参数, R2存放第3个参数, R3存放第4个参数, 第5个、第6个参数利用数据栈传送。由于利用数据栈传递参数,在程序调用结束后要调整数据栈指针。

//C程序g( )返回6个参数的和

int g( int a, int b, int c, int d, int e, int f )

{

printf(“e=%d\n”, e);

printf(“f=%d\n”, f);

return (a+b+c+d+e+f);

}

; 汇编程序调用C程序 g( ) 计算6个整数 i, 2i, 3i, 4i, 5i, 6i的和

EXPORT f

AREA f ,CODE, READONLY

IMPORT g

MOV R0, #1

ADD R1, R0, R0

ADD R2, R1, R0

ADD R3, R2, R0

ADD R4, R3, R0

ADD R5, R4, R0

STR R4, [SP, #-4]!

STR R5, [SP, #-4]!

BL g

ADD SP, SP, #4

ADD SP, SP, #4

STOP B STOP

END

汇编中:

EXPORT MMU_EnableICache

MMU_EnableICache

mrc p15,0,r0,c1,c0,0

orr r0,r0,#R1_I

mcr p15,0,r0,c1,c0,0

MOV_PC_LR

然后C中调用 MMU_EnableICache();

调用汇编则更简单,

unsigned int UserAppPTR = 0x00081040; //设置成汇编入口的绝对地址。

void (UserAPP)(void);

UserAPP = (void ()(void))UserAppPTR;

UserAPP();

恩,一般来说在C中调用汇编比较常见,而且是非必要才用

以上就是关于根据程序调用标准的arm架构,在"双"型 c程序应与多少字节的边界对齐全部的内容,包括:根据程序调用标准的arm架构,在"双"型 c程序应与多少字节的边界对齐、汇编语言是怎么调用c语言的程序的、举例说明ARM汇编语言函数和C语言函数互调用规则。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9815735.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存