Assembly donald knuth'中的算术运算;s混合汇编语言

Assembly donald knuth'中的算术运算;s混合汇编语言,assembly,knuth,Assembly,Knuth,我一直在读Donald Knuth的《编程的艺术》(The Art of Programming,Volume 1),其中MIX被用作汇编语言。在Knuth讨论混合算术运算的部分中,我不理解减法、乘法和除法运算是如何执行的 例如,教科书有以下内容: 寄存器A有以下单词代码:-|1234 | 0 | 0 | 9和 存储单元,比如M,有以下单词代码:-|2000 | 150 | 0 这本书说,在执行A-M时,结果是:+|766 | 149 |? 在混合模式中,记忆被分割成单词。每个单词都有以下内容:

我一直在读Donald Knuth的《编程的艺术》(The Art of Programming,Volume 1),其中MIX被用作汇编语言。在Knuth讨论混合算术运算的部分中,我不理解减法、乘法和除法运算是如何执行的

例如,教科书有以下内容:

寄存器A有以下单词代码:
-|1234 | 0 | 0 | 9
和 存储单元,比如M,有以下单词代码:
-|2000 | 150 | 0

这本书说,在执行A-M时,结果是:
+|766 | 149 |?

在混合模式中,记忆被分割成单词。每个单词都有以下内容: 第一个字段表示符号(+或-)
接下来的两个字节保存地址。
下一个字节表示索引,第五个字节表示字段规范。
最后一个字节是操作码。
这本书说,在执行A-M时,结果是:
+|766 | 149 |?


有人能帮我吗?

正在执行减法运算,因此人们会直觉地认为答案应该是这样的:

rA  - | 1234 | 0 | 0 | 9  | (before)
SUB - | 2000 |  150  | 0  |
---------------------------
      | +766 |  +150 | -9 | (after)
这是错误的,因为即使您知道(3:4)是150,也无法确定(3:3)和(4:4)的单个值。此外,字节的符号不一致。如果考虑每字节5位的情况,则该机器将此结果中的最低有效字节视为:

[321 x(150)]-9=[321 x(149)]+[320 x(23)]

每字节有6位的机器将解释为:

[641x(150)]-9=[641x(149)]+[640x55]

更进一步说,每字节7位的机器将解释为:

[1281x(150)]-9=[1281x(149)]+[1280x119]

因此,您可以从这些示例中看到,对于任何字节大小,都存在149,但最低有效字节根据机器的不同而不同。因此,正确的答案是

rA  - | 1234 | 0 | 0 | 9 | (before)
SUB - | 2000 |  150  | 0 |
--------------------------
rA  + |  766 |  149  | ? | (after)

假设每个字节的大小为
b
。因此,
+|1234 | 0 | 0 | 9
可以写成:
-(1234*B³+9)

-| 2000 | 150 | 0 |
可以写成:
-(2000*B³+150*B+0)

现在从第一个数中减去第二个数得到:
-(1234*B³+9)-(2000*B³+150*B))

=766*B³+150*B-6

但这不能直接表示(因为一个术语是否定的),因此:
=766*B³+149*B+(B-6)
其中
B=2^B


因此,我们不知道寄存器的最后一块将保存什么,因为这取决于一个字节大小的定义,即
b

我意识到这个问题有点老了,但我最近正在解决这个问题。 问题的核心是含糊不清;混合的印刷品 语言是模棱两可的

根据Knuth的说法,一个字节必须至少包含64个值(0..63),且不超过 100(0..99)个值。如果仔细阅读这本书,其他一些答案将是无效的 规范(第125页第1卷)

让我们用二进制和十进制解释来解决这个问题。首先是混合词 显式转换,然后以熟悉的方式执行算术 十进制模式。最后,答案被转换回混合表示

BINARY MODE REALITY
1234 0 0 9 = [(1234 * 64^3) + (0 * 64*2) + (0 * 64) + 9] = 323485705

2000 150 0 = [(2000 * 64*3) + (150 * 64) + 0] = 524297600

