assembly - MIX 减法如何处理 "packed"字

标签 assembly taocp

我正在阅读 Knuth 的书 TAOCP。我只是在学习一个简单的寄存器数学运算。还有一个减法运算的例子:

rA before: - | 1234 | 0| 0| 9
Cell 1000: - | 2000 |  150| 0
SUB 1000    
rA after:  + | 766  | 149 | ?

我知道 -1234-(-2000) = 766 但是如何 (0 | 0) - 150 = 149 ??

为什么 9 - 0 = ?

这些是“打包”的词。也许我需要阅读更多关于它们的信息。或者谁能​​解释一下?

最佳答案

我相信逻辑是这样的:

  • 这台 MIX 机器是十进制机器;每个字节包含两位十进制数字。
  • rA 包含值 - 1234 00 00 09
  • 内存 M 包含值 - 2000 0150 00
  • 使用纯十进制算法从 rA 中减去 M 得到 766,014,991,或 + 0766 0149 91

或者,

  • 这个 MIX 机器是一个二进制机器;每个字节包含八个二进制位。
  • rA 包含值 - 04D2 00 00 09
  • M 包含值 - 07D0 0096 00
  • 使用纯十六进制算法从 rA 中减去 M 得到 0x2FE0095F7,或 + 02FE 0095 F7,或十进制,+ 0766 0149 247 [原文如此].

因此,在不知道这台特定 MIX 机器的二进制/十进制的情况下,我们无法确定结果的低位字节是什么。保证是-9的单字节表示,但是不知道这是91十进制还是0xF7二进制。

现在我面前没有 TAOCP 可供检查,但我相信这个逻辑很好地解释了让您感到困惑的 ?

关于assembly - MIX 减法如何处理 "packed"字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10065775/

相关文章:

linux - 如何将字符串数组作为参数传递给函数?

math - 您需要什么数学才能阅读计算机编程艺术?

python - 面向森林 TAoCP - python 中的算法

c - Extended Inline Assembly GCC-编译时表达式错误后错误的寄存器名称和垃圾 'done'

assembly - 8086 汇编中的大二进制移位?

assembly - MIX 或 MMIX - 什么是最好的

TAOCP中的算法分析

symbols - 首字母缩略词或速记 "lg"是什么意思?

c - C语言和冯诺依曼体系结构有什么关系?

c - 为什么 scanf() 加载的地址似乎低于我正在写入的缓冲区的地址?