您的位置 首页 观点

为什么ARM汇编程序前要加PRESERVE8

这是字节对齐关键词,以前用ADS编译器的时候可以不用,但是后来的keil编译器时需要加上(譬如用周立功模板时,将ADS工程转到keil工程时就必…

这是字节对齐关键词,曾经用ADS编译器的时分能够不必,可是后来的keil编译器时需求加上(譬如用周建功模板时,将ADS工程转到keil工程时就必须加上)。


require8和preserve8
c和汇编有8位对齐的要求,这两个伪指令能够满意此要求,存在REQUIRE8<——> PRESERVE8的对应联系,但不是说有一个REQUIRE8就要有一个 PRESERVE8,如果是一个c文件和一个汇编文件的调用,也就触及一个PRESERVE8或者是一个REQUIRE8, 以下剪自ADS1.2中 PDF,就很清楚,由此可见,最好不要运用LDRD 或 STRD。
LDRD and STRD instructions (double-word transfers) only work correctly if the address they access is 8-byte aligned.
If your code includes LDRD or STRD transfers to or from the stack, use REQUIRE8 to instruct the linker to ensure that your code is only called from objects that preserve 8-byte alignment of the stack.
If your code preserves 8-byte alignment of the stack, use PRESERVE8 to inform the linker.
The linker ensures that any code that requires 8-byte alignment of the stack is only called, directly or indirectly, by code that preserves 8-byte alignment of the stack.
别的,REQUIRE8和PRESERVE8并不完结8 byte 对齐的操作,对齐由ALIGN完结。



RealView? 编译东西 汇编程序攻略 3.1 版
Home> 指令参阅> 其他指令> REQUIRE8 和 PRESERVE8

7.8.14.REQUIRE8 和 PRESERVE8

REQUIRE8
指令指定当时文件要求仓库八字节对齐。 它设置 REQ8 编译特点以告诉链接器。

PRESERVE8
指令指定当时文件坚持仓库八字节对齐。 它设置 PRES8 编译特点以告诉链接器。

链接器查看要求仓库八字节对齐的任何代码是否仅由坚持仓库八字节对齐的代码直接或间接地调用。

语法

REQUIRE8 {bool}    
PRESERVE8 {bool}    

其间:

bool

是一个可选布尔常数,取值为
{TRUE}

{FALSE}

用法

如果您的代码坚持仓库八字节对齐,在需求时,可运用
PRESERVE8
设置文件的 PRES8 编译特点。 如果您的代码不坚持仓库八字节对齐,则可运用
PRESERVE8 {FALSE}
保证不设置 PRES8 编译特点。

Note

如果您省掉
PRESERVE8

PRESERVE8 {FALSE}
,汇编程序会查看修正 sp 的指令,以决议是否设置 PRES8 编译特点。 ARM 主张清晰指定
PRESERVE8

您能够经过以下方式启用正告:

armasm --diag_warning 1546    

有关详细信息,请参阅指令语法。

您将会收到相似以下正告:

"test.s", line 37: Warning: A1546W: Stack pointer update potentially      breaks 8 byte stack alignment     37 00000044 STMFD sp!,{r2,r3,lr}    

示例

REQUIRE8    REQUIRE8     {TRUE}      ; equivalent to REQUIRE8    REQUIRE8     {FALSE}     ; equivalent to absence of REQUIRE8    PRESERVE8    {TRUE}      ; equivalent to PRESERVE8    PRESERVE8    {FALSE}     ; NOT exactly equivalent to absence of PRESERVE8    

Copyright ? 2002-2007 ARM Limited. All rights reserved. ARM DUI 0204HC
Non-Confidential

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/275310.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部