アセンブル記述

REPEAT命令

PIC24FのREPEAT命令でバグ作ってしまった。リテラル指定した繰り返し回数が1つ多かったのだ。 この命令は、リテラル(即値)でもレジスタでも、指定ループ回数+1だけループする。 そのため直後のmov命令を3回繰り返すとき repeat #3 mov w1, [w0++]と書く…

ASM30におけるテーブル・メンバの増減処理

C言語でテーブル・メンバをインクリメントするとき tbl->memb ++;これをASM30で直接コードを記述すると ; tbl = w0 mov [w0 + MEMB_OFFSET], w1 inc w1, w1 mov w1, [w0 + MEMB_OFFSET]となるが、以下のように記述すると効率がよい。 ; tbl = w0 add w0, #ME…

オフセットの書き方がとても変

このアセンブラ(ASM30)のオフセット記述はとても変だ。 例えばC言語的に書くと func(short w1, short* w0) { w0[5] = w1; }ということをやりたいとき mov w1, [w0 + 5]のように記述すると、以下のようにエラーである。 Error: Word operations expect even o…

__resetは定義が必要

リセット・ルーチンのシンボル「__reset」は必ず定義が必要。当然ですが別の名前ではダメです。 リンカがこのシンボルを探して .resetセクションにリセット・ベクタを設定してくれる。その詳細は、MPLABインストール・ディレクトリ以下の「MPLAB ASM30 Suite…