ARM汇编伪指令详解(2)

发布者:TranquilDreamer最新更新时间:2016-04-07 来源: eefocus关键字:ARM  汇编  伪指令 手机看文章 扫描二维码
随时随地手机看文章
字(Word):在ARM体系结构中,字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位。

半字(Half-Word):在ARM体系结构中,半字的长度为16位,与8位/16位处理器体系结构中字的长度一致。
字节(Byte):在ARM体系结构和8位/16位处理器体系结构中,字节的长度均为8位。

***********************************************************************************************
 

 在 ARM 汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。   
    在 ARM 的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。


    符号定义( Symbol Definition )伪指令   
    符号定义伪指令用于定义 ARM 汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。   
    常见的符号定义伪指令有如下几种:   
    — 用于定义全局变量的 GBLA 、 GBLL 和 GBLS 。   
    — 用于定义局部变量的 LCLA 、 LCLL 和 LCLS 。   
    — 用于对变量赋值的 SETA 、 SETL 、 SETS 。   
    — 为通用寄存器列表定义名称的 RLIST 。   
    1、 GBLA、GBLL 和GBLS   
    语法格式:   
    GBLA ( GBLL 或 GBLS )全局变量名   
    GBLA 、 GBLL 和 GBLS 伪指令用于定义一个 ARM 程序中的全局变量,并将其初始化。其中:   
    GBLA 伪指令用于定义一个全局的数字变量,并初始化为 0 ;   
    GBLL 伪指令用于定义一个全局的逻辑变量,并初始化为 F (假);   
    GBLS 伪指令用于定义一个全局的字符串变量,并初始化为空;   
    由于以上三条伪指令用于定义全局变量,因此在整个程序范围内变量名必须唯一。   
    使用示例:   
    GBLA Test1 ;定义一个全局的数字变量,变量名为 Test1   
    Test1 SETA 0xaa ;将该变量赋值为 0xaa   
    GBLL Test2 ;定义一个全局的逻辑变量,变量名为 Test2   
    Test2 SETL {TRUE} ;将该变量赋值为真   
    GBLS Test3 ;定义一个全局的字符串变量,变量名为 Test3   
    Test3 SETS “ Testing ” ;将该变量赋值为 “ Testing ” 
 
    2、 LCLA、LCLL 和LCLS   
    语法格式:   
    LCLA ( LCLL 或 LCLS )局部变量名   
    LCLA 、 LCLL 和 LCLS 伪指令用于定义一个 ARM 程序中的局部变量,并将其初始化。其中:   
    LCLA 伪指令用于定义一个局部的数字变量,并初始化为 0 ;   
    LCLL 伪指令用于定义一个局部的逻辑变量,并初始化为 F (假);   
    LCLS 伪指令用于定义一个局部的字符串变量,并初始化为空;   
    以上三条伪指令用于声明局部变量,在其作用范围内变量名必须唯一。   
    使用示例:   
    LCLA Test4 ;声明一个局部的数字变量,变量名为 Test4   
    Test4 SETA 0xaa ;将该变量赋值为 0xaa   
    LCLL Test5 ;声明一个局部的逻辑变量,变量名为 Test5   
    Test5 SETL {TRUE} ;将该变量赋值为真   
    LCLS Test6 ;定义一个局部的字符串变量,变量名为 Test6   
    Test6 SETS “ Testing ” ;将该变量赋值为 “ Testing ” 

 

    3、 SETA、SETL 和SETS   
    语法格式:   
    变量名 SETA ( SETL 或 SETS )表达式   
    伪指令 SETA 、 SETL 、 SETS 用于给一个已经定义的全局变量或局部变量赋值。   
    SETA 伪指令用于给一个数学变量赋值;   
    SETL 伪指令用于给一个逻辑变量赋值;   
    SETS 伪指令用于给一个字符串变量赋值;   
    其中,变量名为已经定义过的全局变量或局部变量,表达式为将要赋给变量的值。   
    使用示例:   
    LCLA Test3 ;声明一个局部的数字变量,变量名为 Test3   
    Test3 SETA 0xaa ;将该变量赋值为 0xaa   
    LCLL Test4 ;声明一个局部的逻辑变量,变量名为 Test4   
    Test4 SETL {TRUE} ;将该变量赋值为真   

 

    4 、 RLIST   
    语法格式:   
    名称 RLIST { 寄存器列表 }   
    RLIST 伪指令可用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在 ARM 指令 LDM/STM 中使用。在 LDM/STM 指令中,列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。   
    使用示例:   
    RegList RLIST {R0-R5 , R8 , R10} ;将寄存器列表名称定义为 RegList ,可在 ARM 指令

