杭州平望科技
   
首页 关于平望 产品中心 服务中心 FAQ 方案与案例 联系我们 论坛BBS

 嵌入式系统提供商

    杭州平望科技与国内多家著名工控厂商建立了战略合作伙伴关系, 同时是台湾元太(PVI)液晶产品的中国区授权代理。 可为用户提供基于ARM架构主板、X86架构主板、嵌入式2.5 3.5 5.25寸主板、嵌入式PC104主板、单板电脑、 嵌入式PC104扩展卡、GPRS模块,数据采集模块,串口/以太网转换模块,2.5寸-17寸宽温、高亮真彩TFT工业 模拟液晶屏、数字液晶屏,触摸屏、触摸显示器,并可根据客户的需求提供完善的液晶驱动解决方案。

ARM嵌入式硬件方案

基于ARM、CPLD、FPGA、DSP等系列嵌入式微处理器,可运行Linux、Wince等操作系统嵌入式硬件平台

工控板液晶搭配方案

X86架构主板及工控机,2.5寸-17寸宽温、高亮真彩TFT液晶屏,提供液晶驱动解决方案
 
首 页 >  问题内容 
ARM汇编语言小结

ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令作成.

ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令.

    伪操作,是ARM汇编语言程序里的一些特殊的指令助记符,其作用主要是为完成汇编程序做各种准备工作,在源程序运行汇编程序处理,而不是在计算机运行期间有机器执行.也就是说,这些伪操作只是汇编过程中起作用,一旦汇编结束,伪操作的使命也就随之消失.

    宏指令,是一段独立的程序代码,可以插在程序中,它通过伪操作来定义,宏在被使用之前必须提前定义好,宏之间可以互相调用,也可自己递归调用.通过直接书写宏名来使用宏.并本具宏指令的格式输入输出参数.宏定义本身不产生代码,只是在调用它时把宏体插入到原程序中.宏与C语言中的子函数形参和实参的调用相似,调用宏时通过实际的指令来  代替宏体实现相关的一段代码,但宏的调用与子程序的调用有本质的区别,既宏并不会节省程序的空间,其优点是简化程序代码,提高程序的可读性以及宏内容可以同步修改.

    伪操作,宏指令一般与编译程序有关,因此ARM汇编语言的伪操作,宏指令在不同的编译环境下有不同的编写形式和规则.目前常用的ARM编译环境有2种.

    伪指令也是ARM
 伪指令也是ARM汇编语言程序里的特殊助记符,也不在处理器运行期间由机器执行,他们在汇编时将被合适的机器指令代替成ARM或Thumb指令,从而实现真正的指令操作.
常见的ARM编译环境有2种:

      1.       ADS/SDT IDE:ARM公司开发,使用了CodeWarrior公司的编译器.

      2.       集成了GNU开发工具的IDE开发环境;它由GNU的汇编器as,交叉汇编器gcc和连接器id组成.

ADS编译环境下的ARM伪操作和宏指令:

1.       符号定义伪操作

2.       数据定义伪操作

3.       汇编控制伪操作

4.       &
伪指令也是ARM汇编语言程序里的特殊助记符,也不在处理器运行期间由机器执行,他们在汇编时将被合适的机器指令代替成ARM或Thumb指令,从而实现真正的指令操作.

常见的ARM编译环境有2种:

      1.       ADS/SDT IDE:ARM公司开发,使用了CodeWarrior公司的编译器.

      2.       集成了GNU开发工具的IDE开发环境;它由GNU的汇编器as,交叉汇编器gcc和连接器id组成.

ADS编译环境下的ARM伪操作和宏指令:

1.       符号定义伪操作

2.       数据定义伪操作

3.       汇编控制伪操作

4.       框架描述伪操作

5.       信息报告伪操作

6.       其他伪操作

1.       符号定义伪操作,用于定义ARM汇编程序中的变量,对变量进行赋值以及对定义存储器的名称.

1.1   GBLA,GBLS,GBLL

GBLA,GBLL,GBLS伪操作用于声明一个ARM程序中的全局变量,并在默认情况下初始化.

GBLA声明一个全局的算术变量,并将其初始化成0;

GBLL声明一个全局的逻辑变量,并将其初始化为FALSE;

GBLS声明一个全局的字符串变量,并将其初始化为””.

语法:Variable

使用说明:GBLX声明的变量在其作用范围内必须唯一,即同名变量只能在作用范围内出现一次.如果用这些伪操作声明已经声明的变量,则变量的值将被初始化成第2次声明语句中的值.全局变量的作用范围为包含该变量的源程序.

举例:

GBLA   arithmetic ;声明一个全局的算术变量.

Arithmetic  SETA  0xff; 变量赋值为0XFF

