2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Amazonウィジェット

  • miniPC
  • 最近買った本
  • Raspberry Pi
  • クアッドコプター
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

ARMアセンブラ

2012年11月23日 (金)

ARM_KEILアセンブラ,アセンブラ関数

ARMコンパイラでアセンブラを使う場合の記述方法について。

参考:ARMのHPにある、ARM software development tools
      RealViewコンパイラ/ライブラリ⇒インラインと組み込みアセンブラ
      この資料に組み込みアセンブラ構文が載っている。

メモ:KEILでは組み込みアセンブラ。アセンブラ関数しか使うことができない。

DUI0205IJ_rvct_comp_user_guide.pdfの196ページに、
組み込みアセンブラの例が載っている。

メモ:
・ARMのアセンブラでは、全て符号なし変数で扱われる。
・アセンブラ関数の引数は、引数の順番にr0,r1,・・と格納される。
 下のソースの例でいうと、*srcはr0に、*dstはr1に格納される。

DUI0205IJ_rvct_comp_user_guide.pdfの196ページより--------------

#include <stdio.h>
__asm void my_strcpy(const char *src, char *dst)
{
loop
    LDRB r2, [r0], #1
    STRB r2, [r1], #1
    CMP r2, #0

    BNE loop
    BX lr
}

int main(void)
{
    const char *a = "Hello world!";
    char b[20];
    my_strcpy (a, b);
    printf("Original string: '%s'\n", a);
    printf("Copied string: '%s'\n", b);
    return 0;
}

ARM_アセンブラ 仕様を調べるには

ARMコンパイラでアセンブラを使う場合の記述方法。レジスタの扱い。Cソースとアセンブラの連結方法についての詳細を調べる方法。
個人ブログやHPに情報がなければ、ARMのドキュメントを丹念に読むしか方法は無い。

参考:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ij/CEGFDGED.html#

このHPにARMのドキュメント(日本語)がアップされている。
しかしこのドキュメントは広大すぎて、最初は調べたい内容になかなかたどり着けない。

KEIL環境なら、
”ARMソフトウェア開発ツール”の下にある、
”RealView Development Suite”から、使っているVersionの内容を見ればよい。


Cとアセンブリ言語を混用するときの記述方法を調べたければ、
”RealView Compilation Toolsデベロッパガイド”にある、
”C,C++、およびアセンブリ言語の混用”を調べればよい。