1 / 37

大连理工大学软件学院 邱铁 办公楼 409 Tel : 87571521 E_mail: qiutie@dlut

ARM 嵌入式系统结构与编程. 大连理工大学软件学院 邱铁 办公楼 409 Tel : 87571521 E_mail: qiutie@dlut.edu.cn 参考教材: 《ARM 嵌入式系统结构与编程 》 清华大学出版社 2009 年 3 月出版. 本章主要介绍 ARM 汇编语言程序设计规范,以及在汇编语言程序设计中所要注意的问题,最后以大量的实例说明汇编语言程序设计方法。. 第 7 章 汇编语言程序设计. 内容提要. 7 . 1 ARM 编译环境下汇编语句 7 . 2 GNU 环境下汇编语句与编译说明 7 . 3 ARM 汇编语言程序设计规范

Download Presentation

大连理工大学软件学院 邱铁 办公楼 409 Tel : 87571521 E_mail: qiutie@dlut

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ARM嵌入式系统结构与编程 • 大连理工大学软件学院 邱铁 办公楼409 Tel:87571521 E_mail: qiutie@dlut.edu.cn 参考教材:《ARM嵌入式系统结构与编程》 清华大学出版社2009年3月出版

  2. 本章主要介绍ARM汇编语言程序设计规范,以及在汇编语言程序设计中所要注意的问题,最后以大量的实例说明汇编语言程序设计方法。本章主要介绍ARM汇编语言程序设计规范,以及在汇编语言程序设计中所要注意的问题,最后以大量的实例说明汇编语言程序设计方法。 第7章 汇编语言程序设计

  3. 内容提要 • 7.1 ARM编译环境下汇编语句 • 7.2 GNU环境下汇编语句与编译说明 • 7.3 ARM汇编语言程序设计规范 • 7.4 ARM汇编语言程序设计实例解析

  4. 7.1 ARM编译环境下汇编语句 • ARM编译环境下进行汇编语言程序设计的格式 • 汇编语句中的符号规则

  5. ARM编译环境下汇编语句格式 • ADS环境下ARM汇编语句格式如下: • {symbol} {instruction} {;comment} • {symbol} {directive} {;comment} • {symbol}{ pseudo-instruction} {;comment}

  6. ARM编译环境下汇编语句中符号规则 • 1.符号命名规则 • (1)符号由大小写字母、数字、下划线组成,且符号是区分大小写的。 • (2)局部标号可以用数字开头,其他的标号不能。 • (3)符号在其作用范围内必须是唯一的。 • (4)程序中的符号不要与指令助记符或者伪操作同名。

  7. 2.常量 • (1)十进制数,如535、246。 • (2)十六进制数,如0x645、0xff00。 • (3)n_XXX, n表示n进制数,从2~9,XXX是具体的数字。例如:8_3777 • (4)字符常量用一对单引号括起来,包括一个单字符或者标准C中的转义字符。例如‘A’、‘\n’。 • (5)字符串常量由一对双引号以及由它括住的一组字符串组成,包括标准C中的转义字符。 • 如果需要使用双引号”或字符$,则必须用””和$$代替。

  8. 3.变量 • (1)数字变量 • (2)字符串变量 • (3)逻辑变量 • 具体说明参考教材《ARM嵌入式系统结构与编程》第153页的说明

  9. 4.字符串表达式操作 • (1)取符串的长度LEN • 语法格式: • :LEN: A • 功能说明:返回字符串A的长度。

  10. (2)CHR • 语法格式: • :CHR: A • 功能说明:将A(A为某一字符的ASCII值)转换为单个字符。

  11. (3)STR • 语法格式: • :STR: A • 功能说明:将A(A为数字量或逻辑表达式)转换成字符串。

  12. (4)LEFT • 语法格式: • A :LEFT: B • 功能说明:返回字符串A最左端B(B为返回长度)长度的字符串。

  13. (5)RIGHT • 返回一个字符串最右端一定长度的字符串: • A :RIGHT: B • 功能说明:返回字符串A最右端B(B为返回长度)长度的字符串。

  14. (6)CC • 用于连接两个字符串,B串接到A串后面: • A :CC: B

  15. 5.地址标号 • 1)PC相关标号 • 2)寄存器相关标号 • 3)绝对地址

  16. 6.局部标号 • 局部标号的语法格式如下: • n {routname}

  17. 被引用的局部标号语法规则是: • % {F∣B} {A∣T} n {routname} • 其中: • n是局部标号的数字号。 • routname是当前局部范围的名称。 • %表示引用操作。 • F指示汇编器只向前搜索。 • B指示汇编器只向后搜索。 • A指示汇编器搜索宏的所有嵌套层次。 • T指示汇编器搜索宏的当前层次。

  18. 7.2 GNU环境下汇编语句与编译说明 • GNU环境下ARM汇编语言程序设计主要是面对在ARM平台上进行嵌入式LINUX的开发。 • GNU标准中提供了支持ARM汇编语言的汇编器as(arm-elf-as)、交叉编译器gcc ld(arm-elf-gcc)和链接器ld(arm-elf-ld)。

  19. 7.2.1 GNU环境下ARM汇编语句格式 • GNU环境下ARM汇编语言语句格式如下: • {label :} {instruction} {@comment} • {label :} {directive} {@comment} • {label :} { pseudo-instruction} {@comment}

  20. 7.2.2 GNU环境下ARM汇编程序编译 • (1) 预处理 • GNU汇编器as的内部预处理包括:移除多余的间隔符代码中的所有注释,并将字符常量转换为数字值。它不作宏处理和文件包含处理,但这些事情可以交由gcc编译器去做,文件包含可以用.include伪指令来实现。

  21. (2) 注释 • GNU ARM Assembly可识别的注释方式有:C风格多行注释符/* ... */或GNU单行注释符“@”或“#”。 • (3) 符号 • 与C语言基本一致,符号名由字母、数字以及'_'、和'.'组成,大小写敏感。

  22. 2.段与重定位 • 链接器ld用于把多个目标文件合并为一个可执行文件。汇编器as生成的目标文件都假定从地址0开始,ld为其指定最终的地址。链接器ld把目标文件中的每个section都作为一个整体,为其分配运行的地址

  23. 3.符号说明 • (1)label • lable后面要带冒号‘:’,例如:_start: b reset_handler。

  24. (2)给符号赋值 • (3)符号名 • 具体说明请参阅教材《ARM嵌入式系统结构与编程》第158页

  25. 7.3 ARM汇编语言程序设计规范 • 汇编器预定义的寄存器名称 • ARM汇编语言程序设计规范

  26. 汇编器预定义的寄存器名称

  27. ARM汇编语言程序设计规范 • 要提高软件质量必须降低编码阶段的错误率,这需要制定详细的软件编程规范,并培训每一位程序员,最终的结果可以把编码阶段的错误降至10%左右,同时会大大的缩短测试时间。

  28. 1.符号命名规则 • 2.注释 • 3.程序设计的其它要求 • 这三方面的规范要求请参阅教材《ARM嵌入式系统结构与编程》159页

  29. 7.4 ARM汇编语言程序设计实例解 • 在嵌入式系统编程中,与硬件直接相关的最底层代码要用汇编语言来编写; • 本节中所设计的实例,意在帮助读者对嵌入式汇编语言程序设计打下坚实的基础,同时也为嵌入式硬件底层编程做准备。

  30. 求一个数的阶乘(64位结果) • MOV R8 , #20 @低32位初始化为20 • MOV R9 , #0 @高位初始化为0 • SUB R0,R8,#1 @初始化计数器 • Loop: • MOV R1 , R9 @暂存高位值 • UMULL R8 , R9 , R0 , R8 @[R9:R8]=R0*R8 • MLA R9 , R1 , R0 , R9 @R9=R1*R0+R9 • SUBS R0 , R0 , #1 @计数器递减 • BNE Loop @计数器不为0继续循环

  31. 先对内存地址0x3000开始的100个字内存单元填入0x10000001~0x10000064字数据,然后将每个字单元进行64位累加结果保存于[R9:R8]。(R9中存放高32位)先对内存地址0x3000开始的100个字内存单元填入0x10000001~0x10000064字数据,然后将每个字单元进行64位累加结果保存于[R9:R8]。(R9中存放高32位)

  32. _start: • MOV R0 , #0X3000 @初始化寄存器 • MOV R1 , #0X10000001 • MOV R2 , #100 • loop_1: @第一次循环赋值 • STR R1 , [R0],#4 • ADD R1 , R1,#1 • SUBS R2 , R2,#1 • BNE loop_1

  33. MOV R0 , #0X3000 • MOV R2 , #100 • MOV R9 , #0 • MOV R8 , #0 • loop_2: @第二次循环累加 • LDR R1 , [R0],#4 • ADDS R8 , R1,R8@R8=R8+R1,进位影响标志位 • ADC R9 , R9 , #0@R9=R9+C,C为进位 • SUBS R2 , R2 , #1 • BNE loop_2

  34. 在ARM集成开发环境下编程: • AREA Fctrl, CODE, READONLY ; 声明代码Fctrl • ENTRY ; 标识程序入口 • CODE32 ; 声明32 位ARM 指令 • …… • Stop • B Stop • END ;文件结束

  35. 其余实例分请参阅教材《ARM嵌入式系统结构与编程》7.4节其余实例分请参阅教材《ARM嵌入式系统结构与编程》7.4节

  36. 第7章 汇编语言程序设计 The End

More Related