ARM汇编语言要点(二)

汇编器参考:

19. 命令语法
armasm {options} { inputfile}
其中options的值可以为
--arm 指示汇编器将指令解释为ARM指令,但不保证对象文件中仅包含ARM代码,缺
省值
--cpu name 设置目标cpu
--debug 指示汇编器生成DWARF调试表
--keep 保留局部符号来辅助调试
--depend dependfile 指示汇编器将源文件相关性列表保存到dependfile中。适合于make
使用程序一同使用。
--device=name 选择特定设备并设置相关的处理器设置。
--fpmode model 指示浮点一致性,并设置库属性和浮点优化。
--fpu name 选择目标浮点单元(FPU)体系结构。
--library_type=lib 启用相关库选择以供链接时用。
standardlib 指定在链接时选择完整的 ARM 运行时库。 这是缺省设置。
microlib 指定在链接时选择 C 微型库 (microlib) 。
-o filename 命名输出对象文件。如果未指定此选项,则汇编器创建inputfilename .o格式的对象文件名。此选项区分大小写。
--cpu name 设置目标 CPU。如果为错误的目标 CPU汇编某些指令,这些指令会产生错误或警告.
--fpu name 选择目标浮点单元 (FPU) 体系结构。


20. 源语句行格式
{symbol } { instruction |directive|pseudo-instruction } {;comment}

21. 预定义的寄存器和协处理器名称
下列寄存器名称是预先声明的:
• r0-r15 和 R0-R15
• a1-a4(参数、结果或暂存寄存器,r0 到 r3 的同义词)
• v1-v8(变量寄存器,r4 到 r11 )
• sb 和 SB(静态基址,r9 )
• ip 和 IP(内部过程调用暂存寄存器,r12 )
• sp 和 SP(堆栈指针,r13 )
• lr 和 LR(链接寄存器,r14 )
• pc 和 PC(程序计数器,r15 )

以下扩展寄存器名称是预先声明的:
• q0-q15 和 Q0-Q15 (NEON™ 四字寄存器)
• d0-d31 和 D0-D31 (NEON 双字寄存器,VFP 双精度寄存器)
• s0-s31 和 S0-S31 (VFP 单精度寄存器)
下列协处理器名称和协处理器寄存器名称是预先声明的:
• p0-p15 (协处理器 0-15)
• c0-c15 (协处理器寄存器 0-15)

22. 内置变量和常数

23. 符号

 符号命名规则
• 符号名在其范围内必须是唯一的。
• 可以在符号名称中使用大写字母、小写字母、数字字符或下划线字符。 符号名是区分大小写的,并且符号名中的所有字符都是有效的。
• 除了在局部标签中外,不要使用数字字符作为符号名的第一个字符(请参阅第3-27 页的局部标签)。
• 符号不得使用与内置变量名称或预定义符号名称相同的名称(请参阅第3-19 页的预定义的寄存器和协处理器名称和第3-21 页的内置变量和常数)。
• 如果使用了与一个指令助记码或指令相同的名称,应使用双竖杠来定界符号名。 例如:||ASSERT||竖杠不是符号的一部分。
• 不得使用符号 |$a|、|$t|、|$t.x| 或 |$d| 作为程序标签。 这些是用于标记对象文件中的 ARM 、Thumb 、ThumbEE 和数据的映射符号。
如果必须在符号中使用更宽的字符范围(例如在使用编译器时),应使用单竖杠来定界符号名。
例如:|.text|竖杠不是符号的一部分。
不能在竖杠内使用竖杠、分号或换行符。

 变量
数字、逻辑、字符串三种类型

 数字常数
32位整数,可以使用取值范围在0到 232–1之间的无符号数,或是取值范围在-231到-231之间的有符号数。
但是,汇编器不区分 –n 和232–n。关系运算符(如 >= )使用无符号解释。这意味着0 >–1为{FALSE}。
使用EQU指令定义常数。在定义了数字常数后,就不能改变其值。

 汇编时的变量替换
带$前缀的变量,可表示整行汇编语言或一行中的任何部分。
可替换数字和逻辑变量(转换成十六进制字符串)。
若变量后还有字符,可用点号来表示变量结束。
在竖杠内一般不进行替换,除非是在双引号内的竖杠内。

 标签
程序相对的标签:加上或减去一个数字标签的PC,作为跳转指令的目标地址,或者用于访问嵌入在代码节里的小型数据项。
寄存器相对的标签:加上一个数字常数的命名寄存器。最常用于访问数据节中的数据。
绝对地址:0到232–1的数字常数,直接对内存寻址。

 局部标签
局部标签是 0-99 范围内的数字,可以选择在后面加上一个名称。在一个区域内,同一个数字可用于表示多个局部标签。

局部标签可用于代替汇编语言模块源代码行中的 symbol:
• 即,在没有指令或命令的地方自己单独使用
• 在包含指令的行中使用
• 在包含代码或数据生成指令的行中使用。

局部标签的语法为:
n{routname }
对局部标签的引用语法为:
%{F|B}{A|T} n{routname }
其中:
n 是局部标签的数字。
routname 是当前范围的名称。
% 产生引用。
F 指示汇编器仅向前搜索。
B 指示汇编器仅向后搜索。
A 指示汇编器搜索所有宏命令层。
T 指示汇编器仅查找此宏命令层。
如果既未指定 F,也未指定 B,则汇编器先向后搜索,再向前搜索。
如果既未指定 A,也未指定 T,则汇编器搜索从当前层到最顶层的所有宏,但不搜索较低层的宏。
如果在标签中或在对标签的引用中指定了 routname ,则汇编器将其与最近的前一个 ROUT 指令的名称进行比较。 如果不匹配,则汇编器生成一条错误消息,且汇编会失败。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值