arm assemble and gnu assemble

ARM與GNU Assembler差異到底有多大,只能說非常的大!用過就知道,之前就將GNU 可成功Make的程式丟到ADS(他用的是ARM Assembler,自家開發的嘛)上模擬,看看中斷點、暫存器數值、程式流程。

錯誤居然有309個(組合語言部分,C語言倒是沒什麼問題)Google了 ADS_Errors_and_Warnings An Introduction to the GNU Assembler GNU ARM Assembler Quick Reference以及網路上各方精華才知道,問題出在哪?還一直以為是環境設置的問題(當然環境設置也很重要,弄不好一樣不能跑!)。

ADS顯示的主要錯誤
1. Error   : A1163E: Unknown opcode
組譯器擺明就是看不懂
2. Error   : C2470E: function prototype formal '__packed__' needs type or class - 'int' assumed
這個__attribute__((__packed__))是GNU才有的用法 ARM Assembler也是看不懂的,記得Mark(註解)起來

其實真正的錯誤是下面這些(是非常多 XD)
     ARM        ->          GNU
INCLUDE 替換成 .INCLUDE
TCLK2 EQU PB25 
替換成 .equ TCLK2, PB25
EXPORT 替換成 .global
IMPORT 
替換成 .extern
DCD 
替換成 .long
IF :DEF: 
替換成 .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
For ADS environment
    __asm{
            rsbs    dumy, var2, 0
            movmi   L_var_out, L_var1, lsl var2
            movpl   L_var_out, L_var1, asr dumy
         }
For GNU environment
        __asm__ __volatile__(
            " rsbs    %0, %3, #0;\n\r"
            " movmi   %1, %2, lsl %3;\n\r"
            " movpl   %1, %2, asr %0"
            :"=r" (dumy), "=r" (L_var_out)
            :"r" (L_var1), "r" (var2)
);
or
    asm volatile(
               " rsbs    %0, %3, #0;\n\r"
            " movmi   %1, %2, lsl %3;\n\r"
            " movpl   %1, %2, asr %0"
            :"=r" (dumy), "=r" (L_var_out)
            :"r" (L_var1), "r" (var2)
       ); 

不知道的人,這部分可能弄個一輩子都不知道問題在哪?明明沒有錯看半天,上面只是主要的部分,其實還有很多想不到的,像是少加了個冒號、程式前面沒空白、有的地方必須是小寫,所有令人意想不到的錯誤都出現了。如果你很習慣GNU GDB( GNU  De Bugger) 或是你根本就在Windows上開發一開始就是學ARM Assembler語法,那你就沒這個問題了,但如果你要將程式從 GNU ARM或是倒過來 ARM GNU記得先看看。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值