关于Knuth《计算机程序设计艺术》中MIX机DIV指令示例的疑问
MIX机DIV指令示例疑问解答
MIX机与DIV指令基础
- MIX字结构:1个符号位 + 5个字节,每个字节可配置为6位二进制(最大值63)或2位十进制(最大值99),字节权重从左到右为基数
B的4次方到0次方(B=64或B=100)。 - DIV指令逻辑:将rA的符号位+5字节(高5字节组)与rX的5字节(低5字节组)拼接为10字节数作为被除数;除以指定地址的内容(除数)后,商存入rA(符号为商的符号),余数存入rX(符号与原rA符号一致),且满足
被除数 = 除数×商 + 余数,同时|余数| < |除数|。
核心问题解析:为何617无歧义,其他值有歧义
617的确定性来源
第二个示例中:
- 被除数的高5字节(rA)为全0,低5字节(rX)的前两个字节组合成数值1235(无论MIX是十进制还是二进制字节模式,这两个字节的组合值明确为1235)。
- 除数的数值为
-2B(地址1000的内容是字节4为2、其余为0,对应2×B^1,符号为负)。
将被除数的这部分(1235×B^6)除以除数(-2B)时,商的符号为正,数值计算为:(1235×B^6) ÷ (2B) = 617×B^5 + (1×B^6)/(2B)
其中整数商部分617是1235除以2的整数结果(1235=2×617+1),这个计算与基数B完全无关,因此无论MIX是十进制还是二进制字节模式,这部分商的数值都是617,对应rA中对应的字节组合明确无歧义。
其他值存在歧义的原因
商的其余部分、余数的数值计算均依赖基数B:
- 商的后续字节:被除数后续部分包含
B的低次幂项(如3B+1),除以2B时,商的数值会因B是100还是64而完全不同,对应的字节表示自然有歧义。 - 余数的字节:余数由除法的剩余项组成,例如上述计算中剩余的
1×B^6 + 3B +1,除以2B后得到的余数为B^5 + 3B +1,这个数值随B变化(十进制下为100000301,二进制下为64^5+3×64+1),对应的字节拆分结果在两种模式下完全不同,因此存在歧义。
内容的提问来源于stack exchange,提问作者Rich006
相关产品推荐
相关产品推荐

