Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.
|
"Машина Мано": примеры программПример 1Задача. Найти разность двух чисел (пример взят из книги Мано, см. таблицу 6-9). Решение. Следуя Мано, введем следующие обозначения для чисел: Поскольку в системе команд машины Мано вычитание отсутствует, придется сводить его к сложению. Прежде всего, учтем, что A - B = A + (-B). Кроме того, вспомним правила преобразования целого положительного числа в дополнительный код: чтобы получить отрицательное число (здесь лучше говорить чтобы изменить знак числа!) необходимо его проинвертировать, т.е. все 0 заменить на 1 и наоборот, и к результату прибавить 1. В принципе перед нами типичный инженерный подход, когда ради упрощения hardware перекладывают его функции на software. Аналогичным образом, кстати, в простых машинах часто поступали с умножением и делением. В частности, организацию умножения для машины Мано можно посмотреть в одной из хороших презентаций по машине Мано, а более простое описание этого процесса на русском языке разобрать на базе эксперимента 2.5.5 в книге "Популярные лекции об устройстве компьютера" (там дана блок-схема алгоритма и ее реализация на Паскале). Окончательная программа решения задачи выглядит следующим образом.
Пример 2Задача. Найти сумму 100 чисел, располагающихся в памяти начиная с адреса 150h (пример взят из книги Мано, см. таблицу 6-13). Решение. Основной идеей обработки массивов является обращение к его элементам через ячейку ОЗУ, в которой последовательно формируются их адреса (в программе данная ячейка обозначается PTR (от английского pointer)). Подобный метод адресации принято называть косвенным. В современных процессорах он также широко используется, с той лишь разницей, что адрес элементов хранится не в ОЗУ, а в регистре микропроцессора. Другая величина, позволяющая организовать циклическое суммирование, - это счетчик CTR (от английского counter). Поскольку машинам обычно проще сравнивать результат вычислений с нулем, то счетчик меняется не от 0 до 100, а от отрицательного значения -100 до 0, что обеспечивает более простую организацию ветвления. Кстати, об организации ветвления. Поскольку в машине Мано условные переходы пропускают одну следующую команду (нетрадиционное, но легко реализуемое технически решение!), то после сразу после него ставится переход безусловный - см. пару команд с адресами 107 и 108. Сумма накапливается непосредственно в аккумуляторе - больше нигде этот регистр не используется. Итоговый результат заносится в ячейку SUM. Для тех, кому близок язык высокого уровня, приведем аналог программы на языке C. Вот, пожалуй, и все, что требуется предварительно рассказать. Остальное должно быть понятно из нижеследующей таблицы.
|