ARM汇编语言- 模块结构
- 模块示例
- ENTRY 指令
- start 应用程序执行
- stop 应用程序终止
- END 指令
- 调用子例程
- ENTRY 指令
- start 应用程序执行
- stop 应用程序终止
- END 指令
- 调用子例程
- ALU 状态标记
- 条件执行
模块结构
ARM汇编语言是指 ARM 汇编程序 (armasm) 进行分析并汇编生成对象代码的语言。
ARM汇编语言的源代码行的一般格式是:
{label标签} {instruction|directive|pseudo-instruction指令/伪操作/伪指令} {;comment语句注释}
- 标签是表示地址的符号。在汇编期间,将计算由标签指定的地址。
- 指令、伪指令和指令前面必须使用空格或制表符等留出空白。
- 行中的第一个分号标记注释的开始,行的末尾就是注释的结束。
- 大小写规则,指令助记符、指令和符号寄存器名称可以用大写或小写编写,但不能混合使用大小写。
- 反斜杠符 () :在行尾放置反斜杠符 (),可以将较长的源代码行拆分为多个行。不要在带引号的字符串内使用反斜杠。
- 行长度的最大值为 4095 个字符,包括使用反斜杠的任何扩展在内。
- 常数可以是:数字、布尔值、字符、字符串
模块示例
AREA指令是一个伪指令,用于段定义。ARM汇编程序由段组成,段是相对独立的指令或数据单位,每个段由AREA伪指令定义,并定义段的属性。
ENTRY 指令
- ENTRY 标记的是第一个要执行的指令。在包含 C 代码的应用程序中,在 C 库 初始化代码中也包含一个入口点。初始化代码和异常处理程序也包含入口点。
start 应用程序执行
- 应用程序代码在标签 start 处开始执行,并在此处将十 进制值 10 和 3 加载到寄存器 r0 和 r1 中。这些寄存器将一起相加,并且结果将存放到 r0 中。
stop 应用程序终止
- 在执行主代码后,应用程序会将控制权返回调试器,以此来终止执行。 此操作是通过将 ARM 半主机 SVC(缺省为 0x123456)与下列参数结合使用来完成的 r0 等于 angel_SWIreason_ReportException (0x18) r1 等于 ADP_Stopped_ApplicationExit (0x20026)
END 指令
- 此指令指示汇编程序停止处理此源文件。每个汇编语言源模块必须以仅包括 END 指令的一行结束。
调用子例程
- 若要调用子例程,应使用跳转和链接指令,其语法是:BL destination BL 指令:将返回地址存放到链接寄存器中,将pc设置为子例程的地址。 destination是子例程的第一个指令处的标签,也可以是程序相对表达式。
- 在执行子例程代码后,可以使用 BX lr 指令返回。按照约定,寄存器 r0 到 r3 用于将参数传递给子例程,并且 r0 还用于将结果传递回调用方。
ALU 状态标记
- APSR (应用程序状态寄存器)包含下列 ALU 状态标记 N 当运算结果为负值时设置此标记。 Z 当运算结果为零时设置此标记。 C 当运算导致进位时设置此标记。 V 当运算导致溢出时设置此标记。 如果加法的结果大于或等于 2的32次方,减法的结果为正值,或者是移动或逻辑指令中 的内嵌滚筒式移位器运算的结果导致进位,则会产生进位。 如果加法、减法或比较的结果大于或等于 2的31次方 或小于 -2的31次方 ,则会发生溢出。