Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.
|
Примеры простых программПриведем несколько примеров простейших программ для MMIX. В описании Кнута, по-моему, подобных примеров очень не хватает (будем надеяться, что в окончательном варианте текста книги они все же появятся). Представленные примеры содержат линейный, разветвляющийся и циклический фрагменты, а также демонстрируют простейшие приемы работы с байтовыми данными и массивами. Такой подбор задач позволяет автору надеяться, что, просмотрев их, читатель получит некоторое представление о программе для MMIX. Во всех примерах дополнительно ассемблерная мнемоника, предложенная Д.Кнутом. Хотя ее подробное обсуждение выходит за рамки данной статьи, я все же решил сохранить данный столбец, поскольку он во многом интуитивно понятен и частично облегчает разбор кода. В частности, пользуясь мнемоникой легко видеть, где стоит номер регистра, а где константа. 1. Пример на вычисленияПусть мы хотим вычислить сумму двух целых чисел: A, которое хранится с адреса 11016, и B (11816). Программа для решения этой простейшей задачи на MMIX будет иметь вид:
Напомним читателям, что команды в MMIX занимают по 4 байта (отсюда нумерация в первом столбике), а целые числа – 8 байт. Интересно, что для нахождения суммы вещественных чисел достаточно просто изменить код операции сложения в предпоследней команде. 2. Модуль числаВычислим модуль целого числа N, хранящегося в регистре $1, и поместим результат в регистр $2. Вспомним, что для неотрицательных чисел модуль равен самому числу, а в противном случае результат равен разности 0 – N.
Как оказалось, MMIX не имеет специальных инструкций для переписи содержимого из одного регистра в другой. Поэтому в первой команде программы ее пришлось искусственно создать путем сложения с нулем (в описании Кнута мне не попадалось никаких рекомендаций по этому поводу, но применяемая хитрость выглядит вполне “по-кнутовски”). 3. Копирование массиваСкопируем байты 100-14F в область 200-24F.
С технической точки зрения оказывается удобнее копировать массив начиная с больших адресов. Начальный адрес исходного массива помещается в $1, а адрес копии – в $2. Для смещения по массиву используется регистр $3, пробегающий значения от 4F до 0 (последний копируемый байт). При следующем вычитании в $3 получается отрицательный результат и цикл завершается. Регистр $0, как уже догадался читатель, использован в качестве рабочего для временного хранения значения очередного байта. © Е.А.Еремин, 2002 Статья: Еремин Е.А. MMIX – учебный RISC-процессор нового тысячелетия от Дональда Кнута. - Газета "Информатика", 2002, N 40, с.18-27 |