SPACE  arithmetic;  使用该变量

GBLL  logical ;    声明一个全局的逻辑变量logical

Logical SETL{TRUE}; 变量赋值为True

1.2   LCLA,LCLL,LCLS

       LCLA,LCLL,LCLS 伪操作,用于声明一个ARM程序中的局部变量,并在默认情况下初始化.

       LCLA声明一个局部的算术变量,并将其初始化成0;

       LCLL 声明一个局部的逻辑变量,并将其初始化成{FALSE};

       LCLS声明一个局部的字符串变量,并将其初始化成””.

   语法 Variable

   使用说明: 如果用这些伪操作声明已经声明的变量,则变量的值将被初始化成第2次声明语句中的值.局部变量的作用

   范围为包含该局部变量的宏代码的一个实例,即局部变量一般只用在宏代码中.

   举例:

       MACRO    ;   声明一个宏

       $label message $a; 宏的原形,宏的名字为message ,有一个参数$a

       LCLS string;    声明一个局部变量string

       string SETS “error”; 向该变量赋值

       $label ;

       INFO 0 ,”string”:CC: :STR:$a ; 使用变量

      MEND ;        宏定义结束.

 1.3 SETA,SETL,SETS

      SETA,SETL,SETS伪操作语句为ARM程序中的全局或局部变量的赋值语句

      SETA给一个全局或局部算术变量赋值

      SETL给一个全局或局部逻辑变量赋值

      SETS给一个全局或局部的字符串变量赋值

     语法  Vaiable expr

     使用说明:在向变量赋值前,必须先声明变量.

     举例:

     GBLA  arithmetic ;   声明算术变量

     arithmetic SETA oxEF; 赋值

     SPACE arithmetic;    运用算术变量

     GBLL  logical;          声明逻辑变量

     logical  SETL{TRUE}; 赋值

1.4 RLIST

     RLIST为一个通用寄存器列表定义名称

     语法 name RLIST {list of registers}

     name 是将要定义的寄存器名称,{list of registers }为通用寄存器列表.

     使用说明: RLIST伪操作用于通用寄存器列表定义名称.定义的名称可以在LDM/STM指令中使用,即这个名字代表了一个通用寄存器列表,在LDM/STM指令中,寄存器列表中的寄存器的访问次序,总是先访问编号较底的寄存器,再访问编号教高的寄存器.也可以说,是编号低的寄存器对应于寄存器的低地址,而不管寄存器列表中寄存器的排列顺序.但为了编程的统一性,寄存器列表中各个寄存器一般按编号由低到高排列.

     举例:

     List  RLIST {R0-R3}; 将寄存器R0-R3列表的名字定义为List;

     STMDF SP! List;          保存寄存器列表List;

1.5 CN

     CN为一个协处理器的寄存器定义名称.

     语法 name CN expr

     其中name 为协处理器的寄存器的名称,expr为数值范围为0-15

     举例:

      Power CN 6;  将协处理器的寄存器6的名字定义为Power

1.6CP

    CP为一个协处理定义名字

    语法  name CP expr

    其中name 为协处理器的名称,expr为数值范围为0-15

    举例:    Dzx CP 6;  将协处理器6的名字定义为Dzx

1.7 DN,SN

    DN 为一个双精度的VFP寄存器定义名称.

    SN为一个单精度的VFP寄存器定义名称.

    语法:  name DN expr

              name SN expr

      其中name 为将要定义的VFP寄存器的名称.expr为VFP双精度寄存器编号(0~15)或者单精度寄存器的编号(0~31).

      使用说明:

      DN,SN伪操作用于给一个VFP寄存器定义名称,方便程序员记忆该寄存器的功能,所以以该寄存器取的名称一般与该寄存器的功能有关.

    举例:

    height DN 6; 将VFP双精度寄存器6名称定义为height

    width SN 20;将VFP单精度寄存器20名称定义为width

1.8 FN

    FN为一个FPA浮点寄存器的名称.expr为 浮点寄存器的编号,数值为0~7.

   使用说明:

     FN伪操作用于给一个FPA浮点寄存器定义名称,方便程序员记忆该寄存器的功能,所以以该寄存器取的名称一般与该寄存器的功能有关.

法律公告 | 友情链接 | 人才招聘 | 联系我们 | 企业邮局 |
ARM主板 | 凌动主板 | 工控主板 | 工业液晶屏 | 固态硬盘 |
© 2007-2008 www.pvontek.com All rights reserved. 版权所有 杭州平望科技有限公司 浙ICP备07032065号
地址:杭州市滨江区南环路3730号源越大厦4层 电话:0571-88868188 邮箱:sales@pvontek.com