ARM汇编伪操作(ARM7TDMI) 命令集

来源:互联网 发布:东华网络教育 编辑:程序博客网 时间:2024/04/29 05:09

ARM汇编伪操作(ARM7TDMI) 命令集

本文链接:http://blog.sina.com.cn/s/blog_574d08530100hzfp.html

1.符号定义伪操作(定义变量,变量赋值,寄存器取别名 相关

操作符  英文对照(个人猜测)           功能                                  语法格式

LCLA  local arithmetic  定义一个局部的算术变量并初始化为0              LCLA 变量名(定义的)

LCLL  local logic       定义一个局部的逻辑变量并初始化为FALSE(false) LCLL 变量名(定义的)

LCLS  local string      定义一个局部的字符串变量并初始化为空串         LCLS 变量名(定义的)

GBLA  global arithmetic 定义一个全局的算术变量并初始化为0              GBLA 变量名(定义的)

GBLL  global logic      定义一个全局的逻辑变量并初始化为FALSE(false) GBLL 变量名(定义的)

GBLS  global string     定义一个全局的字符串变量并初始化为空串         GBLS 变量名(定义的)

SETA  set arithmetic    给一个算术变量(全局或局部)赋值               变量名 SETA 变量值

SETL  set logic         给一个逻辑变量(全局或局部)赋值               变量名 SETL 变量值

SETS  set string        给一个字符串变量(全局或局部)赋值             变量名 SETS 变量值

RLIST registers list    给一个通用寄存器列表定义名称      (定义的)名称 RLIST {寄存器列表}

                                    VFP:矢量浮点预算

SN single name          给一个单精度VFP寄存器定义名称     (定义的)名称 SN VFP寄存器编号

DN double name          给一个双精度VFP寄存器定义名称     (定义的)名称 DN VFP寄存器编号

FN FPA name             给一个FPA浮点寄存器定义名称       (定义的)名称 FN FPA浮点寄存器编号

CP coprocessor          给一个协处理器定义名称            (定义的)名称 CP 协处理器编号

CN coprocessor register name给一个协处理器的寄存器定义名称(定义的)名称 CN 协处理器寄存器编号

注意:

1.(与RLIST相关)在LDM/STM指令中,寄存器列表中的寄存器访问次序总是先访问编号低的寄存器再访问编号高的寄存器。

2.(与SN,DN相关)VFP寄存器编号:单精度寄存器编号范围0-31,双精度寄存器编号范围0-15。

(D0-D15),(S0-S15)不能再用,因为汇编器已经预先定义了。

3.(与FN相关)FPA否点寄存器编号范围0-7。(F0-F7)不能再用,因为汇编器已经预先定义了。

4.(与CP相关)协处理器编号范围0-15。(p0-p15)不能再用,因为汇编器已经预先定义了。

5.(与CN相关)写处理器寄存器编号范围0-15。(c0-c15)不能再用,因为汇编器已经预先定义了。

2.数据定义伪操作(特定数据分配存储单元 已分配存储单元初始化 相关)

操作符 英文对照(个人猜测)   功能 语法格式

DCB   data collocate byte                          分配一片连续的字节存储单元并 赋值 初始化

DCW   data collocate half-word                     分配一段半字内存单元区域(半字对齐)

DCWU  data collocate half-word unaligned           分配一段半字内存单元

DCD   data collocate half-word double              分配一段字内存单元(半字对齐)

DCDU  data collocate half-word double unaligned    分配一段字内存单元区域

DCFS  data collocate float single                  分配一段单精度浮点数内存单元(半字对齐)

DCFSU data collocate float single unaligned        分配一段单精度浮点数内存单元

DCFD  data collocate float double                  分配一段双精度浮点数内存单元(半字对齐)

DCFDU data collocate float double unaligned        分配一段双精度浮点数内存单元

DCQ   data collocate half-word quadruple           分配一个或多个 双子内存块(半字对齐)

DCQU  data collocate half-word quadruple unaligned 分配一个或多个双子内存块

LTORG literal pool origin                          声明一个数据缓冲池(literal pool)

SPACE space (%与SPACE同义)                       分配一片连续的字节存储区域并 初始化 为0

MAP   map   (可用^代替MAP命令)                     定义一个结构化的内存表首地址

FIELD field (可用#代替FIFLD命令)                  定义一个结构化内存表的数据域

DCDO                                               将内存单元的内容初始化为相对地址

DCI   data collocate instructions                  分配一段存放代码的内存单元

3.汇编代码控制伪操作

操作符  英文对照      功能

IF       if           条件判断语句

ELSE     else         条件判断语句

ENDIF    end if       条件结束语句

WHILE    while        循环判断语句

WEND     while end    循环结束语句

MACRO    macro        标识宏定义的开始

MEND     macro end    标识宏定义的结束

MEXIT macro exit      中途跳转出 宏

4.汇编信息报告控制伪操作(程序调试阶段使用)

操作符   英文对照(个人猜测)     功能

ASSERT   assert           

INFO或! information

OPT      options

TTL      title

SUBT     subtitle

5.指令集类型标识伪操作

助记符           英文对照         功能

ARM        arm          指示编译器将要处理的是32位的ARM指令

CODE32     code32       指示编译器将要处理的是32位的ARM指令

THUMB      thumb        指示编译器32位Thumb-2指令或者16位Thumb指令(对于ARM7就是指16位Thumb)

CODE16     code16       指示编译器将要处理的是16位Thumb指令

6.文件包含伪操作

助记符英文对照(个人猜测)       功能

GET      get        将一个源文件包含到当前源文件中,并将被包含的源文件在其当前位置进行汇编处理

INCLUDE  include                  和GET功能相同(INCLUDE=GET)

INCBIN   include bin     将一个文件包含到当前源文件中,被包含的文件不进行汇编处理

7.其他伪操作

助记符  英文对照(个人猜测) 功能

ALIGN     align              设置对齐方式(缺省时,认为对齐到下一个字的位置)

AREA      area               定义一个代码段或数据段

END       end                通知汇编程序它已达到源文件的末尾

ENTRY     entry              声明程序的入口点

EQU       equal(可用“*”代替)为数值常量,标号指定一个符号名称。*是EQU的同义词

EXPORT    export             声明一个符号可以被其他文件引用,相当于声明一个全局变量

GLOBAL    global             和EXPORT功能相同(GLOBAL=EXPORT)

EXPORTAS  export as          将符号导出到目标文件中,该符号与对应的源文件的符号不同

IMPORT    import             通知编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定

                             义的,在本源文件中可以引用该符号。不管该符号在当前汇编中是否被引

                             用,该符号将被加入到本源文件的符号表中

EXTERN    extern             通知编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定

                             义的,在本源文件中可以引用该符号。如果本源文件没有实际引用该符号

                             该符号将不会被加入到本源文件的符号表中

KEEP      keep               指示汇编器将局部符号保留在目标文件的符号表中

NOFP      no flour point instructions  禁止源程序中包含浮点运算指令

REQUIRE   require            指定段之间的相互依赖关系

REQUIRE8  require 8          当前代码中要求数据栈8字节(64)对齐

PRESERVE8 preserve 8         指定当前代码中数据栈是8字节对齐的

ROUT      routine            标记局部变量的作用域范围

8.结构描述伪操作

FRAME ADDRESS          frame address

FRAME     POP          frame pop

FRAME     PUSH         frame  push

FRAME REGISTER         frame register

FRAME RESTORE          frame restore

FRAME RETURN ADDRESS   frame return address

FRAME SAVE             frame save

FRAME STATE REMEMBER   frame state remember

FRAME STATE RESTORE    frame state restore

FRAME UNWIND ON        frame unwind on

FRAME UNWIND OFF       frame unwind off

FUNCTION 或PROC        function/proc   标记一个兼容AAPCS 的函数开始。PROC 和FUNCTION 作用相同

ENDFUNC 或ENDP         endfunction/endp 标记一个遵循AAPCS 规则的函数体结束

 

使用说明

1.AREA

语法格式:AREA sectionname{,attr}{,attr}…

大括号内为可选项

sectionname:段名(注意:段名用数字开头的要用两竖杠括起来,例如:|1_Date|;有些名称是习惯名称,例如|.text|,表示用C编译器生成的代码段或以某种方式与C库关联的代码节

attr:节属性

    ALING (expr):默认4字节对齐;2的expr次方 字节 对齐

    ASSOC (section):指定与本段相关的ELF段,任何时候链接section段必须包含该段(sectionname段)

    CODE  :代码段,只读为 默认属性

    COMDEF:定义通用段,可包含代码或数据。在多个源文件中同名COMDEF段必须相同,否则链接报错

    COMMON :定义一个通用数据段,不包含任何用户数据和代码。被连接时自动初始化为0.各个同名

             COMMON段使用相同的内存空间,各个同名COMMON段大小不一定要相同,连接时以最大尺寸

             的CONMON段所占用的空间为准给CONMON段分配内存

    DATA  :数据段,可读写 为默认属性

    NOALLOC :指定该段为虚段,并不为其在目标系统上分配内存

    NOINIT :指定本 数据段 不被初始化,或可初始化为0.该操作为SPACE/DCB/DCD/DCW/DCQ等伪操作保留

                                                     了内存单元

    READONLY :指定该段为 只读

    DEADWRITE :指定该段为 可读写

2.FUNCTION 或PROC

 语法格式如下:label FUNCTION [{Reglist1} [, {Reglist2}]] 
 Reglist1: 是一个可选的由被调用函数保存的ARM 寄存器列表。如果reglist1 不出现并且调试程序检查寄存器使用情况,则将假定函数符合AAPCS 规则。 
 Reglist2: 是一个可选的由被调用函数保存的VFP 寄存器列表。 
    使用说明
    使用FUNCTION 来标记函数的开始。在为ELF 生成DWARF 调用框架信息时汇编程序使用FUNCTION 来标识一个函数的开始。FUNCTION 将规范框架地址设置为sp 并将框架状 态栈清空。
    每个FUNCTION 伪操作必须有一个相匹配的ENDFUNC 伪操作,也就是说FUNCTION和ENDFUNC 必须成对出现。不能嵌套FUNCTION/ENDFUNC 对,并且它们不能包含PROC或ENDP 命令。
    如果正在使用自己的程序调用标准,可以使用可选的reglist 参数来将有关此备选程序调用标准的信息通知调试程序,并非所有调试程序都支持此功能。详细信息请参阅所用调试器的程序。

参考文章

1. http://www.pvontek.com/fqinfo,19.html

2. http://hi.baidu.com/%CF%EB%B7%C9%B5%C4%B4%FC%CA%F3/blog/item/b99b6f94bee91116d21b70bc.html

3. http://hi.baidu.com/%CF%EB%B7%C9%B5%C4%B4%FC%CA%F3/blog/item/22eec8a4c21865ff9052ee8d.html

原创粉丝点击