系统学习ARM之四 --GNU的伪指令集

发布者:JoyfulSunflower最新更新时间:2018-05-06 来源: eefocus关键字:系统学习  ARM  GNU  伪指令集 手机看文章 扫描二维码
随时随地手机看文章

转载自http://blog.csdn.net/qqliyunpeng/article/details/48791487


一、伪指令 的含义:

    伪指令是编译器支持的指令,不是硬件芯片支持的指令。

    编译器在编译时,会把伪指令转化对应的芯片支持的指令。

        伪指令集包括:伪操作和伪指令

二、伪操作:

1. 数据定义(Data Definition)伪操作:

    数据定义伪操作一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。 

    常见的数据定义伪操作有如下几种:

         .byte                 单字节定义                .byte     0x12,’a’,23

         .short                定义2字节数据 .short    0x1234,65535

         .long /.word     定义4字节数据 .word     0x12345678

         .quad                 定义8字节 .quad     0x1234567812345678

         .float                  定义浮点数 .float    0f3.2

         .string/.asciz/.ascii   定义字符串   .ascii   “abcd\0”,

              注意:.ascii  伪操作定义的字符串需要每行添加结尾字符 '\0',其他不需要

例子:

    int val = 0x11223344;

    val:

    .word  0x11223344

    注意:

        1--变量的定义放在,stop后,.end前

        2--标号是地址的助记符,标号不占存储空间。

2. 汇编控制伪操作:

    (1).if .else .endif    ---- 类似c语言里的条件编译

            汇编控制伪操作用于控制汇编程序的执行流程

        .if、.else   .endif伪操作能根据条件的成立与否决定是否执行某个指令序列。

        当.if后面的逻辑表达式为真,则执行.if后的指令序列,否则执行.else后的指令序列;

         .if、.else、.endif伪指令可以嵌套使用。

 

          .if  logical-expressing

         …

          .else

            …

          .endif

    (2).macro,.endm   --- 类似c语言里的宏函数    

        macro伪操作可以将一段代码定义为一个整体,称为宏指令。

        然后就可以在程序中通过宏指令多次调用该段代码。

        其中,$标号在宏指令被展开时,标号会被替换为用户定义的符号。

        宏操作可以使用一个或多个参数,当宏操作被展开时,这些参数被相应的值替换。

   语法格式:

   .macro    {$label} 名字{$parameter{,$parameter}…}

    ……..code

   .endm

注意:先定义后使用

     .macro  func1

        mov r1,#1

        mov r2,#2

        mov r3,#3

    .endm

 

        func1

        func1

        func1

