Chinaunix首页 | 论坛 | 博客
  • 博客访问: 97096
  • 博文数量: 24
  • 博客积分: 431
  • 博客等级: 一等列兵
  • 技术积分: 245
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 09:44
文章分类
文章存档

2013年(1)

2012年(23)

分类: 嵌入式

2012-09-23 09:43:43

   ARM汇编程序由指令(ARM指令和伪指令)、伪操作和宏指令组成。
   ARM伪操作:
   GET,通常用于包含定义常量的源文件,如用EQU定义的外设地址,类似于C语言中用include好含头文件。(汇编语言中被包含的文件常以.inc结尾)GET 2440addr.inc
   AREA、ENTRY和END
   AREA操作常用于定义一个段。通常一个ARM源程序至少需要一个代码段。
   ENTRY用于指定程序的入口点。
   END用于告诉汇编编译器源文件已经结束。
   EXPORT和IMPORT
   EXPORT 伪操作用于声明外部标号,即当前标号是本源文件中定义的,在其他文件中可能会被引用。
   IMPORT 伪操作用于告诉编译器当前的符号不是本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号。
   EQU 用于定义常量。提醒,在每条ARM指令前必须有空格,但是用EQU定义常量时,必须顶格写,否则编译器会报错。
   LTORG 用于声明一个文字池,所谓文字池就是一个数据缓冲区。
   ALIGN 伪操作通过调整地址指针使当前位置满足一定的对齐方式。在ARM代码中要求地址符号是字对齐的。
   MACRO和MEND 伪操作用于宏定义。
  MACRO表示宏定义的开始,MEND表示宏定义的结束。用MACRO和MEND定义的一段代码,称为宏体。这样,在程序中就可以通过宏指令多次调用该代码段。
  MACRO
 {$label}MACRO Name {$parameter}{$parameter}……
  ;这里添加自己的代码
 MEND
 MAP和FIELD
 MAP用于定义内存表的首地址,其中MAP也可以用^表示。FIELD用于定义一个内存表中的数据域,其中FIELD可以用#表示。MAP和FIELD组合类似于C语言中定义一个数组,MAP指向数组的首地址,FIELD用于分配数组中的各个元素。
 #define pISR_SWI   (*(unsigned*)(_ISR_STARTADDRESS+0x8))
 强制转换后,可以对pISR_SWI进行赋值,调用。
 _ISR_STARTADDRESS  EQU 0x33FFFF00
 ^ _ISR_STARTADDRESS
 HandleReset    #   4
 HandleUndef    #   4
 HandleSWI      #   4
 HandlePabort   #   4
 HandleDabort   #   4
ARM伪指令:ADRL;LDR;DCD SPACE
  
 
  
      
   
阅读(1832) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~