ARM汇编指令:.align理解和用法

发布者:朱颜素韵最新更新时间:2016-04-15 来源: eefocus关键字:ARM  汇编指令  align 手机看文章 扫描二维码
随时随地手机看文章

对齐伪指令ALIGN
对齐伪指令格式:

ALIGN Num

其中:Num必须是2的幂,如:2、4、8和16等。

伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量必须从下一个能被Num整除的地址开始分配。

如果下一个地址正好能被Num整除,那么,该伪指令不起作用,否则,汇编程序将空出若干个字节,直到下一个地址能被Num整除为止。

 

先看以下代码:

    mov r1,r0
    mov r0,#12
    ldr r4,str1
    ldr r3, =str1

    ldr r5,str
    ldr r6,=str
    ldr r7,str

str1:
    .word 7777
str:
    .word 0x33f80000
    .byte 0x88
    .byte 0x77
reset:

    mov r8,#0

这段代码在编译时不会出现任何问题,但是实际在执行中并不会按照预定的要求执行;

编译链接后,通过反汇编如下:

30008000:    e1a01000     mov    r1, r0
30008004:    e3a0000c     mov    r0, #12
30008008:    e59f400c     ldr    r4, [pc, #12]    ; 3000801c
3000800c:    e59f3018     ldr    r3, [pc, #24]    ; 3000802c
30008010:    e59f5008     ldr    r5, [pc, #8]    ; 30008020
30008014:    e59f6014     ldr    r6, [pc, #20]    ; 30008030
30008018:    e59f7000     ldr    r7, [pc, #0]    ; 30008020

3000801c :
3000801c:    00001e61     .word    0x00001e61

30008020 :
30008020:    33f80000     .word    0x33f80000
30008024:    7788          .short    0x7788

30008026 :
30008026:    e3a08000     mov    r8, #0
3000802a:    0000          .short    0x0000
3000802c:    3000801c     .word    0x3000801c
30008030:    30008020     .word    0x30008020

通过反汇编我们可以看出,前面所有的指令都是4的倍数,而在reset这个地址处的指令却不是4的倍数,我们知道ARM是32位处理器,如果在ARM指令状态下,所有指令的执行都是按照4的倍数进行执行的,而到reset这个地址处时,发现地址为30008026不是4的倍数,于是就自动归到30008024处执行,当然会出错了。

在指令出现非对齐情况下,可以在下面插入.align伪指令,如下:

    mov r1,r0
    mov r0,#12
    ldr r4,str1
    ldr r3, =str1

    ldr r5,str
    ldr r6,=str
    ldr r7,str

str1:
    .word 7777
str:
    .word 0x33f80000
    .byte 0x88
    .byte 0x77
    .align
reset:
    mov r8,#0

通过编译后反汇编如下:

30008000:    e1a01000     mov    r1, r0
30008004:    e3a0000c     mov    r0, #12
30008008:    e59f400c     ldr    r4, [pc, #12]    ; 3000801c
3000800c:    e59f3018     ldr    r3, [pc, #24]    ; 3000802c
30008010:    e59f5008     ldr    r5, [pc, #8]    ; 30008020
30008014:    e59f6014     ldr    r6, [pc, #20]    ; 30008030
30008018:    e59f7000     ldr    r7, [pc, #0]    ; 30008020

3000801c :
3000801c:    00001e61     .word    0x00001e61

30008020 :
30008020:    33f80000     .word    0x33f80000
30008024:    7788          .short    0x7788
    ...

30008028 :
30008028:    e3a08000     mov    r8, #0
3000802c:    3000801c     .word    0x3000801c
30008030:    30008020     .word    0x30008020

加上.align汇编语句后,指令就对齐!

 

.align $

关键字:ARM  汇编指令  align 引用地址:ARM汇编指令:.align理解和用法

上一篇:使用keil判断ARM的冷启动和热启动的方法
下一篇:arm条件执行

推荐阅读最新更新时间:2024-03-16 14:50

基于嵌入式Web服务器的远程控制系统的实现
    随着计算机技术和网络通信技术的飞速发展,人们日常生活和工业生产等方面对基于以太网进行远程通信和控制的要求日益强烈。目前市场上虽已有成熟的Web服务器可供远程控制系统选择,但多是基于通用计算机或专用服务器,体积及成本不适合小型控制系统,尤其是在一些环境恶劣,不易值守或无法安装计算机控制系统的场所。如今嵌入式技术发展迅速,嵌入式处理器的性能不断提高,基于嵌入式的控制系统得到广泛应用。考虑到嵌入式系统高性能、低成本、低功耗等诸多特点,这里通过32位嵌入式处理器和以太网控制器构建了嵌入式Web服务器,实现设备远程控制。 1 远程控制系统的硬件结构     基于嵌入式Web服务器的远程控制系统主要由嵌入式Web服务器以及被控
[嵌入式]
Atmel推出高性能32位 ARM Cortex-M3 RISC 处理器
    SAM3N 系列是Atmel以高性能32位 ARM Cortex-M3 RISC 处理器为基础的 Flash 微控制器系列的成员。全新 ARM-based 微控制器系列具有高处理能力与大量功能特性,如系统控制、传感器接口、64k至256kByte快闪存储器选项、连接能力和使用者接口支援等。这些元件嵌入 了丰富的周边功能集,包括ADC/DAC、多达16个计时器和4个支援ISO7816 标准的UART。     该系列是针对消费性、工业控制、计量、玩具、医疗、测试和测量、802.15.4无线网络,以及电脑、手机与游戏周边等应用的通用型微控制器,具有高性能、低功耗、可扩充内存、低接脚数、可选封装及支持电容器式触控的优势。SAM3
[手机便携]
基于ARM的嵌入式网络接口控制器设计
  1 前言   以太网作为目前应用最为广泛的局域网技术,在工业自动化和过程控制领域得到了越来越的应用。传统的控制系统在信息层大都采用以太网,而在控制层和设备层一般采用不同的现场总线或其他专用网络。目前,随着工业以太网技术的发展,以太网已经渗透到了控制层和设备层。基于以太网的控制网络最典型的应用形式是Ethernet+ICP/IP,它的底层是Ethernet,网络层和传输层采用国际公认的标准TCP/IP.然而大量的工业现场设备,如数控机床、机械手等设备,这些设备最常用的通讯方式为RS-232/485/422串行接口,不具备网络接口,以至无法直接接到以太网。   随着半导体产业和集成电路技术的发展,以微控制器/微处理为硬件核心的
[单片机]
基于<font color='red'>ARM</font>的嵌入式网络接口控制器设计
采用ARM的PWM模块的超声波检测系统的设计
   近年来以微电子学和计算机技术为基础的信息技术飞速发展,超声无损检测仪器也得到了前所未有的发展动力,为了提高检测的可靠性和提高检测效率,研制数字化、智能化、自动化、图像化的超声仪是当今无损检测领域发展的一个重要趋势。而传统的超声波检测仪存在准确性差、精度低、体积大、功耗大、人机界面不友好等问题。而超声波发射与控制电路正是在一种基于ARM的超声波检测系统的基础上,以ARM微控制器为核心,使用C语言编程,方便地实现了发射频率与激励电压脉冲幅度的调节。   1 超声波检测系统的总体设计结构   基于ARM超声波检测系统的总体结构框图,如图1所示。该系统主要由3部分组成:超声波前端发射接收电路、DSP和ARM处理器。  
[单片机]
采用<font color='red'>ARM</font>的PWM模块的超声波检测系统的设计
Arm DesignStart项目再度扩容,加速基于Linux的嵌入式设计
新闻摘要: DesignStart项目进一步扩容,现可快速使用Arm旗下功耗最低、支持Linux的应用处理器Cortex-A5 开发人员可加速展开功能丰富的嵌入式和物联网SoC应用设计,涵盖医疗、智能家居、网关和可穿戴设备等领域 DesignStart项目通过提供价格合理的IP,结合支持Arm的各种中间件和应用程序,为支持Linux的SoC提供成本最低的开发路径 中国上海 – 2018年10月22日 – Arm宣布将其DesignStart项目进一步升级,在Cortex-M0和Cortex-M3的基础上,又将其功耗最低、面积效率最高的应用处理器Cortex-A5纳入该项目,帮助开发人员在高级设计中轻松访问支持Lin
[半导体设计/制造]
arm架构与体系结构
1.cpu与soc 内核版本号与soc版本号由arm公司确定。 芯片型号由各半导体公司确定。 soc包括cpu与一些基本内设。(一般提到CPU都指的是soc,实际上cpu只是soc的一部分)。 RISC与CISC RISC复杂指令集:指令繁多,但是效率高。Intel等桌面pc使用这种指令集。功耗大。 CISC精简指令集: 指令少,但是效率略低。优点是功耗低适合嵌入式设备。 统一编址&独立编址   内存通过CPU的地址总线来寻址定位,然后通过CPU数据总线来读写。CPU的地址总线的位数是CPU设计时确定的,因此一款CPU所能寻址的范围是一定的,而内存是需要占用CPU的寻址空间的。内存与CPU的这种总线式连接方式是一种直接连接
[单片机]
<font color='red'>arm</font>架构与体系结构
ARM定义特殊寄存器
以前老是对ARM程序中(*(volatile unsigned long *))不理解,今天看了两篇文章,觉得对理解这个很有用,当然这个不止在定义内部特殊寄存器有用,在用到外部总线时,根据具体情况,定义外部器件的地址也可以用。 下面是文章一 终于理解了#define SREG (*(volatile unsigned CHAR *)0x5F) 以前看到#define SREG (*(volatile unsigned CHAR *)0x5F) 这样的定义,总是感觉很奇怪,不知道为什么,今天终于有了一点点心得,请大虾们多多批砖~~~ 嵌入式系统编程,要求程序员能够利用C语言访问固定的内存地址。既然是个
[单片机]
LG基于Arm平台实现数字电视处理性能的巨大飞跃
数字电视 (DTV) 正在演变为具有更丰富用户体验的多功能设备。除了如今已经大行其道的高品质视频流媒体服务,数字电视还提供诸如视频通话、健康和健身应用、游戏等功能。同时,用户体验也在不断改善,响应速度更快,人工智能 (AI) 功能日益增多,而且随着屏幕尺寸持续扩大,高清晰度 4K 用户界面 (UI) 也已然问世。 所有这些趋势都对数字电视平台提出了越来越高的算力需求。因此,数字电视的系统级芯片 (SoC) 需要采用更高性能的 CPU 和 GPU。 LG 追求更高性能 LG 是一家积极追求更高性能数字电视 SoC 的公司。这家消费类电子和家用电子公司在本周的 CES 2024 上推出了全新 OLED 电视,基于四核 Arm
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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