Я читал «Искусство программирования» Дональда Кнута Том 1. Теперь я закончил первую часть, где объяснялась вся математика, и это было очень приятно. К сожалению, на с. 121 он начинает объяснять этот вымышленный машинный язык под названием MIX
на основе реальных машинных языков, в котором он впоследствии объяснит все алгоритмы, и г-н Кнут полностью потеряет меня.Как работают операции LDA, STA, SUB, ADD, MUL и DIV в машинном языке Knuth MIX?
Надеюсь, здесь есть кто-то, кто «говорит» немного MIX
и может помочь мне разобраться. В частности, он потерял меня, когда начал объяснять разные операции и показывать примеры (стр. 125).
Кнут использует этот «формат команда» со следующей формой:
Он также объясняет, что различные байты означают:
Так правые байты операция (например, LDA
«регистр нагрузки A»). F-байтом является модификация кода операции с спецификацией поля (L: R) с 8L + R (например, C = 8 и F = 11 дает «регистр нагрузки A в поле (1: 3)). Затем +/- AA - это адрес, а я - спецификация индекса для изменения адреса.
Ну, это для меня какой-то смысл. Но Кнут приходит с некоторыми примерами. Первое, что я понимаю, за исключением нескольких бит, но я не могу обернуть мою голову вокруг трех последних второго примера и вообще ничего из более сложных операций в примере 3 ниже
Вот первый пример:.
LDA 2000
просто загружает полное слово, и мы видим его полностью в регистре A rA
. Второй LDA 2000(1:5)
загружает все со второго бита (индекс 1) до конца (индекс 5), и поэтому все, кроме знака плюса, загружается. А третий с LDA 2000(3:5)
просто загружает все с третьего байта до последнего. Также имеет смысл LDA 2000(0:3)
(четвертый пример). -803 следует скопировать, а - - и 80 и 3 будут помещены в конец.
Пока все хорошо, в номере5, если мы следуем той же логике, LDA2000(4:4)
, она передает только четвертый байт. Который он действительно сделал до последней позиции. Но тогда в LDA 2000(1:1)
должен быть скопирован только первый байт (знак). Это странно. Почему первое значение a + вместо a - (я ожидал, что только - будет скопирован). и почему другие значения все 0 и последний знак вопроса?
Затем он дает второй пример операции STA
(магазин A):
Опять же, STA 2000
, STA 2000(1:5)
и STA 2000(5:5)
имеют смысл с той же логикой. Однако тогда Кнут делает STA 2000(2:2)
. Вы ожидали бы, что второй байт скопирован, что равно 7 в регистре A. Однако каким-то образом мы закончили с - 1 0 3 4 5
.Я смотрел на них часами и не знаю, как это, или два примера, которые следуют за этим (STA 2000(2:3)
и STA 2000(0:1)
), могут привести к отображению содержимого местоположения.
Я надеюсь, что кто-то здесь сможет осветить эти последние три.
Кроме того, у меня есть большие проблемы со страницей, где он объясняет операцию ADD
, SUB
, MUL
и DIV
. Третий пример, см
Этот третий пример моя конечная цель, чтобы понять и сейчас это делает абсолютно нулевой смысл. Это очень расстраивает, так как я хочу продолжить его алгоритмы, но если я не понимаю MIX
, я не смогу понять остальных!
Я надеюсь, что у кого-то здесь был курс на MIX
или видит то, чего я не вижу, и готов поделиться своими знаниями и знаниями!
Моя копия Кнута в настоящее время находится в транспортном контейнере на корабле, но [здесь] (http://en.wikipedia.org/wiki/MIX) с страницей wikipedia для MIX и [здесь] (http: //www.codeproject.com/Articles/152527/A-Simulator-for-Knuth-s-MIX-Computer), который вы можете проверить. –
Спасибо, что прочитал эту страницу, но, к сожалению, она не дает объяснений по языковым операциям. Я нашел онлайн-симулятор MIX [здесь] (http://www.recolidaymath.com/mixal/). –
Я преподавал структуры данных в 1969 году из тома 1 Кнута, никогда не понимая код сборки MIX; он предоставляет MIX-независимый код. ИМХО, это не повредило мне заметно, и я отлично справлялся со мной на протяжении более 40 лет (и я сделал много сборочного кодирования с использованием алгоритмов, которые он описал с тех пор). Надеюсь, вы получите хороший ответ, но вам не нужно ценить красоту и интуицию его доставки. –