• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PIC16のアセンブラ、あなたならどう書く? )

PIC16のアセンブラ、あなたならどう書く?

このQ&Aのポイント
  • PIC16シリーズのアセンブラについての質問です。
  • IF-ELSE文をMPASMで記述する方法を教えてください。
  • 自分なりのコード例を提示していますが、他の方法も知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • P0O9I
  • ベストアンサー率32% (693/2146)
回答No.2

>  GOTO   $+4     ; .. 少なくともこのような書き方は勧められません。飛び先は名前で指定しましょう。それでないと、間に命令を入れたり、外したりするたびに+4の値を計算し直さなければならなくなります。

MAGNAFIFTY
質問者

お礼

レスありがとうございます。 > 飛び先は、名前で指定しましょう 確かに、そのとおりです(^^; 自分が書いている間は、$でもいいかもしれないですが・・・。他人のコードでしかも$が書かれたコードをメンテするとき、神経使いそうです。個人的ですが、ファンクションブロックの行数が十分少なく、見渡しが効く範囲での使用なら、それもアリかなぁと思いました。ラベルが少ないことで、コードがスッキリすると考えるからです。でも、それを真似た人が、100行先のアドレスに$を使うとも限らないですね。 もう一つ、ラベルを置く事で、このアドレスは、他の場所で参照される可能性を指示する目的もあるので・・・やっぱり、セオリーどおり$はやめるべきかなぁ。やめてと言われそうな気がしてきた(汗。 $使うの、やめときます。 ----- コメントとかどう思います?

その他の回答 (1)

  • YEND77
  • ベストアンサー率56% (21/37)
回答No.1

PIC16のアセンブラを知らないのですが、、、 --- --- --- --- --- --- --- --- --- reg1 <- var0 の アドレス reg2 <- var1 の アドレス 判定( sel = 0 )-> ★の場所 swap( reg1 <-> reg2 ) ★ [reg1 が指すとこ] ++ [reg2 が指すとこ] <- 0 --- --- --- --- --- --- --- --- --- 自分が昔やっていたアセンブラではこの方が 容量もスピードもよかったです。

MAGNAFIFTY
質問者

お礼

うまいなぁ。 私がそのプロセッサ使っても、そうは書けなさそうです。 ブランチ先でする事が同じな場合、共通処理で書けば、引数の設定をしてから、共通のファンクションブロック(この場合★)を処理するが効率的だし、わかりやすいですね。 ----- PIC16は、本当に玩具(失礼?)みたいなプロセッサで、アキュムレータからつながる汎用レジスタは1個しかなくて、間接アクセスをできるレジスタも専用のレジスタ(アキュムレータとは違う)が1個あるだけなんです。今つかってるPICのRAMは、128バイトだけで、基本的に   (1) {RAM又はリテラル} -> W   (2) {RAM又はリテラル}とWで計算 -> W   (3) W -> RAM をひたすら繰り返す感じです。汎用レジスタ2個ぐらいほしいなぁ。汎用レジスタで間接アドレッシングしてほしいなぁ。でも、PICだから仕方ない(笑。 ----- にしても、構造化できるところは、構造化するように頭に入れときます。 参考になりました!ありがとうございました。 もし、コメント書くなら、どんな風に書きます? 暇あったらでいいですから、意見くださると嬉しいです。