2009-04-20 38 views
5

MIX(KnuthのTAOCPから)の分割がバイト単位でどのように機能するか説明できますか?部門はMIXでどのように機能しますか?

rA = |-| . . . .0| 

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

メモリロケーション1000には、|-|0|0|0|2|0|が含まれています。

あなたが操作を

DIV 1000 

を実行すると、レジスタは、今私はrArXの兆候を理解しますが、どのような順序でrAXのバイトが満たされており、どの部門です

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

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

になります完了? DIV 1000は2で割ったすべてのビットにつながる場合

、私はrA除算結果とrX(右側から充填)剰余を含有する

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

を期待します。

私はここに何かを見つけていません。クヌスは私が自分自身でそれを理解できるはずだと思っています(したがって、それについての10の質問もありません)。ここに?

答えて

3

私はそれを自分で分かっています。

バイトを1つの数字に変換すると、-210,501,825(Knuthsのブックでは6ビット(!)の最小バイトを使用している場合)が得られます。これを-128で割ります。これは、同じバイトサイズを使用する位置1000の値です。

商は1644545であり、残りの65は両方の数値が負であるため符号がpostiveになります。あなたに、RXにRAにおける1644545および65を保存する場合は、(64個の数字を保持している)最小のバイトサイズを使用して

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

を取得します。彼の例ではKnuthは特定のバイトサイズを仮定しないので、rXにはいくつかの疑問符があります。 rXの符号は、常にrAの前の符号です。

編集:私は便利なMixEmulユーティリティを使用して、MIXのレジスタで再生しました。これは、.NETで行われたかなり良いMIX実装です。

関連する問題