• ベストアンサー

PICマイコンのアセンブラルーチンについて

PICマイコンのアセンブラについて教えていただきたく投稿しました。 http://orange.zero.jp/electronics/pic/pic.html 上記のサイトについてです。 『●「整数演算」』の 『◇16÷16=16ビットの割り算(余りも得られる)』の下にある 『◇上と同じ。基本命令のみに変更したもの。』についてです。 つまり下記リンクの演算ルーチンについて、大まかな流れだけでいいので解説していただけないでしょうか。 http://orange.zero.jp/electronics/pic/div16_2.txt よろしくお願い致します。

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

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

PIC は全然知らないですが、やってることは一般的な除算のロジックに見えます。乗算と同じく基本的に筆算でやるのと同じです。 説明を省くために 8bit にしますが、例えば div1=0xff / div2=0x07 という場合、以下のように準備し div2 -> 00000111 div4 -> 00000000 11111111 <-div1 この div4:div1 のペアを左シフトして、ループごとに div4>=div2 を判断し、引ければ div4-=div2 すると共に、div3 のビットを立てます。下の一番右が div3 に相当。 00000001 11111110 -> 0 (MSB) 00000011 11111100 -> 0 00000111 11111000 -> 1 00000001 11110000 -> 0 00000011 11100000 -> 0 00000111 11000000 -> 1 00000001 10000000 -> 0 00000011 00000000 -> 0 で答 div3=00100100 (0x24), 余り div4=00000011 (3) となります。 実際には高速化のために、最初の div2 の最上位ビット位置をカウントして、その分初期状態を上の表の3段目あたりにもってきてます。di1601 と di1603 あたりのループがそれ。もちろん div2 の値が大きければもっと下になる。その分処理も減る あとはこれを 16 ビットでやってるだけ。で当ってるとおもう

kuyasami
質問者

お礼

分かりやすい説明ありがとうございます。 お礼が遅くなり失礼しました。