-323485705 - -524297600 = 200811895
答案的混合词二进制表示为:

200811895 = [(766 * 64^3) + (149 * 64) + 55] = 766 149 55
现在进行十进制解释:

DECIMAL MODE REALITY
1234 0 0 9 = [(1234 * 10^3) + (0 * 10^2) + (0*10) + 9] = 1234009

2000 150 0 = [(2000 * 10^3) + (150 * 10) + 0] = 2001500

-1234009 - -2001500 = 767 491
混合字十进制表示法为:

767491 = [(766 * 10^3) + (149 * 10) + 1] = 766 149 1
请注意,打印的表示不明确。 例如
1234 0 0 9
可以同时表示
323485705
1234009
。 根据您对单词的阅读(二进制或十进制模式),您可以 用两个独特的答案解决两个不同的问题

下表将对问题进行总结,希望能把事情弄清楚

       MIX            Binary           Decimal
rA  -1234 0 0 9    -323485705         -1234009
SUB -2000 150 0  - -524297600       - -2001500
    -----------    ----------         --------
      766 149 ?     200811895           767491 NOTE: 2 different answers!
给出的打印答案是766149?我们能解决这个问题吗?价值观

  766 149 0     200811840           767490
          ?            55                1
混合词表示法足够含糊不清,而无需插入 现场包装;这很容易出错。现场包装不相关 因为操作将整个单词作为一个单元来处理。代表 作为字段压缩字节的操作是另一层抽象。

我们必须记住字节在MIX中的含义。字节必须能够容纳:

  • 至少64个不同的值,以及
  • 最多100个 值
  • 在二进制计算机上,字节必须是6位的。因为它允许我们存储2个⁶=64个不同的值,满足条件1。和64≤100,满足条件2

    十进制计算机上,字节必须2位大。因为这将允许我们存储10²=100个不同的值,满足条件1。和100≤100,满足条件2

    让我们看看如何在每台计算机上进行计算

    在6位二进制计算机上: 及

    减去这两者,我们得到:

    ┌─┬──────┬──────┬──────┐
    │+│000010 010101│110111│
    └─┴──────┴──────┴──────┘
    
    ┌─┬──┬──┬──┐
    │+│01 49│91│
    └─┴──┴──┴──┘
    
    以十进制表示,其等于:

    ┌─┬─┬─┬──┐
    │+│149│55│  (we'll call this result A)
    └─┴─┴─┴──┘
    
    ┌─┬─┬─┬──┐
    │+│149│91│  (we'll call this result B)  
    └─┴─┴─┴──┘
    
    在2位十进制计算机上: 及

    减去这两者,我们得到:

    ┌─┬──────┬──────┬──────┐
    │+│000010 010101│110111│
    └─┴──────┴──────┴──────┘
    
    ┌─┬──┬──┬──┐
    │+│01 49│91│
    └─┴──┴──┴──┘
    
    以十进制表示,其等于:

    ┌─┬─┬─┬──┐
    │+│149│55│  (we'll call this result A)
    └─┴─┴─┴──┘
    
    ┌─┬─┬─┬──┐
    │+│149│91│  (we'll call this result B)  
    └─┴─┴─┴──┘
    

    结论 我们注意到≠B、 但它总是存在的。这是最后一个不同的字节。
    因此,根据MIX计算机使用的数字系统,最低有效字节将有所不同,而下面两个字节将始终相同。因此书中出现了“?”。

    你能解释一下符号吗?也就是说,一个人应该如何解释例如
    ——|1234 | 0 | 0 | 9
    ?无论你未来的意图是什么,都不要试图破译现在的古老混合语言——如果你试图破译Doland Knuth的MMIX——“面向新千年的RISC计算机”——汇编语言,你的努力肯定会得到更好的回报我刚开始读唐纳德·克努特的《计算机编程的艺术》第一卷。我在书中读到,所有的卷都将用新的MMIX汇编语言重新编辑。它们是否已经在MMIX中可用@xmojmr@user346484