Chinaunix首页 | 论坛 | 博客
  • 博客访问: 520009
  • 博文数量: 257
  • 博客积分: 1666
  • 博客等级: 上尉
  • 技术积分: 1535
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-02 23:02
文章分类

全部博文(257)

文章存档

2013年(2)

2012年(255)

分类:

2012-08-16 12:40:30

原文地址:GUM ARM汇编 作者:犀利哥的故事

windows上用ARM公司的那些工具进行开发的时候,我们用的是ARM ASM,但是在linux环境下开发,用GNU工具的时候,那么我们就是用的是GNU ARM ASM了,所以学习GNU ARM 汇编就很有必要了,在很多地方,我们会看到它的身影,学习了的话,就不会看到一头雾水了。

汇编行的结构:

[<标签>:][<指令>}@注释

GNU ARM 汇编中,任何以冒号结尾的都被认为是一个标签,而不一定非要在一行的开始。

下面就看看常用的这些伪操作指令,记住了的话,看很多地方的代码就没那么痛苦了。

.byte         expr{,expr}… 分配一段字节内存单元,并用expr初始化

.hword/.short   expr{,expr}… 分配一段半字内存单元,并用expr初始化

.ascii         expr{,expr}…  定义字符串expr(非零结束符)

.asciz/.string    expr{,expr}… 定义字符串expr(以/0为结束符)

.float/.single    expr{,expr}… 定义一个32bit IEEE浮点数expr

.double        expr{,expr}…  定义64bit IEEE浮点数expr

.word/.long/.int  expr{,expr}… 分配一段字内存单元,并用expr初始化

.fill           repeat {, size}{.value} 分配一段字节内存单元,用size长度value填充repeat次。

.zero         size         分配一段字节内存单元,并用0填充内存

.space/.skip     size  {,value}   分配一段内存单元,用value将内存单元初始化

.section       expr     定义域中包含的段

.text  {subsection}   将操作符开始的代码编译到代码段或代码段子段

.data  {subsection}   将操作符开始的数据编译到数据段或数据段子段       

.bss   {subsection}    将变量存到bss段或bss段的子段   

.code16/.thumb       表明当前汇编的指令集选择Thumb指令集

.code32/.arm      表明当前汇编的指令集选择ARM指令集

.end            标记汇编文件的结束行

.include         将一个源文件包含到当前源文件

.align/.balign      通过添加填充字节使当前位置满足一定的对齐方式

.macro.exitm .endm   .macro伪操作标识宏定义的开始,.endm标识宏定义的结束。用.macro.endm定义一段代码,称为宏定义体。.exitm伪操作用于提前退出宏。

.ifdef .else .endif        当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句,其中else可以缺省。

.eject           在汇编符号列表文件中插入一分页符

.list          产生汇编列表

.nolist           表示汇编列表结束处

.title “heading”    使用heading作为标题

.sbttl “heading”    使用heading作为子标题

.ltorg            在当前段的当前地址(字对齐)产生一个文字池

.req name,expr     为一个寄存器定义名称

.err               使编译时产生错误报告

.print string        打印信息到标准输出

.fail  expr          编译汇编文件时产生警告

 

 

 

 

 

 

 

 

 

 

阅读(337) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~