2009-04-20 58 views
5

有人可以向我解釋MIX中的劃分(來自Knuth的TAOCP)是如何以字節爲單位進行工作的?MIX是如何工作的?

rA = |-| . . . .0| 

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

存儲位置1000包含|-|0|0|0|2|0|

當您執行操作

DIV 1000 

寄存器成爲

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

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

現在我明白了在rArX,但在標誌什麼順序的rAX字節填充和各司做了什麼?

如果DIV 1000導致每一個位除以2,然後我希望

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

其中rA包含劃分結果和rX餘數(從右側填寫)。

我很可能在這裏錯過了一些東西,而Knuth似乎認爲我應該能夠自己弄清楚(因此,關於它的10級問題,我也沒有得到),但有人可以幫助我這裏?

回答

3

所以我有點想通了。 (如果你使用Knuths書中最小的一種字節 - 這是6位(!)),你將得到-2101501825(如果你使用的是最小種類的字節)。除以-128,這是位置1000中使用相同字節大小的值。

商是1644545,其餘的65,這個符號是正數,因爲兩個數都是負數。如果您存儲在鐳1644545和65 RX,你會得到

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

用最小bytesize(持有64號)。由於Knuth在他的例子中從來沒有采用特定的字節數,所以rX有許多問號。 rX的符號始終是rA的前一個符號。

編輯:我用非常方便的MixEmul工具來玩弄MIX的寄存器。這是在.NET中完成的一個相當不錯的MIX實現。