Converting to ASCII in Cの拡張のようなもので、PIC18X で除算がどのように処理されるのか正確に知りたいと思っていました。
DIV 操作を実行すると、コンパイラはそれをいくつの命令として解釈しますか? 操作が完了するまでに何クロック サイクルかかりますか? クロック サイクル数は被除数、除数、またはその両方に依存しますか?
あまり重要でない副次的な質問として、専用の分割ハードウェアを搭載した最初の CPU は何ですか?
Converting to ASCII in Cの拡張のようなもので、PIC18X で除算がどのように処理されるのか正確に知りたいと思っていました。
DIV 操作を実行すると、コンパイラはそれをいくつの命令として解釈しますか? 操作が完了するまでに何クロック サイクルかかりますか? クロック サイクル数は被除数、除数、またはその両方に依存しますか?
あまり重要でない副次的な質問として、専用の分割ハードウェアを搭載した最初の CPU は何ですか?
可変長の依存。マイクロチップ社のウェブページをチェック: AN614
AN614から...
Clocks
FXD3232S 630 32 bit/32 bit -> 32.32 signed fixed point divide
FXD3232U 683 32 bit/32 bit -> 32.32 unsigned fixed point divide
FXD3231U 588 32 bit/31 bit -> 32.31 unsigned fixed point divide
FXD3131U 579 31 bit/31 bit -> 31.31 unsigned fixed point divide
FXD3224S 529 32 bit/24 bit -> 32.24 signed fixed point divide
FXD3224U 584 32 bit/24 bit -> 32.24 unsigned fixed point divide
FXD3223U 489 32 bit/23 bit -> 32.23 unsigned fixed point divide
FXD3123U 481 31 bit/23 bit -> 31.23 unsigned fixed point divide
したがって、32bit/32bit では 630 CPU サイクルが必要です。
通常、DIV 操作のサイクル数はさまざまです (通常、データシートには最大サイクル数が記載されています)。まともなコンパイラは、命令にかかるサイクル数を気にしませんが、代わりにさまざまな最適化を行います (つまり、2 の累乗による除算はシフトとして処理されます)。
PICのさまざまなルーチンについては、このWebサイトをチェックしてください。
最近のプログラミングでは分断が大雑把に投げかけられていますが、私はまだ多くのマイクロコントローラ プロジェクトを実行している分断に敏感です。写真では、すでに片手と片足を背中の後ろで結んでいるので、分割するのは怖いです。私は PIC16 で同じこと (2 進数から ASCII 10 進数へ) を試みましたが、大変でした。そのため、自作の速度計は 16 進数であるか、醜い if-then-else ツリーを作成しました。当時、写真用の無料の C コンパイラは入手できませんでした。
とにかく、8086には分割がありました。8085 は表示されません。しかし、ENIAC は実行し、平方根が表示されます。その alu は、「除算のある最初の CPU」の要件を満たす CPU としてカウントされますか? ENIAC以前の機械も同様に分裂する可能性があります。PDP-11 にはそれがなかったようです。z80/8080 では 1 つも表示されず、6502 では表示されません。6800 では表示されませんが、68000 では表示されます。8051 はい、驚くべきことに、8031 です。古いものの 6502、特に私が知っている 8088/86 には、BCD 演算がありました。したがって、数学をバイナリで実行してから、10 で割って人間の 10 進数の ASCII 形式に変換しようとする代わりに、最初から bcd で計算を行うと、上位のない 16 進数に変換されます。文字、右に 4 シフトし、0xF で 0x30 を追加し、0xF で 0x30 を追加して繰り返します。