- 1、本文档共90页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章-ARM汇编程序设计
1 ARM伪操作与伪指令 伪操作与伪指令概述 GNU编译环境下的伪操作 ADS编译环境下的伪操作 ARM汇编语言的伪指令 1)伪操作与伪指令概述 伪操作( directive) :汇编语言程序里的一些特殊指令助记符,主要作用是为完成汇编程序做各种准备,在源程序进行汇编时由汇编程序处理,而不是在计算机运行期间由机器执行,只在汇编时起作用,一旦汇编结束,伪操作的使命便随之结束。 1)伪操作伪指令概述 伪指令(pseudo-instruction):特殊指令助记符,不是真正的指令,不在机器运行期间由机器执行,汇编时被替换成合适的ARM或Thumb指令。 1)伪操作与伪指令概述 有两种ARM编译环境 ADS/SDT IDE编译环境:由ARM公司开发,使用了CodeWarrior公司的编译器; 集成了GNU工具的IDE编译环境:由GNU的汇编器as、交叉编译器gcc、和链接器ld等组成。 两种编译环境下的伪操作与伪指令不同 2) GNU编译环境下的伪操作 GNU编译环境下的伪操作可分为以下几类: 数据定义伪操作 字符定义伪操作 汇编控制伪操作 其他伪操作 数据定义伪操作 数据定义伪操作用于为特定类型数据分配存储空间,并进行初始化。常用的数据定义伪操作如下: .byte .word/.long /.int .double .space/.skip .asciz /.string .fill 数据定义伪操作 .byte 语法格式 .byte expr {,expr}… 分配一段字节内存单元,并用expr初始化 示例 .byte 21,48,32,0x13,0xEF 数据定义伪操作 .word/.long/.int 语法格式 .word|.long|.int expr {,expr}….. 分配一段字内存单元,并用expr初始化 数据定义伪操作 .asciz |.string 语法格式 .asciz|.string expr{,expr}… 用于定义字符串expr(以“/0”为结束符) 例 .asciz “I am a student” .string “My God” 字符定义伪操作 用于为数字常量、基于寄存器的值和程序中的标号定义一个字符名称。常用的字符定义伪操作有: .equ .set .global .extern 字符定义伪操作 例 .equ|.set: 语法格式 .equ|.set symbol, expr 字符定义伪操作 global /.extern 语法格式 .global |.extern symbol 声名一个符号可被其它文件引用,相当于声名一个全局变量 汇编控制伪操作 汇编控制伪操作用于控制汇编程序的执行流程,常用的汇编控制伪操包括以下几条 .section .text .data .bss . ifdef,.else及.endif macro、.exitm及.endm .code 16/.thumb .code 32/.arm 汇编控制伪操作 .section、.text、.data与.bss 语法格式 .section name [, flags[, @type[, @entsize]]] 用于定义一个段 例 .section .text ,“x” ;定义一个代码段“x” .section .data ;定义一个数据段 .section .bss ;定义一个未初始化的数据段 单独用.text | .data |.bss 也能定义段 汇编控制伪操作 .global _start .text ;定义一个代码段 .equ num, 20 _start: LDR r0, =src LDR r1, =dst MOV r2, #num MOV sp, #0x400 汇编控制伪操作 构造连接脚本文件 设程序仅由代码、初始化数据、未初始化数据组成;代码存放在0x10000起始的存贮区,数据存放在0x8000000起始的存贮区 .为位置计数器,表示当前位置 .= 为赋值操作,为当前位置赋值 .text 为代码段 :{*(.text)}表示所有代码段置于此 汇编控制伪操作 .align 语法格式 .align {alignment} {,fill} {.max} alignnment:对准方式,默认为4 Fill:填充内容,默认为0 max:填充字节数最大值 通过添加填充字节使当前位置满足一定的对准方式 汇编控制伪操作 .code 16/.thumb与.code 32/.arm 用于选择当前汇编的指令集 语法格式
文档评论(0)