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

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

« AVR delay関数の使い方 | トップページ | PICの開発ツール MPLABにCコンパイラをインストールする。 »

2012年12月 9日 (日)

AVRアセンブラ関数の作り方

AVRでアセンブラ関数を作るときの書式について。

まずはサンプルソース
「avr_assemblerFunc.asm」をダウンロード

アセンブラ関数の中で使うローカル変数について名前をつける場合は、アセンブラソースの最初に名前定義を書いておく。アセンブラ関数内で使うことのできるレジスタは下記のとおり。R25からR16が自由に使える。
R26からR31は間接アドレッシング専用のレジスタなので基本的にいじらない。

R0-R25が汎用レジスタ。R0-R15は即値演算不可能
(R26,R27)はXレジスタ
(R28,R29)はYレジスタ
(R30,R31)はZレジスタ

アセンブラ関数をCソースから呼び出しできるように、コンパイラにアセンブラ関数の名前を教える必要がある。書式は下記のようになっている。

.global 関数名
.func 関数名

そして、アセンブラ関数のラベルは、関数名のあとに”:”コロンをつけて、

関数名:

このラベルから、アセンブラ関数が開始されることを示す。
ここで、Cソースからアセンブラ関数を呼び出す際に引数をとることができる。Cソースから渡された引数は、r25から順番に1バイトずつ格納されているので、アセンブラ関数に来たら、すぐにローカル変数にコピーする。

引数のコピーが終わったら、アセンブラ関数の処理内容を具体的に書き込み、最後に"ret"命令で、Cソースに戻る。
アセンブラ関数の最後には必ず、”.endfunc”を入れる。

Cソースでアセンブラ関数の関数名からプロトタイプ宣言をしておき、プロジェクトにアセンブラのソースファイルをAddしておく。
後は、

関数名();

と、いつもどおりにやればコールできる。

どこに何の情報をいれたか確認しながらコーディングしないと混乱する。レジスタに名前をつけて管理するのが得策。

名前をつけるには、

hoge = 25

などとする。25はr25のレジスタを示し、hogeがラベルになっている。



« AVR delay関数の使い方 | トップページ | PICの開発ツール MPLABにCコンパイラをインストールする。 »

AVRマイコン」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/518723/56281640

この記事へのトラックバック一覧です: AVRアセンブラ関数の作り方:

« AVR delay関数の使い方 | トップページ | PICの開発ツール MPLABにCコンパイラをインストールする。 »