6

MIXの除算(TAOCP by Knuth)がバイト単位でどのように機能するかを誰かに説明してもらえますか?

rA = |-| . . . .0| 

rX = |+|1235|0|3|1|

メモリ位置1000には。が含まれます|-|0|0|0|2|0|

操作を実行するとき

DIV 1000

レジスタは

rA = |+|0|617|?|?|

rX = |-|0|0|0|?|1|

rAこれで、との記号がわかりましたが、塗りつぶされrXたバイトはどのような順序で、rAXどの分割が実行されますか?

DIV 1000がすべてのビットを2で割った値になる場合、私は期待します

rAX = |+|617|0|1|0|-|0|1|0|1|1| 

ここrAには、除算の結果とrX余り(右側から入力)が含まれています。

私はおそらくここで何かが足りないので、Knuthは私がそれを自分で理解できるはずだと思っているようです(したがって、レベル10の質問ですが、私も得られません)が、誰かがここで私を助けてくれますか?

4

1 に答える 1

4

だから私はそれを自分で理解した。

手作業で除算を行う場合、バイトを単一の数値に変換すると、-210,501,825が得られます(最小の種類のバイトを使用している場合は、Knuthsブックでは6ビット(!)です)。これを-128で割ります。これは、同じバイトサイズを使用する場所1000の値です。

商は1644545、余りは65で、両方の数値が負であるため、符号は正になります。1644545をrAに、65をrXに保存すると、次のようになります。

|+|0|6|17|32|01|
|-|0|0|0|1|1|

最小のバイトサイズ(64個の数値を保持)を使用します。Knuthは、彼の例では特定のバイトサイズを想定していないため、rXにはいくつかの疑問符があります。rXの符号は、常にrAの前の符号です。

編集:非常に便利なMixEmulユーティリティを使用して、MIXのレジスターを試してみました。これは、.NETで行われる非常に優れたMIX実装です。

于 2009-04-21T07:40:58.197 に答える