问题标签 [mmix]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - 为 CVS/Git 获取 MMIX 存储库
如何将MMIX 的 CVS repo获取到 CVS/Git?
我知道如何在 github 上克隆一个 repo git clone URL
,但我以前从未真正使用过 sourceforge。他们使用 CVS,这对我来说是新的。
我的失败尝试
我在 CVS -irc 获得以下提示,尝试先通过 CVS 下载 repo
但是,它并不像预期的那样对我有用。
assembly - MIX 或 MMIX - 什么是最好的
嗨,我的第一个问题……我开始阅读“计算机编程的艺术”。我知道这很难。首先,我决定使用书籍的语言——我从 MIX 开始。我做了一些练习,我认为我可以使用书中的程序进行管理。但是问题到处都是我写的,MIX老了,学MMIX等等。好的,但是为什么-这是我的问题?我正在学习 1 moth MIX,我开始理解书中的问题,现在停止工作并再次开始学习新的 ASM,为什么?话说,MIX老了,但是书里所有的代码都是MIX,如果我花时间学习MMIX,我得重新写问题,我想这对我来说会很困难。MIX是不是太老了,我真的必须学习新版本吗?有更多TAOCP经验的人可以给我一个建议:继续看书——MIX中的示例、问题等,或者停止学习MMIX。和,
taocp - 打印包含在寄存器中的数字
我正在学习 MMIX,所以我尝试制作一个简单的程序来添加一个并打印结果。不幸的是它不打印任何东西。这是我的程序:
我究竟做错了什么?
assembly - 如何为 MMIX 链接多个汇编文件
假设,我写了一个小库来实现一些“fprint”——可能。教我 MMIX 的书(Das MMIX-Buch,德语)总是将整个库复制到新程序中,但我不喜欢这种方法。有没有办法将库组装成一个目标文件,主程序组装成另一个并将这两个链接在一起?这该怎么做?
c - mmix 上 gcc 的 Printf 问题
我根据http://www.bitrange.com/mmix/install.html为 mmix 编译了 gcc 4.6.0 。在我尝试了他们简单的 hello world 或任何其他对 printf 的调用超过第一个字符串之后,只有第一个字符串被打印出来。例如
生成的程序集如下所示:
trie - mmo 对象格式的符号表中使用的尝试如何工作?
我试图了解mmo
目标文件格式是如何工作的,它用于 Don Knuth 的教育MMIX
架构。MMIXware我没买过,所以只能从汇编器和模拟器的文字源文件中猜测大部分细节。
对象格式使用特殊的三元搜索树来存储符号表。看一下代码,我不太明白它是如何工作的。有人可以向我解释一些细节吗?特别是关于树是如何序列化的。
exception - MMIX:关于动态陷阱的问题
我对 MMIX 的中断有一些疑问。特殊寄存器 rK 的定义是“中断屏蔽寄存器”。但它似乎以不同的方式对待不同的事件。
对于 I/O 位(我们称之为 ** 位:这是正常情况。当外部中断到来时,如果 rK 的 ** 位为 0,则 rQ 的 ** 位将保持 '1' 直到 rK 的 ** 位设置为 1 , 陷阱就会发生。
对于S-bit(程序):根据源码
mmix-pipe
,即使rK的S-bit为0,也会发生安全异常。rK 的 S 位将从 0 变为 1。因此,在正地址中,rK 的 S 位应该为 1,而在负地址中,rK 的 S 位没有任何作用。只有 rQ 的 S-bit 用于告诉系统“存在安全问题”,rK 的 S-bit 似乎没有用。对于 P 位(程序):令人遗憾的是“指令来自特权(负)虚拟地址”。在 mmix-doc.pdf 中。但是如果 PC 处于负地址,rQ 的 P 位不会总是设置为 1。(mmix-pipe 也不会设置 rQ 的 P 位)。
我可以证明:如果在 "resume" insn 之前执行的所有指令都将 rQ 的 P-bit 设置为 1,那么 resume 也会将 rQ 的 P-bit 设置为 1。结果,在 resume 之后,'user' insn 将始终触发 TRAP。那是不可能的。因此,当 P-exception 被禁止时,rQ 的 P-bit 不会设置为 1。
因此 rK 的 P-bit 不仅用作掩码,还用作“绕过异常检查的选项”。
这里有一些问题。
为什么不将所有 rK 的位作为中断的掩码?有什么理由让 S/P 位如此奇怪吗?
如果 rK 的对应位为 0,其他 rQ 的程序位 (rwxnkb) 是否设置为 1?
与 Neg-address 一样,不会发生跳闸,DVWIOUZX 位在它刚刚发生后是否保持 1?
assembly - 在 mmix 交互模式下检查寄存器内容
我想知道如何在交互模式下使用 mmix 在我要求查看寄存器时显示它们的内容。例如,我有一个简单的 mmix 程序:
我可以运行 mmix -i myprog.mmo 来获得输出:
这一切都很好。但是,如果我想在交互运行的过程中检查某个寄存器的内容,我需要做什么?另外,以十六进制而不是十进制查看内容怎么样?
mmix - 混合 NEG 和 NEGU 操作码
根据 NEG 和 NEGU 定义,
让我们假设$Z = s(-1)
或u(2^64 - 1)
。然后第一个操作码将在 时将值 1 放入$X
寄存器Y = 0
中,而最近的操作码将给出相同的结果,因为u(-(2^64 - 1)) mod 2^64 = 1
。我对么?NEG
指令应该在什么时候引发溢出异常$Z = -2^63
?
knuth - 我们如何通过罗马数字获得相同的数字?
在 The Art of Computer Programming, Volume 1, Fascicle 1, Knuth (2005) 的第 2 页上写道,“同样的数字也可以通过使用罗马数字以更简单的方式获得。”
这是 Knuth 对 MMIX 计算机识别号的幽默解释的一部分。数字 2009 是其他 14 台计算机的识别号的平均值。他接着说,我们也可以通过“取罗马数字”来获得 2009。如何?
我尝试从其他 14 台计算机的名称中提取罗马数字。总和超过 2009 年,远小于 28,126,所以无论是总和还是平均工作量都不是。Knuth 可能只是意味着采用 MMIX 的罗马数字,如果是这样,那很好。还有别的吗?我愿意知道。
附言
版主,这个问题可能不符合 SO 标准。在这种情况下,请教我在哪里或如何问这个问题。这样我就可以更好地认识社区。
参考
Knuth, DE (2005)。计算机编程艺术:第 1 卷,第 1 卷:MMIX,新千年的 RISC 计算机。新泽西州上马鞍河:Addison-Wesley。