- ベストアンサー
PIC16のアセンブラ、あなたならどう書く?
- PIC16シリーズのアセンブラについての質問です。
- IF-ELSE文をMPASMで記述する方法を教えてください。
- 自分なりのコード例を提示していますが、他の方法も知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> GOTO $+4 ; .. 少なくともこのような書き方は勧められません。飛び先は名前で指定しましょう。それでないと、間に命令を入れたり、外したりするたびに+4の値を計算し直さなければならなくなります。
その他の回答 (1)
- YEND77
- ベストアンサー率56% (21/37)
PIC16のアセンブラを知らないのですが、、、 --- --- --- --- --- --- --- --- --- reg1 <- var0 の アドレス reg2 <- var1 の アドレス 判定( sel = 0 )-> ★の場所 swap( reg1 <-> reg2 ) ★ [reg1 が指すとこ] ++ [reg2 が指すとこ] <- 0 --- --- --- --- --- --- --- --- --- 自分が昔やっていたアセンブラではこの方が 容量もスピードもよかったです。
お礼
うまいなぁ。 私がそのプロセッサ使っても、そうは書けなさそうです。 ブランチ先でする事が同じな場合、共通処理で書けば、引数の設定をしてから、共通のファンクションブロック(この場合★)を処理するが効率的だし、わかりやすいですね。 ----- PIC16は、本当に玩具(失礼?)みたいなプロセッサで、アキュムレータからつながる汎用レジスタは1個しかなくて、間接アクセスをできるレジスタも専用のレジスタ(アキュムレータとは違う)が1個あるだけなんです。今つかってるPICのRAMは、128バイトだけで、基本的に (1) {RAM又はリテラル} -> W (2) {RAM又はリテラル}とWで計算 -> W (3) W -> RAM をひたすら繰り返す感じです。汎用レジスタ2個ぐらいほしいなぁ。汎用レジスタで間接アドレッシングしてほしいなぁ。でも、PICだから仕方ない(笑。 ----- にしても、構造化できるところは、構造化するように頭に入れときます。 参考になりました!ありがとうございました。 もし、コメント書くなら、どんな風に書きます? 暇あったらでいいですから、意見くださると嬉しいです。
お礼
レスありがとうございます。 > 飛び先は、名前で指定しましょう 確かに、そのとおりです(^^; 自分が書いている間は、$でもいいかもしれないですが・・・。他人のコードでしかも$が書かれたコードをメンテするとき、神経使いそうです。個人的ですが、ファンクションブロックの行数が十分少なく、見渡しが効く範囲での使用なら、それもアリかなぁと思いました。ラベルが少ないことで、コードがスッキリすると考えるからです。でも、それを真似た人が、100行先のアドレスに$を使うとも限らないですね。 もう一つ、ラベルを置く事で、このアドレスは、他の場所で参照される可能性を指示する目的もあるので・・・やっぱり、セオリーどおり$はやめるべきかなぁ。やめてと言われそうな気がしてきた(汗。 $使うの、やめときます。 ----- コメントとかどう思います?