本站首页    管理页面    写新日志    退出


«July 2025»
12345
6789101112
13141516171819
20212223242526
2728293031


公告

☆★☆★☆★☆★☆★☆
生活的点点记录,以及一些体会...........

喜欢是淡淡的爱,爱是深深的喜欢.

时间会见证一切.......................

欢迎大家指出错误,共同进步..........

期待中..............................

☆★☆★☆★☆★☆★☆


我的分类(专题)

日志更新

最新评论

留言板

链接

世纪音频

 

 


Blog信息
blog名称:
日志总数:162
评论数量:312
留言数量:0
访问次数:939701
建立时间:2005年5月17日




[Arm_Embeded]ARM汇编语言小结
文章收藏

oceanblue 发表于 2008/4/3 9:14:52

 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浮点寄存器定义名称,方便程序员记忆该寄存器的功能,所以以该寄存器取的名称一般与该寄存器的功能有关.


阅读全文(3054) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.141 second(s), page refreshed 144754912 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号