ARM汇编程序设计重点.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ARM汇编程序设计重点

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 4.4 GNU ARM汇编语言 GNU汇编程序的常用伪操作 表5. 4给出了GNU ARM汇编常用伪操作。 表5. 4:GNU ARM汇编伪操作 GNU ARM汇编伪操作 说明 ARMASM .pool 作用等同.ltorg LTORG reg_name .reg alias_name 给寄存器reg_name赋予别名alias_name。 .rept num_of_times register_name .endr 循环执行.endr前的代码段num_of_times次; 以.endr结束。 WEN Reg_name .req register_name @ acc .req r0 定义一个寄存器。.req的左边是定义的寄存器名,右边是使用的真正使用的寄存器。例如。 RN .section section_name {,”flags”} 开始一个新的代码或数据段:.text为代码段;.data为初始化数据段;.bss为未初始化数据段。 都有缺省标志,连接器可以识别这些标志。 ELF格段标志:a允许段;w可写段;x执行段。 AREA .set variable_name, variable_value 给变量赋值 SETA .space number_of_bytes{,fill_byte} 分配number_of_bytes字节的数据空间,并填充其值为fill_byte,若未指定该值,缺省填充0。 SPACE .thumb_func 指明一个函数是thumb指令集的函数。 .thumb_set 类似于.set,还可把标号标记为thumb的入口,等同于.thumb_func .unreg alias_name 用来取消一个寄存器的别名alias_name。 .word word1 {,word2} … 插入一个32-bit的数据队列。 DCD 4.4 GNU ARM汇编语言 GNUARM汇编程序特有的符号 GNUARM汇编程序特有的符号如表5. 5所示。 表5. 5:GNUARM汇编程序特有的符号 %r0 - %r15 通用寄存器 %f0 - %f7 FP寄存器: %r0 - %r3, %r12 非保存寄存器 %r4 - %r10 保存寄存器 %sp 堆栈指针寄存器 %fp 帧指针寄存器 %lr 连接寄存器 %ip 程序计数器 $psw 状态寄存器 xPSR (x = Ccurrent、 S saved ) 状态标志寄存器 @ 代码行中的注释符号 # 整行注释符号 ; 语句分离 %a0 - %a3(等同于%r0 - %r3) 参数传递寄存器 # 或$ 直接操作数前缀 %v1 - %v6 (等同于%r4 - %r9) 返回值寄存器 4.4 GNU ARM汇编语言 GNU汇编程序的段声明 数据段 使用.data声明数据段,这个段中声明的任何数据元素都保留在内存中并可以被汇编程序的指令读取,还可以使用.rodata声明只读的数据段。 常用的数据元素声明指令有: .byte、.short、.long、.quad、.float、.double、.int、.long、.string/.asciz/.ascii等。 4.4 GNU ARM汇编语言 GNU汇编程序的段声明 .bss段 和.data段不同,无需声明特定的数据类型,只需声明为所需目的保留的原始内存部分即可。GNU汇编器使用以下两个命令声明内存区域: .comm:声明为未初始化的通用内存区域 .lcomm:声明为未初始化的本地内存区域 两种声明很相似,但.lcomm是为不会从本地汇编代码之外进行访问的数据保留的,格式为: .comm/.lcomm symbol, length 例子: .section .bss .lcomm buffer, 1000 @ 该语句把1000字节的内存地址赋予标号buffer 4.4 GNU ARM汇编语言 GNU汇编程序的段声明 .bss段 在声明本地通用内存区域的程序之外的函数是不能访问的。 在bss段声明的好处是:数据不包含在可执行文件中。在数据段中定义数据时,它必须被包含在可执行程序中,因为必须使用特定值初始化它。因为不使用数据初始化bss段中声明的数据区域,所以内存区域被保留在运行时使用,并且不必包含在最终的程序中。 4.

文档评论(0)

麻将 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档