LDM/STM中通过该名称访问寄存器列表。

   

    数据定义( Data Definition )伪指令   
    数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。   
    常见的数据定义伪指令有如下几种:   
    — DCB 用于分配一片连续的字节存储单元并用指定的数据初始化。   
    — DCW ( DCWU )用于分配一片连续的半字存储单元并用指定的数据初始化。   
    — DCD ( DCDU )用于分配一片连续的字存储单元并用指定的数据初始化。   
    — DCFD ( DCFDU )用于为双精度的浮点数分配一片连续的字存储单元并用指定的数据初始  
    化。   
    — DCFS ( DCFSU )用于为单精度的浮点数分配一片连续的字存储单元并用指定的数据初   
    始化。   
    — DCQ ( DCQU ) 用于分配一片以 8 字节为单位的连续的存储单元并用指定的数据初始   
    化。   
    — SPACE 用于分配一片连续的存储单元   
    — MAP 用于定义一个结构化的内存表首地址   
    — FIELD 用于定义一个结构化的内存表的数据域    


    1、 DCB   
    语法格式:   
    标号 DCB 表达式   
    DCB 伪指令用于分配一片连续的字节存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为

0 ~ 255 的数字或字符串。 DCB 也可用 “ = ” 代替。   
    使用示例:   
    Str DCB “ This is a test ! ” ;分配一片连续的字节存储单元并初始化。
  
    2、 DCW(或DCWU)   
    语法格式:   
    标号 DCW (或 DCWU )表达式   
    DCW (或 DCWU )伪指令用于分配一片连续的半字存储单元并用伪指令中指定的表达式初始化。   
    其中,表达式可以为程序标号或数字表达式。。   
    用 DCW 分配的字存储单元是半字对齐的,而用 DCWU 分配的字存储单元并不严格半字对齐。   
    使用示例:   
    DataTest DCW 1 , 2 , 3 ;分配一片连续的半字存储单元并初始化。 

  

    3、 DCD(或DCDU)   
    语法格式:   
    标号 DCD (或 DCDU )表达式   
    DCD (或 DCDU )伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。其中,表

达式可以为程序标号或数字表达式。 DCD 也可用 “ & ” 代替。   
    用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严格字对齐。   
    使用示例:   
    DataTest DCD 4 , 5 , 6 ;分配一片连续的字存储单元并初始化。
  
    4、 DCFD(或DCFDU)   
    语法格式:   
    标号 DCFD (或 DCFDU )表达式   
    DCFD (或 DCFDU )伪指令用于为双精度的浮点数分配一片连续的字存储单元并用伪指令中指定的表达式初始化。每个双精度的浮点数占据两个字单元。用 DCFD 分配的字存储单元是字对齐的,而用 DCFDU 分配的字存储单元并不严格字对齐。   
    使用示例:   
    FDataTest DCFD 2E115 , -5E7 ;分配一片连续的字存储单元并初始化为指定的双精度数。 

  

    5、 DCFS(或DCFSU)   
    语法格式:   
    标号 DCFS (或 DCFSU )表达式   
    DCFS (或 DCFSU )伪指令用于为单精度的浮点数分配一片连续的字存储单元并用伪指令中指定的表达式初始化。每个单精度的浮点数占据一个字单元。用 DCFS 分配的字存储单元是字对齐的,而用 DCFSU 分配的字存储单元并不严格字对齐。   
    使用示例:   
    FDataTest DCFS 2E5 , -5E - 7 ;分配一片连续的字存储单元并初始化为指定的单精度数。   

 

    6、 DCQ(或DCQU)   
    语法格式:   
    标号 DCQ (或 DCQU )表达式   
    DCQ (或 DCQU )伪指令用于分配一片以 8 个字节为单位的连续存储区域并用伪指令中指定的表达式

