首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

arm-Linux汇编语法及它和ADS汇编转换的问题(4)

arm-Linux汇编语法及它和ADS汇编转换的问题(4)

    一:ads下的一段汇编程序:    
            __main      
      EXPORT BootReset      
      BootReset      
      B resetvec_reqset      
      IMPORT BootEntry      
      IMPORT |Image$$RO$$Limit|      
      AREA BOOTROM, CODE, READONLY      
      LDR r0, =|Image$$RO$$Limit|      
      BEQ %1      
      ldr pc, [pc,#-&F20]      
      转换到gcc下的汇编程序为:      
      __main      
      .global BootReset      
      BootReset:      
      B resetvec_reqset      
      .extern BootEntry      
      .extern Image_RO_Limit      
      # AREA BOOTROM, CODE, READONLY      
      LDR r0, =Image_RO_Limit      
      BEQ FUNC1      
      ldr pc, [pc,#-0xF20]        
  
      二:将ARM SDT下的汇编码移植到GCC for ARM编译器时,经常要做如下修改:    
            1、注释行以“@”或""代替“;”      
      2、伪操作符替换:      
      INCLUDE 替换成 .INCLUDE      
      TCLK2 EQU PB25 替换成 .equ TCLK2, PB25      
      EXPORT 替换成 .global      
      IMPORT 替换成 .extern      
      DCD 替换成 .long      
      IF EF: 替换成 .IFDEF      
      ELSE 替换成 .ELSE      
      ENDIF 替换成 .ENDIF      
      :OR: 替换成 |      
      :SHL: 替换成 <<      
      END 替换成 .end      
      符号定义后加":"号      
      AREA Word, CODE, READONLY --> .text      
      AREA Block, DATA, READWRITE --> .data      
      CODE32 --> .arm      
      CODE16 --> .thumb      
      LTORG --> .ltorg        
  
            3、操作数及运算符号替换       
  
            ldr pc, [pc, #&18] 替换成 ldr pc, [pc, #+0x18]       
   
              “&”以“+0x”号替换         
              ARM-Linux汇编到ADS汇编转换需要注意的问题        
              
      
   
                            最近那些课比较麻烦,好长时间没做ARM了,今天拿出一段nand准备在ADS下搭建调试环境,发现两家的汇编代码有但不兼容,需要修改一下.现在罗列一下我主要修改的地方,其他很多可能没遇到,大家还是自己查一查文档吧。              
                       
        
      
                                    1            、修改头                        
                                    如            arm-linux            汇编头:                        
                        .text              
                        .global_start              
                        _start:              
                       
        
      
                                    修改为            ads            版本:                        
                        AREA        nand1,        CODE,READONLY              
                        ENTRY              
                       
        
      
                                    注意            AREA            和            ENTRY                          前面都              有                        tab                          空格              ,否则编译出错。                                    
                       
        
      
                                    2            、修改段标志                        
                                    去掉            arm-linux            汇编中的            :                          号              即可在                        ads            中使用。                        
                       
        
      
                                    3            、            ads            需要加上            ENTRY            和            EN            D            指令表示程序入口和结束标志                        
                       
        
      
                                    4            、            ADS            中的            C            语言混编                        
                                    与            arm-linux            汇编不同,            ads            下的汇编调用            C            语言的函数时需要指定            IMPORT                        
                                    切记注意在            IMPORT            前面加            tab            键空格。否则可能出现下面的错误(崩溃啊            ...            ):                        
                                                            
                       
        
      
                                    arm            汇编的条件执行码,这个比较常用,页贴上来供自己参考:                        
                                                      
继承事业,薪火相传
返回列表