3.  杂项伪操作:

    .arm           .arm                         定义一下代码使用ARM指令集编译

    .thumb      .thumb                    定义一下代码使用Thumb指令集编译

    .section     .section     expr       定义一个段。expr可以使.text   .data.   .bss

    .text           .text {subsection}   将定义符开始的代码编译到代码段

    .data         .data {subsection}   将定义符开始的代码编译到数据段,初始化数据段

    .bss           .bss {subsection}     将变量存放到.bss段,未初始化数据段

    .align       .align{alignment}{,fill}{,max}  通过用零或指定的数据进行填充来使当前位置与指定边界对齐

        .align  4     --- 16字节 2的4次

        .align  (4)   --- 4字节

    .org        .org offset{,expr}    指定从当前地址加上offset开始存放代码,

        并且从当前地址到当前地址加上offset之间的内存单元,用零或指定的数据进行填充

    _start   汇编程序的缺省入口是_ start标号,用户也可以在连接脚本文件中用ENTRY标志指明其它入口点.

    .global/ .globl :用来声明一个全局的符号

    .end       文件结束

    .include 格式:.include “filename”

       包含指定的头文件, 可以把一个汇编常量定义放在头文件中

    .equ    格式:.equ    symbol,    expression

        把某一个符号(symbol)定义成某一个值(expression).该指令并不分配空间.(c语言的 #define)

     #define  PI  3.1415    ==    .equ   PI, 3.1415


 

三、伪指令 :

关键点:伪指令在编译时会转化为对应的ARM指令

    1. ADR伪指令 :    --把标签所在的地址加载到寄存器中

        ADR伪指令为小范围地址读取伪指令,使用的相对偏移

        范围:当地址值是字节对齐 (8位) 时,取值范围为-255~255,

        当地址值是字对齐 (32位) 时,取值范围为-1020~1020。

      语法格式:

         ADR{cond}   register,label

         ADR      R0,  lable

    2. ADRL伪指令: --将中等范围地址读取到寄存器中

        ADRL伪指令为中等范围地址读取伪指令。使用相对偏移

        范围:当地址值是字节对齐时,取值范围为-64~64KB;

        当地址值是字对齐时,取值范围为-256~256KB

        语法格式: 

            ADRL{cond}  register,label

            ADRL        R0,lable

    3. LDR伪指令: LDR伪指令装载一个32位的常数和一个地址到寄存器。

        语法格式:

            LDR{cond}  register,=[expr|label-expr]

            LDR    R0,=0XFFFF0000

        注意: 

        (1)ldr伪指令和ldr指令区分

                ldr r1,=val  @ r1 = val    是 伪指令

                ldr r2,val   @ r1 = *val    是 arm指令

                .val

               .word 0x11223344

        (2)怎么取用ldr伪指令实现长跳转

                ldr  pc,=32位地址

           (3)编码中解决立即数的问题

                用arm伪指令ldr

                0x999  不是立即数,

                ldr r0,=0x999


关键字:系统学习  ARM  GNU  伪指令集 引用地址:系统学习ARM之四 --GNU的伪指令集

上一篇:系统学习ARM之五 --C语言和汇编混合编写
下一篇:系统学习ARM之三 --load/store指令--装载和存储指令

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

利用ARM微处理器和ZigBee模块组成无线串口集线器
1 引言 随着21世纪科学技术的不断进步,无线与移动通信相应得到了迅猛的发展。方便快捷的无线接入和无线 互连等新概念和新产品,已逐渐融入人们的工作领域和日常生活中。由于如今对无线频率的大量使用,使无线频率资源日渐匮乏,短距离宽带无线通信技术受到世界许多国家工业界和研究机构的广泛关注。伴随着各种便携式终端通信设备的增加,人们对短距离的无线与移动通信需求也越来越迫切。无处不在的网络世界,使对各种电器设备实行网络化管理已成为必然趋势。目前小范围内如以太网中对终端设备的管理,主要使用有线方式。近来,随着与无线通信相关的新技术如雨后春笋般涌现出来,大量、廉价和高度集成的无线模块的普及,无线联网技术以其安装成本低、使用方便等特点,在一些不便
[单片机]
利用<font color='red'>ARM</font>微处理器和ZigBee模块组成无线串口集线器
ARM 2015全年服务器份额未破1%
     去年ARM伺服器晶片全球出货仅占不到1%,还远远落后至今仍有高达9成的英特尔x86伺服器晶片市占。ARM企业行销与投资人关系副总裁Ian Thornton坦言,ARM伺服器晶片技术和软体生态系还不够成熟是ARM伺服器至今采用仍不高的两大主因。 尽管ARM近年来积极展现抢攻伺服器晶片市场的企图心,甚至去年还夸下豪语5年后要拿下2成伺服器市场,但根据ARM最新发布的2015年营收报告却显示,去年ARM伺服器晶片全球出货仅占不到1%,还远远落后至今仍有高达9成的英特尔x86伺服器晶片市占。 虽然这2年ARM成功拉拢晶片、硬体系统、软体应用等夥伴,使得伺服器市场开始出现锁定资料中心应用的32位元、64位元ARM伺
[手机便携]
软银收购之后ARM技术员工人数年增26%
集微网消息,软银集团旗下全资子公司安谋发布2017年度第2季(截至9月底为止)财报,营收年增21% 至3.19亿英镑;研发费用年增48%至1.3亿英镑;经调整后的EBITDA(税前、息前、折旧摊提前盈余)年减19%至7,300万英镑;EBIT(税前、息前盈余) 年减53%至3,500万英镑。 根据安谋、软银发布的数据,截至2017年9月底为止安谋技术人员人数达4,555人,较2017年6月底增加286人(6.7%)、较去年同期增加26%。 安谋指出,截至2016会计年度为止的10年期间营收成长幅度每年皆高于成本增幅。 截至上个会计年度末为止,安谋帐上拥有逾12亿英镑、没有任何负债。  在软银的要求下,安谋将加快投资步伐、因此成本增
[手机便携]
ARM筆記:Linux内核移植到JZ2440
一、准备工作: 1、Linux内核:Linux2.6.22.6,可从 www.kernel.org 上下载; 2、交叉工具编译链:arm-linux-gcc-3.4.5-glibc-2.3.6; 3、yaffs2文件代码; 4、ubuntu9.10; 5、JZ2440; 二、内核移植: 1、修改Makefile: 修改内核源码根目录下的Makefile文件 #ARCH ?= arm #CROSS_COMPILE ?=arm-linux- 2、修改晶振 修改arch/arm/mach-s3c2440/mach-smdk2440.c static void __init smdk2440_map_io(void) {
[单片机]
ARM笔记: 裸机实验之存储控制器
S3C2440中共有8个bank每个bank的地址空间为128MB,总共1GB。bank0数据位宽是由硬件选择,其他可由设置相应寄存器来改变。bank0-bank5支持外接ROM和SRAM,bank6和bank7还支持SDRAM(即开发板上的内存),且bank6和bank7的地址空间大小是可变的。 S3C2440对外引出27根地址线ADDR0-ADDR26,访问空间128MB。同时还引出nGCS0-nGCS7,对应bank0-bank7,当访问相应bank时。相应的nGCSx输出低电平选中外设。地址分布图如下。 Steppingstone是cpu内部的RAM有4KB。当cpu上电时硬件选择了从Nand flash启动
[单片机]
<font color='red'>ARM</font>笔记: 裸机实验之存储控制器
ARM中的RO段、RW段和ZI段的区别
1 前言     一直以来对于ARM体系中所描述的RO,RW和ZI数据存在似是而非的理解,这段时间对其仔细了解了一番,发现了一些规律,理解了一些以前书本上有的但是不理解的东西,我想应该有不少人也有和我同样的困惑,因此将我的一些关于RO,RW和ZI的理解写出来,希望能对大家有所帮助。     要了解RO,RW和ZI需要首先了解以下知识。 2 ARM程序的组成     此处所说的“ARM程序”是指在ARM系统中正在执行的程序,而非保存在ROM中的bin映像(image)文件,这一点清注意区别。   一个ARM程序包含3部分:RO,RW和ZI  RO是程序中的指令和常量  RW是程序中的已
[单片机]
加速IoT终端与云端整合 思科/ARM/英特尔另立联盟
近日安谋国际(ARM)、思科(Cisco)、戴尔(Dell)、英特尔(Intel)、微软(Microsoft)及普林斯顿大学边缘(Edge)实验室共同宣布成立OpenFog联盟,希望透过雾运算(Fog Computing)来抢夺物联网一席之地;该联盟可望于2016年初建立初步框架和结构,藉以减少端到端物联网方案整合所需的时间。 据了解,此联盟欲经由开放式架构替云端至物联网端点带来无缝智慧,其核心包括分散式运算、网路和储存及实现物联网全部潜力所需之技术,从而加速雾运算部署。 雾运算架构将计算、通讯、控制和储存资源与服务,分配给用户或靠近用户的设备与系统。OpenFog联盟将藉由白皮书、测试平台和其他方式展示云端架构与边
[物联网]
ARM发布静态存储控制器,提供灵活全面的存储接口
ARM公司日前发布了一系列全新的PrimeCell AMBA 3 AXI静态存储控制器,以此全面支持新的和即将出现存储设备,包括NAND闪存、 NOR闪存, SRAM和高性能仿静态RAM(CellularRAM)设备。 PrimeCell AXI静态存储控制器向设计师提供了单一的IP解决方案,用于使用了CellularRAM和闪存的系统。结合了现有的支持DDR和移动DDR的PrimeCell AXI动态存储控制器,对DDR2的支持也在开发过程中,ARM公司目前已经可以向广泛的应用提供一个完整的、高性能的存储控制器解决方案。 PrimeCell AXI静态存储控制器是可配置的,在保持低成本和PrimeCells预先验证低风险的同
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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