初始化。   
    用 DCQ 分配的存储单元是字对齐的,而用 DCQU 分配的存储单元并不严格字对齐。   
    使用示例:   
    DataTest DCQ 100 ;分配一片连续的存储单元并初始化为指定的值。
  
    7、 SPACE   
    语法格式:   
    标号 SPACE 表达式   
    SPACE 伪指令用于分配一片连续的存储区域并初始化为 0 。其中,表达式为要分配的字节数。   
    SPACE 也可用 “ % ” 代替。   
    使用示例:   
    DataSpace SPACE 100 ;分配连续 100 字节的存储单元并初始化为 0 。  

 

    8、 MAP   
    语法格式:   
    MAP 表达式 { ,基址寄存器 }   
    MAP 伪指令用于定义一个结构化的内存表的首地址。 MAP 也可用 “ ^ ” 代替。   
    表达式可以为程序中的标号或数学表达式,基址寄存器为可选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项存在时,内存表的首地址为表达式的值与基址寄存器的和。   
    MAP 伪指令通常与 FIELD 伪指令配合使用来定义结构化的内存表。   
    使用示例:   
    MAP 0x100 , R0 ;定义结构化内存表首地址的值为 0x100 + R0 。
  
    9、 FILED   
    语法格式:   
    标号 FIELD 表达式   
    FIELD 伪指令用于定义一个结构化内存表中的数据域。 FILED 也可用 “ # ” 代替。   
    表达式的值为当前数据域在内存表中所占的字节数。   
    FIELD 伪指令常与 MAP 伪指令配合使用来定义结构化的内存表。 MAP 伪指令定义内存表的首地址, FIELD 伪指令定义内存表中的各个数据域,并可以为每个数据域指定一个标号供其他的指令引用。   
    注意 MAP 和 FIELD 伪指令仅用于定义数据结构,并不实际分配存储单元。   
    使用示例:   
    MAP 0x100 ;定义结构化内存表首地址的值为 0x100 。   
    A FIELD 16 ;定义 A 的长度为 16 字节,位置为 0x100   
    B FIELD 32 ;定义 B 的长度为 32 字节,位置为 0x110   
    S FIELD 256 ;定义 S 的长度为 256 字节,位置为 0x130 

**********************************************************************************

 DCB 可用 “ = ” 代替

 DCD 可用 “ & ” 代替

 SPACE 也可用 “ % ” 代替

 MAP 也可用 “ ^ ” 代替

 FILED 也可用 “ # ” 代替

关键字:ARM  汇编  伪指令 引用地址:ARM汇编伪指令详解(2)

上一篇:ARM汇编伪指令详解(3)
下一篇:ARM汇编伪指令(1)

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

