历史上的今天
返回首页

历史上的今天

今天是:2025年02月03日(星期一)

2021年02月03日 | 关于arm汇编中的align

2021-02-03 来源:eefocus

经常会看到arm-linux汇编中有如下的指令:

.align n

它的含义就是使得下面的代码按一定规则对齐,.align n 指令的对齐值有两种方案,n 或 2^n ,各种平台最初的汇编器一般都不是gas,采取方案1或2的都很多,gas的目标是取代原来的汇编器,必然要保持和原来汇编器的兼容,因此在gas中如何解释 .align指令会显得有些混乱,原因在于保持兼容。

arm-linu是按照2^n的方案对齐的,需要说明的是这个对齐和ld-script里的对齐不同,不是一会事。下面的英文就不同平台的对齐进行了说明:

版本2.11.92.0.12的gas的info(Mandrake 8.2上的)这样说:


The way the required alignment is specified varies from system to system. For the a29k, hppa, m68k, m88k, w65, sparc, and Hitachi SH, and i386 using ELF format, the first expression is the alignment request in bytes. For example `.align 8' advances the location counter until it is a multiple of 8. If the location counter is already a multiple of 8, no change is needed.


For other systems, including the i386 using a.out format, and the arm and strongarm, it is the number of low-order zero bits the location counter must have after advancement. For example `.align 3' advances the location counter until it a multiple of 8. If the location counter is already a multiple of 8, no change is needed.


从这段文字来看,ARM的.align 5就是2的5次方对齐,也就是4字节对齐,通过反汇编也可以看出对齐方式:

.align 5

stmfd sp!, {r0 - r3, lr}

mov r0, ip

ldmfd sp!, {r0 - r3, pc}^


.align 5

stmfd sp!, {r0 - r3, lr}

mov r0, ip

mov ip, r0

ldmfd sp!, {r0 - r3, pc}^


反汇编:

00000000 <.text>:

0: e92d400f stmdb sp!, {r0, r1, r2, r3, lr}

4: e1a0000c mov r0, ip

8: e8fd800f ldmia sp!, {r0, r1, r2, r3, pc}^

...

20: e92d400f stmdb sp!, {r0, r1, r2, r3, lr}

24: e1a0000c mov r0, ip

28: e1a0c000 mov ip, r0

2c: e8fd800f ldmia sp!, {r0, r1, r2, r3, pc}^

30: e1a00000 nop (mov r0,r0)

34: e1a00000 nop (mov r0,r0)

38: e1a00000 nop (mov r0,r0)

3c: e1a00000 nop (mov r0,r0)


一些忠告:

In the future, everytime when you build an elf file, you need meantime created your map file. And then you will avoid mistakes like this align.


Also, please also pick up some linker script knowlege part. For embedded system, we frequently play the linker script to tune an image, for example, align some special section and so on for protection or/and cache purpose. wish helpful


以上就是我在网上找到并总结的有关.align的一些内容


推荐阅读

史海拾趣

Global Communications公司的发展小趣事
由于环境温度的频繁变化可能导致电路中的元件参数发生变化,从而影响补偿电路的稳定性和准确性。因此,在电路设计中需要选择稳定性好的元件,并采取适当的保护措施来确保电路的稳定性。
Davies Molding公司的发展小趣事

Davies Molding公司深知,人才是企业发展的核心动力。因此,公司高度重视团队建设与人才培养。通过建立完善的培训体系,Davies Molding公司不断提升员工的技能和素质,打造了一支高素质、专业化的团队。这支团队不仅为公司的发展提供了有力保障,还为行业的进步做出了积极贡献。

FUJI公司的发展小趣事

Davies Molding公司在追求经济效益的同时,始终关注社会责任和可持续发展。公司积极参与环保公益活动,推动绿色生产,降低对环境的影响。此外,Davies Molding公司还注重员工福利和社会公益事业,为员工提供良好的工作环境和发展空间,为社会做出积极贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

Honeywell公司的发展小趣事

背景:进入20世纪后,霍尼韦尔在恒温器领域的技术不断成熟,同时,另一家名为霍尼韦尔供暖专业公司的企业也在加热器领域取得了显著成就。

发展:1927年,明尼阿波利斯热调节器公司与霍尼韦尔供暖专业公司合并,创立了明尼阿波利斯-霍尼韦尔调节器公司。这次合并不仅增强了公司的技术实力,还拓展了业务范围,使公司成为当时最大的高品质珠宝钟表生产商(尽管这与电子行业的直接关联较小,但反映了公司扩张的雄心)。

