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

发布者:科技思想家最新更新时间:2016-07-28 来源: eefocus关键字:ARM  汇编程序  PRESERVE8 手机看文章 扫描二维码
随时随地手机看文章
这是字节对齐关键词,以前用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

关键字:ARM  汇编程序  PRESERVE8 引用地址:为什么ARM汇编程序前要加PRESERVE8

上一篇:ARM-Linux驱动移植--Watch Dog Timer(看门狗)驱动移植
下一篇:STM32 RVMDK JLINK下flash和RAM调试方法

推荐阅读最新更新时间:2024-03-16 15:02

ARM流水线关键技术分析与代码优化
引 言 流水线技术通 过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。ARM7处理器核使用了典型三级流 水线的冯·诺伊曼结构,ARM9系列则采用了基于五级流水线的哈佛结构。通过增加流水线级数简化了流水线各级的逻辑,进一步提高了处理器的性能。 ARM7的三级流水线在执行单元完成了大量的工作,包括与操作数相关的寄存器和存储器读写操作、ALU操作以及相关器件之间的数据传输。执行单元的工作往 往占用多个时钟周期,从而成为系统性能的瓶颈。ARM9采用了更为高效的五级流水线设计,增加了2个功能部件分别访问存储器并写回结果,且将读寄存器的操 作转移到译码部件上,使流水线各部
[单片机]
<font color='red'>ARM</font>流水线关键技术分析与代码优化
基于ARM9的无线多床位心电监护仪的设计
1 引言 随着社会生活节奏加快、人口逐渐老龄化,心血管疾病已经成为同前威胁人类生命的丰要疾病之一,此类疾病往往具有突发性、短暂性和危险性的特点,如果不能及时发现并进行治疗将会产生非常严重的后果。心电图是检查.诊断和预防该类疾病的主要手段和依据,对于心肌梗塞、心律失常等症状,心电监护仪的使用贯穿于治疗、康复的整个过程。由于传统的基于PC机平台的心电躲护仪,价格昂贵,体积庞大,不便于移动且主要集中在大医院,给医生和病人带来了很大的不便。因此,为了降低成本、缩小体积,本文设计了一种基于ARM9微处理器的新型便携式多床位遥测心电监护仪。该监护仪采用Samsung公司的一款以ARM920T为控制器内核的16/32位高速处理器S3C2
[工业控制]
基于<font color='red'>ARM</font>9的无线多床位心电监护仪的设计
基于ARM 的液压系统智能数据采集终端硬件设计
  液压系统具有功率大、响应快及精度高等特点,已经广泛应用于冶金和制造领域。但其故障又具有隐蔽性、多样性、不确定性及因果关系复杂等特点,故障出现后不易查找原因,而且故障发生会带来巨大的经济损失。通常,液压系统只能靠定期检查和维护来排除故障,这种方法有一定的滞后性。因此需要实时监测液压系统的状态数据并及时分析以减少故障率,确保工程机械正常、连续运行。传统单片机已广泛应用于数据采集和处理中,虽然其价格便宜、易于开发,但是在存储空间和网络传输方面往往难以满足工程上的要求。因此,笔者针对液压系统采用了基于ARM 的数据智能采集终端。   采集终端通过分布在液压系统各处的传感器对油压、流量和温度3 类信号进行采集,并将采集到的信号进行滤波
[单片机]
基于<font color='red'>ARM</font> 的液压系统智能数据采集终端硬件设计
arm汇编语言中bne 1b是什么意思
bne - branch if nemachines: base syntax: bne $soffset8 format: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0f-op4f-condf-soffset80xd0x1soffset8 semantics:(if (not zbit) (set pc soffset8))也就是如果zbit不等于0,那么就跳转到offset8处执行 bne里的1b是向后跳转到局部标签1处执行,b表示backward 对应的还有bne 1f(向前跳到局部标签1处执行) 1: ;A cmp r0, #0 beq 1f ; r0==0那么向前跳转到B处执行 bne 1b
[单片机]
Arm推出全新显示解决方案,提升用户体验新境界
Arm今日宣布 推出 全新显示解决方案,其中包含Mali-D71显示处理器、CoreLink MMU-600和Assertive Display 5。新显示解决方案以Arm IP为 开发基础,提升设备效能,并采用智能解决方案应对所有来自显示技术的挑战。 Arm计算产品事业群营销总监Ian Hutchinson表示,“Arm在显示技术领域有着丰富的发展历史。2013年,Arm通过并购成立了现在的显示IP产品线,随后,第一代显示处理器IP接踵而至。2016年,我们发布了Mali-DP650并完成了Apical的并购,将Assertive Display纳入产品阵营。为了应对显示技术在虚拟现实, 高动态范围, 多窗口模式以及众多面
[家用电子]
<font color='red'>Arm</font>推出全新显示解决方案,提升用户体验新境界
ARM不满足移动终端称霸 进军PC市场
移动终端设备的崛起,让“默默无闻”的ARM处理器迅速崛起,在市场上甚至与老牌芯片巨头英特尔一较高下。虽然二者的主要针对市场似乎并没有多少交集,但对于ARM来说,移动市场如今已经很难满足其胃口,在微软和英特尔之间横插一脚就已经证明其开始进军PC市场。特别是Wintel阵营的破解,Windows 8 RT版的出现都显现了其“野心”。     英特尔与微软的数年来牢不可破的阵营“Wintel”被ARM打破,让英特尔开始认识到ARM的野心。ARM之所以在处理器市场上大受欢迎的原有主要有两点,一是ARM功耗目前要远远低于后者,而这种低功耗的芯片在手机及移动终端甚至电脑上都非常受欢迎。二则是价格上的优势,从当前市场来看,ARM
[单片机]
arm-linux启动后屏幕不断闪烁
这几天郁闷啦。arm-linux启动后屏幕不断闪烁。记得以前也遇到过这样的问题,却忘了怎么解决的,现在把它记下来,博客在,他就在。 先是,开机后停在屏幕校准界面,十字叉停在那,怎么点都进不去系统。我就把NANDFLASH擦掉,再下载,再烧,结果七整八整,开机就显示个优龙科技,连个校准界面都没有了。接上超级终端后,超级终端上屁都不显示一个。这样想擦写FLASH都没办法了,烦啊。(进入WINDOWS CE还可以) 实在没办法,就把刘老师请来。他就把JP1跳线帽拔掉,从NORFLASH启动,进入了超级终端的界面,然后再把NANDFLASH擦啊写啊的。可是,新的问题又出现了:开机后屏幕闪烁不停,同样进不去系统了。于是乎,进
[单片机]
智能电视发烧 新铁三角抢进
网络结合电视的智能电视(Smart TV)议题持续发烧,继Google与英特尔、索尼(Sony)合作推出智能电视Google TV平台及产品后,雅虎也将于本周在美国举办的安谋(ARM)科技论坛中,宣布与ARM、三星等业者共推智能电视平台,以抢食这块新兴大饼。三星并宣布年底前捆绑该平台的智能电视产品将于全球39个国家同步开卖。 苹果公司9月初才刚推出的智能电视机顶盒Apple TV,不到2个月已卖出25万台,随后英特尔、Google、新力等业者在英特尔开发者论坛(IDF)中宣布合作,推出Google TV平台及产品,如今雅虎也结合了ARM、三星等业者,将于本周宣布推出智能电视平台及服务。 受惠于网络传输带宽提高,以及
[家用电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved