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