基于ARM的室内温度控制系统的设计方案
针对我国北方冬季供暖系统的特点及存在的不足,设计了基于嵌入式系统的ARM-Linux 平台及模糊控制技术的室内智能温度控制系统。采用DS18B20 及ZigBee 无线组网技术完成了多点温度采集,采用模糊控制技术实现了室内温度的精确控制,并建立了QT 用户界面,优化了人机交互环境,采用GPRS 技术实现了系统的远程控制,给用户带来很大方便。系统的实现将对减少热能浪费及提高人们生活质量起着重要作用。 在大力提倡节能减排以及追求高质量生活的今天,冬季供暖系统存在的不足日益显现出来。我国北方城市大部分采用集中供暖,在整个供暖期内,无论室内有人与无人,系统全天连续供暖;系统热能的输送是不变的,不能根据室内外温度的变化以及个人对室温的不同
[单片机]
基于<font color='red'>ARM</font>的室内温度控制系统的设计方案
Ubuntu9.10制作ARM交叉编译器
本环境内核版本:Linux ubuntu910 2.6.31-21-generic #59-Ubuntu SMP i686 GNU/Linux 准备软件包如下: bison_13a2.3.dfsg-4build1_i386.deb build-essential_11.4_i386.deb flex_2.5.33-10build1_i386.deb libncurses5-dev_5.6+20071124-1ubuntu2_i386.deb m4_1.4.8-1build1_i386.deb patch_2.5.9-5_i386.deb gcc-3.4.5.tar.gz glibc-2.3.6.tar.gz l
[单片机]
LPC2000系列Proteus仿真+代码 菜鸟的ARM学习笔记
下面就是我学习ARM的第一阶段的记录,这段时间的学习基本上是使用Proteus配合KEIL做简单的实验(最后有实验的目录以及下载地址)。通过该阶段的学习,算是对ARM的基本结构有了了解。 该阶段主要学习资料是《基于PROTEUS的ARM虚拟开发技术》,以及另外一本ARM体系结构的书籍,感觉这类书都差不多。 学习ARM前需要的基础 前辈学习ARM的经验! (我是在嵌入式开发联盟的新人区看的帖子。) 掌握C语言编程。 了解简单的微机算计原理知识,例如二进制,计算机程序的执行过程,总线(数据、地址、控制),软件系统(系统软件与应用软件)。 听说过RISC与CISC,高级语言与低级语言的区别。 最好听说过串行传输与并行传
[单片机]
LPC2000系列Proteus仿真+代码 菜鸟的<font color='red'>ARM</font>学习笔记
意法半导体与中国大学合作开发32位嵌入式系统
ST 为学生培训用嵌入式系统开发实验室提供微控制器、开发工具和产品支持 北京, 2006 年 9 月 12 日 —— 微控制器设计开发的领导厂商意法半导体(纽约证券交易所: STM) ,今天宣布与北京邮电大学 (BUPT) 和北京交通大学 (BJTU) 签订了合作协议,分别在两所大学校园内建立一个微控制器( MCU )实验室,这是 ST 与中国大学携手开发嵌入式应用技术和培训 电子 工程专业学生的大规模合作计划的重要组成部分。 作为 32 位微控制器的主导厂商之一, ST 将向这两所大学提供先进的 32 位 STR7 ARM 微控制器以及开发工具,使学生有机会
[嵌入式]
移植Qt图形界面应用程序到S3C2440 arm开发板
1.进入qt已经写好的一个图形界面应用程序目录里,例如,我的应用程序目录是在/home/czd/qt_project/mp3player/ $ cd /home/czd/qt_project/mp3player/ 发现里面有个mp3player.pro文件 我们在上面已配置好的qt-embedded-linux环境下,编译后自动在/usr/local/目录下生成咯一个Trolltech目录,Trolltech/QtEmbedded-4.5.0-arm/bin/下可以看到qmake这个编译,在/home/czd/qt_project/mp3player/目录下执行下句: $/usr/local/Trolltech/QtEmbedde
[单片机]
基于ARM微处理器LPC2132的智能电动机保护器设计
1 引 言 随着电动机控制中心(MCC)技术的发展,模块化的智能电动机保护器得到了越来越广泛的应用,同时也对电动机保护提出了更高的要求。针对电气监控系统自动化程度越来越高的发展趋势,用低压智能电动机保护控制器作为发电厂低压电动机的保护和测控,是提高电气监控系统运行维护水平的重要手段。 目前传统的8/16位的单片机仍然广泛应用于电气保护中,但是他们仅仅具有基本的测量控制功能,在人机界面、数据查询、监控处理能力比较有限,大部分缺少网络通信功能。在实现自动在线监测领域中,ARM芯片在多目标采集,多层次监测和网络化等方面具有强大的优势。由于LPC2132属于ARM7系列处理器,能对多个采样点进行同时测量,具有强大的数据处理功能。同时,
[应用]
ARM 异常介绍
一、中断概念: CPU 在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程 硬件引起的中断不可预测,随机性 软中断:事先在程序中安排特殊指令,CPU 执行到该类指令时,转去执行相应的一段预先安排好的程序,然后再返回来执行原来的程序 二、ARM 体系异常分类: 复位异常(Reset) 数据异常(Data Abort) 快速中断异常(FIQ) 外部中断异常(IRQ) 预取异常(Prefetch Abort) 软中断异常(SWI) 未定义异常(Undefined interrupt) 三、异常处理伪代码及 7 种异常 异常处理伪代码: R14_ exception_mode = return link SPSR_
[单片机]
基于ARM9内核和嵌入式Linux的网络投影机系统设计
投影机网络化正成为投影机发展过程中的一个重要趋势, 通过标配的有线及无线网络接口或选配的网络适配器, 用户可以通过计算机更方便地向投影机传送显示控制信号, 在投影机上显示输出内容, 可通过计算机来监控管理投影机。 设计开发了一套用于投影机的嵌入式远程监控系统,利用Internet,通过对底层设备驱动编程和上层软件系统的设计开发, 客户端可通过浏览器访问嵌入式系统内置的http 服务器, 将投影机的相关参数直观实时地在Web 页面上显示出来,并且可以实现对于投影机现场相关显示参数的设置。   1 嵌入式计算机系统的特点   嵌入式计算机系统同通用型计算机系统相比具有以下特点:   (1) 嵌入式系统通常面向特定应用。
[单片机]
基于<font color='red'>ARM</font>9内核和嵌入式Linux的网络投影机系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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