MIX 中的除法是如何进行的?

发布于 2024-07-16 20:48:23 字数 609 浏览 6 评论 0原文

有人可以向我解释一下 MIX 中的除法(来自 Knuth 的 TAOCP)是如何在字节到字节的基础上工作的吗?

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 级问题,我也没有得到),但是有人可以在这里帮助我吗?

Can someone explain to me how division in MIX (from TAOCP by Knuth) works on a byte-to-byte basis?

rA = |-| . . . .0| 

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

The memory location 1000 contains |-|0|0|0|2|0|.

When you execute the operation

DIV 1000

the registers become

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

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

Now I understand the signs on rA and rX, but in what order are the bytes of rAX filled and which divisions are done?

If DIV 1000 leads to every bit divided by 2, then I would expect

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

in which rA contains the division results and rX the remainders (filled from the right side).

I'm probaly missing something here, and Knuth seems to think I should be able to figure it out myself (hence the level 10 questions about it, which I also don't get), but could someone help me out here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

薄荷梦 2024-07-23 20:48:23

所以我自己想出了办法。

如果您手动进行除法,通过将字节转换为单个数字,您将得到 -210,501,825(如果您使用的是最小类型的字节 - 在 Knuth 的书中为 6 位(!))。 将此值除以 -128,即使用相同字节大小的位置 1000 中的值。

商为 1644545,余数为 65,由于两个数均为负数,因此符号为正数。 如果您在 rA 中存储 1644545,在 rX 中存储 65,您将

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

使用最小的字节大小(可容纳 64 个数字)。 由于 Knuth 在他的示例中从未假设特定的字节大小,因此 rX 有许多问号。 rX 的符号始终是 rA 的前一个符号。

编辑:我使用了非常方便的 MixEmul 实用程序来使用 MIX 的寄存器。 这是在 .NET 中完成的一个非常好的 MIX 实现

So I kind of figured it out myself.

If you do the division by hand, by converting the bytes into a single number you will get -210,501,825 (if you're using the smallest kind of byte - which is 6 bits (!) in Knuths book). Divide this by -128, which is the value in location 1000 using the same bytesize.

The quotient is 1644545, the remainder 65, the sign will be postive since both numbers are negative. If you store 1644545 in rA and 65 in rX, you will get

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

using the smallest bytesize (which holds 64 numbers). Since Knuth never assumes a particular bytesize in his examples, rX has a number of question marks. The sign of rX is always the previous sign of rA.

Edit: I used the very handy MixEmul utilty to play around with the registers of MIX. This is a pretty nice MIX implementation done in .NET

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文