ローエンドな私とマイコン

XC8ネタ


アセンブラメインでやっていると、いざCで書こうとすると?となることがあります。
備忘録がてら書きためていけたらと思います。
まずXC8にASMを埋め込むには3通りの方法があります。
1.外部リンクにする。
2.ASM(”〜〜”); 1行タイプ
3.#ASM  #ENDASMで挟む、この時#の前にスペースをおいてはいけない。

アセンブラ内で変数を参照するには参照先が固定されていること、
例、
Voletile unsigned char result;

ASM("MOVF    _result、W”);    // 変数名の前にアンダーバー

共用体、構造体のメンバーのアドレスは渡せない。
例(16ビット変数のシフト)
Voletile unsigned int dt;
    dt    =    0x10f0;   // 16ビットで扱う

#ASM
    banksel(_dt);
    RLF    bankmask(_dt);
    RLF    bankmask(_dt+1); //共用体メンバーのアドレスは渡せないので手計算!
#ENDASM