関連するQ&A

  • PICマイコンのアセンブラについて

    PICマイコンのアセンブラルーチンについて PICマイコンのアセンブラについて教えていただきたく投稿しました。 http://orange.zero.jp/electronics/pic/pic.html 上記のサイトについてです。 『●「整数演算」』の 『◇8×8=16ビットの乗算』についてです。 つまり、下記リンクの演算ルーチンについて、大まかな流れだけでいいので解説していただけないでしょうか。 http://orange.zero.jp/electronics/pic/mul816.txt よろしくお願い致します。

  • 【PICマイコン】一般製品にPICシリーズが使われてるって本当ですか?

    最近PICをはじめて大分アセンブラもなれてきて楽しめるようになってきました。 それで教えてGOOで色々見てるときにPICシリーズのマイコンは一般製品の中にも組み込まれているって書いてあったんですが本当ですか? 僕の中でPICやAVR等はそれなりにコアな趣味を持つ人たちのおもちゃ的な物だと思ってました。 もし本当に入ってるんだったら具体的にどんな製品にどのマイコン(例PIC16F877A等)が使われてるのか教えてください。凄く興味があります。 また、何処のサイトだったか忘れましたが「これからマイコンをはじめるならAVR!PICをやるメリットなし!」ぐらいの勢いで書いてあったんですがその通りなんでしょうか? もひとつ、、PICの勉強をはじめるときにアセンブラかCかで迷ったんですがアセンブラではじめた方がCPUの構造をより理解しやすいとの事でアセンブラで進めてきたんですが、いまいちその実感がわきません。具体的にどういう所でCPUの構造を理解しやすいのでしょうか? それっぽいなぁと思うのはクロックでタイミングを与え、そのタイミング毎に命令を実行しレジスタのBITで条件判断をしたり計算をしたりしてポートに出力する的な部分でしょうか?そもそもCPUの構造ってどういう事なんでしょうか?何て言うか例えて言うならエクセルは仕事で使うから詳しいけどWindowsの設定は全然解りませんみたいな感じです。 よろしくお願いしますm(_)m

  • PICマイコンにつきまして教えてください。

    PICマイコンにつきましておしえてください。 初心者です、以下3点につきまして教えてください。 (1) PICマイコンを用いて、実験機を作成しているのですが、プログラム上の ある関数の処理時間がどのくらいが予測したいと思っています。 アセンブラの場合、クロック周期の4倍が1サイクルで、各処理毎に○サイクル というのが、データシート上に記載されていることから、ざっくり処理時間を 予測することができるのですが、C言語の場合、予測することはできないでしょうか? 加算、減算、ポート出力制御、if文、AD、、、等の1命令毎の処理時間がどのくらいか、 予測することができますでしょうか? (2) 実験機にはLCDをmain関数で表示させており、またTimer割り込み(5μsec)毎に簡単 な処理をおこなわせているのですが、動作させてみると、 LCDが表示せず(文字なしで高速で切り替えを繰り返しているような感じです。) これは、割り込み間隔が早すぎて、main関数に入る前に随時5μsec割り込みが入って main関数の表示ができていないということなのでしょうか? 割り込み間隔を50μsecにしたところ、うまく表示されましたので。。 (そういったことから(1)の質問をしました。) (3) MPLAB IDC2はデバッグシミュレータがあり、予測が難しい場合、ストップウォッチで、 確認しようと思っています。ブレークポイントを処理最初と最後に設定して、RUNで 時間を確認することができますでしょうか? 処理最初のブレークポイントまでは、どのように実行位置をもっていくのでしょうか? 長くなりましたが、よろしくお願いいたします。

  • PICマイコン MPLABアセンブラで小数点の累…

    PICマイコン MPLABアセンブラで小数点の累乗(べき乗) n^-0.9067の計算をMPLABのアセンブラでやりたいのですが 記述、計算方法がわかりません。 わからない点 ・四則計算だけでできるのか ・小数点を整数の変換して計算可能か ・負の値を気にせず(正の数)計算できるか 一番知りたいのは四則計算だけで計算できるかです。 これができるとある程度正確な結果が得られるので ご教授よろしくお願い致します。

  • PICマイコンの開発環境一式をできるだけ手軽に

    10年近く前ですが、秋月のAKI-PICプログラマーのキットを組み立てて、Windows98でシリアル接続して、5,6個のマイコン工作をした後、飽きてしまいました。 その後、引っ越して開発環境一式を紛失してしまいました。 しばらくPICからは離れていたのですが、最近またやりたくなってきました。机の中にPIC16F84Aの使ってない在庫が10個ぐらい転がっています。 最近、ネットの情報を見ると、PICKIT2 or 3という出来合いのライターがあるらしいのですが、これを使うための最小限で便利な環境をそろえたいのですが、アドバイスお願いします。 パソコンのOSはWindows7 64bit (無理ならWindowsXPの古いノートPCもあり)です。 知りたいのは以下の点です。不足な部分やご提案があれば教えてください。 このPICKIT2or 3を買うだけで、後はアセンブラやライターソフトは付属品またはネットからのダウンロードでそろうものなのでしょうか。(ICEなどの機能はあればいいですが必須ではありません。アセンブルして、生成した機械語をマイコンに書き込めさえすればいいです)

  • マイコン制御

    マイコン制御の仕事がしたく、今マイコンを勉強しています。そこでいろいろな疑問が出てきました。 1、求人によく8、16、32ビットマイコンなどとありますが、それはやはり処理量をさしているのでしょうか?私はPICとH8を勉強しているのですがPICは命令長でH8はバス幅でクラス分けをしていますよね!?ちなみに処理量だとしたらPICは8ビット、H8は32ビットと言うことになるのでしょうか? 2、組み込み関係の求人がすごく多いけれど、派遣や請負いばかりが目につくのですが。実際、組み込み関係のお仕事をしている方はどんな感じなのでしょうか。 3、私は求人によくあるカーナビや携帯のソフトなどではなく、もっとハードよりな感じのロボットやFAの制御などがしたいと思っています。地元で中小企業でとなるとPLCが多い気がするのですがマイコンでそのような仕事はやはりむりですかね・・・。有限会社とかだと結構あったりするのですが・・・、だれかOEMとかでもいいので中小で物作り実感してマイコン制御してる方いらっしゃいますか? 4、リアルタイムOSを使うのはロボット制御などではなくカーナビや携帯などのようなアプリケーションよりな感じなのでしょうか? よろしくお願いします。

  • PICのプログラムカウンタについて

    プログラムカウンタでポートAに4bitの2進数を入力して、変換された2進数のデータをポートBに出力させることはできたのですが、 ポートCにも違うデータを同時に出力させたいのですが、どういった命令文を作ったらいいでしょうか? 例えば、ポートAが「HLHL」の入力の時にポートBでは「HLLH」、ポートCでは「LLHL」を出力させる方法です。 言語はアセンブラ、マイコンはPIC16F886です。 よろしくお願いします。

  • マイコンが32ビットになるということは・・・

    ↓こんなニュースを見て気になったことがあります。質問させてください。 http://response.jp/article/2011/06/08/157664.html マイコンといえば16ビットが多いように思えますが、これからは32ビットが増えるのだと思います。 命令長さが倍になるのだと思うのですが、それがどのようなメリットが得られるのか よくわかりません。分解能がよくなるのでしょうか? 詳しい方教えてください!

  • アセンプラ16ビット8086

    DIVで割り算をやってみました。 256÷2は可能でしたが 512÷2は実行時エラーでした。 ソースが8ビットなら商が8ビットに納まるような割り算でなくては実行時エラーになってしまうものなのでしょうか? DIVする時にはこのように割り算の商に気をつけなくてはならないのですか? 32ビットのアセンブラでも一般的にこのようなことになりますか?

  • PICによるLED制御について

    大学の講義でPICのLED制御の課題がよくわかりません。 どなたか教えていただけないでしょうか? [問]  PIC16F84Aにおいて、動作を実現するプログラムを示せ。  メインルーチンでLED出力の点燈箇所を1秒ごとに巡回させる。   RA3=Low(OFF)のとき、左向きに巡回シフト(RLF命令)させる。   RA3=High(ON)のとき、右向きに巡回シフト(RRF命令)させる。  また割り込みルーチンによって、RA0~RA2の3ビットの値に応じて  点灯速度を変化させる(値が大きいほど速く)  ただし、ポートAは全て入力モード、ポートBはRB0以外を出力モードとし(RB0は割り込み用)、ポートBの初期出力を0000100*(LED出力の初期点燈位置は第3ビットのみ)とせよ。

専門家に質問してみよう