2014-09-16 2 views
2

Я читал «Искусство программирования» Дональда Кнута, том 1, в котором MIX используется в качестве языка ассемблера. В разделе, где Кнут говорит об арифметических операциях в MIX, я не понимал, как выполняются операции вычитания, умножения и деления.Арифметические операции на языке ассемблера смешения дональда Кнута

Например, текст книги есть это:

регистр А имеет следующий код слова: -| 1234 | 0 | 0 | 9 и ячейку с памяти, скажем, М, имеет следующий код слова: -| 2000 | 150 | 0.

В книге говорится о выполнении А-М в результате: +| 766 | 149|?.

В MIX память разделяется на слова. Каждое слово имеет следующее: Первое поле представляет знак (+ или -)
Следующие два байта содержат адрес.
Следующий байт представляет собой индексирование, а пятый - для спецификации поля.
Последний байт предназначен для кода операции.
В книге говорится, что при выполнении A-M результатом является: +| 766 | 149|?.

Может ли кто-нибудь помочь мне с этим?

+1

Можете ли вы объяснить обозначение? То есть, как следует интерпретировать, например, '- | 1234 | 0 | 0 | 9'? – Michael

+1

Независимо от ваших будущих намерений, вместо того, чтобы пытаться расшифровать теперь, конечно, древний язык MIX, ваши усилия будут лучше, если вы попытаетесь расшифровать ** MMIX ** Долины Кнута ** - «Компьютер RISC для нового тысячелетия» _ - сборка язык - http://mmix.cs.hm.edu/index.html ([Википедия: MMIX] (http://en.wikipedia.org/wiki/MMIX)) – xmojmr

+0

Я только что начал читать искусство Дональда Кнута Том компьютерного программирования 1. Я прочитал в книге, что все тома будут повторно отредактированы на новом ассемблере MMIX. Доступны ли они в MMIX? @xmojmr – coderasp

ответ

2

операция вычитания выполняется, поэтому один интуитивно кажется, что ответ должен быть что-то вроде:

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

Это неправильно, потому что даже если вы знаете, что (3: 4) 150, то индивидуальные значения (3: 3) и (4: 4) не могут быть определены. Кроме того, знаки байтов не совпадают. Если рассмотреть случай 5 бит на байт, машина видит младшие байты в этом результате, как:

[32 х (150)] - 9 = [32 х (149)] + [32 х (23)]

машина, которая состоит из 6 битов на байт будет интерпретировать это как:

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

И собирается один дальше, машина 7-бит на байт будет интерпретировать это как:

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

Таким образом, из этих примеров видно, что 149 присутствует для любого размера байта, но младший байт изменяется в зависимости от машины. Таким образом, правильный ответ

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

Предположим, что размер каждого байта 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.