4

アセンブリ言語として MIX が使用されている Donald Knuth の The Art of Programming, Volume 1 を読んでいます。Knuth が MIX の算術演算について説明しているセクションで、減算、乗算、および除算の演算がどのように実行されるかを理解していませんでした。

たとえば、教科書には次のように書かれています。

レジスタ A は次のワード コード-| 1234 | 0 | 0 | 9を持ち、たとえば M というメモリ セルは次のワード コードを持ちます-| 2000 | 150 | 0

この本は、AMを実行すると結果が次のようになると述べています+| 766 | 149|?

MIXでは、記憶は単語に分割されます。各ワードには次のものがあります。 最初のフィールドは符号 (+ または -) を表し
ます。次の 2 バイトはアドレスを保持します。
次のバイトはインデックスを表し、5 番目のバイトはフィールド指定用です。
最後のバイトはオペコード用です。
この本は、AMを実行すると結果が次のようになると述べています+| 766 | 149|?

誰でもこれで私を助けることができますか?

4

4 に答える 4

3

各バイトのサイズが であると仮定しますb。したがって、 : と+|1234|0|0|9記述でき、:
-(1234*B³+9)
と記述-|2000|150|0|できます
-(2000*B³+150*B+0)
最初の数値から 2 番目の数値を引くと、次の
-(1234*B³+9)-(-(2000*B³+150*B))
=766*B³+150*B-6
ようになり
=766*B³+149*B+(B-6) ますB=2^b

したがって、レジスタの最後のブロックが何を保持するかはわかりません。これは、1 バイトのサイズの定義、つまり に依存するためですb

于 2017-08-26T08:55:08.203 に答える
3

減算操作が実行されているため、直感的に答えは次のようになるはずです。

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

(3:4) が 150 であることはわかっていても、(3:3) と (4:4) の個々の値を特定できないため、これは誤りです。また、バイトの符号が一致しません。1 バイトあたり 5 ビットの場合を考えると、マシンはこの結果の最下位バイトを次のように認識します。

[ 32 1 x (150) ] - 9 = [ 32 1 x (149) ] + [ 32 0 x (23) ]

1 バイトあたり 6 ビットのマシンは、これを次のように解釈します。

[ 64 1 x (150) ] - 9 = [ 64 1 x (149) ] + [ 64 0 x (55) ]

さらに、1 バイトあたり 7 ビットのマシンは、これを次のように解釈します。

[ 128 1 x (150) ] - 9 = [ 128 1 x (149) ] + [ 128 0 x (119) ]

これらの例から、どのバイト サイズにも 149 が存在することがわかりますが、最下位バイトはマシンによって異なります。したがって、正解は

rA  - | 1234 | 0 | 0 | 9 | (before)
SUB - | 2000 |  150  | 0 |
--------------------------
rA  + |  766 |  149  | ? | (after)
于 2015-04-14T15:36:58.510 に答える