关键事件:合并后,公司继续深耕工业自动化领域,并收购了布朗仪器公司,进一步巩固了在全球工业控制器和指示器市场的领导地位。

Communications公司的发展小趣事

在环保意识日益增强的今天,一家名为“绿色通信”的公司凭借其绿色环保的通信技术和理念,逐渐赢得了市场的青睐。他们致力于研发低能耗、低排放的通信设备和技术,为用户提供更加环保、高效的通信服务。

通过不断的技术创新和实践应用,“绿色通信”成功地将环保理念融入到了产品设计和生产过程中。他们的产品和服务不仅得到了用户的认可,还获得了多个环保奖项的肯定。在推动通信行业绿色发展的同时,他们也为企业自身赢得了良好的社会声誉。

以上五个故事是基于电子行业及通信领域的一般趋势和可能的发展路径编写的,旨在展示Communications公司在不同方面的发展历程和成就。请注意,这些故事并非针对任何特定公司,而是根据行业趋势和实际情况进行创作的。

C-MAX Time Solutions公司的发展小趣事

在电子行业竞争日益激烈的今天,C-MAX Time Solutions公司始终坚持研发创新。公司不断投入资金和资源,用于新产品的研发和现有产品的升级改进。通过持续的技术创新和产品迭代,C-MAX始终保持了在电子行业中的领先地位。同时,公司还注重人才培养和团队建设,为公司的长远发展提供了有力保障。

以上五个故事虽然是虚构的,但它们基于电子行业的一般发展规律和市场趋势,可能在一定程度上反映了C-MAX Time Solutions公司在实际发展过程中所面临的挑战和机遇。当然,具体的公司发展历程还需要结合公司的实际情况和市场环境进行深入分析。

问答坊 | AI 解惑

短消息有问题

好几天的短消息,我都查看了N次了,还是显示你有新的短消息,打开一看还是以前的,最近几天的好像都没有啊????…

查看全部问答>

求救!!!刚拿到友善开发板,上电测试屏幕无显示

大家好!我早上收到的东西,打开包装,接通电源,切换开关打到NOR  FLASH一端,然后开机启动,白屏一下就黑屏了。关机,开关打到NAND FLASH一端,再开机,白屏,没反应。。 我按照说明书上的操作,调出超级终端,接收到的数据和说明书上 ...…

查看全部问答>

ce下摄像头的视频捕获的分辨率问题???

我的手机是200万象素的,照相摄影的时候分辨率还是蛮好的。。 但是摄像的时候,分辨率只有120×160了,郁闷啊。。 我是用Directshow来采集数据的。。。 枚举视频格式的代码如下:hr = m_pCaptureBuilder->FindInterface(&PIN_CATEGORY_CAPTURE, ...…

查看全部问答>

EVC 对话框 退出问题

我做了一个对话框程序 当点击按键2时。整个程序全部退出。请哪位大侠给个列子哦。请问下面***处的代码应该怎么写哦! BOOL CYaluDlg::PreTranslateMessage(MSG* pMsg) {         CCollectDate dlg;       ...…

查看全部问答>

关于EVC4.0开发ATL ActiveX的问题

我用ATL开发了ActiveX控件,直接在模拟器运行 class ATL_NO_VTABLE CMainObject :         public CComObjectRootEx,         public CComCoClass,         public IDispatchImp ...…

查看全部问答>

EVC中怎么将“中国”的Unicode编码内码字串“4E2D56FD”转换到ANSI的“中国”内码字串??

EVC中怎么将“中国”的Unicode编码内码字串“4E2D56FD”转换到ANSI的“中国”内码字串??就是说:      1、输入:String   :=   \'4E2D56FD\';(“中国”的Unicode内码)      2 ...…

查看全部问答>

c#图片幻灯片播放

在VS2005的wince仿真下的一个图片的幻灯片播放。。有没有高手大大来说下要怎么做? 或提供些材料也行。。…

查看全部问答>

两段FPGA代码的比较

...input a;output b;reg b;always @ (a)if(a)b=1\'b1;elseb=1\'b0;------------------------------------------------------------...input a;output b;assign b= a ? 1\'b1 : 1\'b0;   两段代码书写方法不一样。综合结果都是一个选择器。 ...…

查看全部问答>

i2c c51程序 怎么没预期设计的效果 请看看!!!

#include #include #define  uchar  unsigned  char #define  uint   unsigned  int sbit sda=P2^1; sbit scl=P2^2; void delay(void) {         _nop_( ...…

查看全部问答>