Study/HelloWorld/MMIX
Материал из ProgSchool
Содержание |
MMIX — что это?
Пожалуй, никому из тех, кто интересуется программированием, не нужно представлять книгу Искусство программирования. Эта книга описывает принципы и законы, лежащие в основе программирования. Также книга содержит огромное количество упражнений, облегчающих восприятие теории.
Логично предположить, что в книге по программированию должны встречаться тексты программ. Хотя книга очень академична и в ней формулируется и доказывается огромное количество теорем, она содержит не оторванную от практики математическую теорию. Любые законы и теоремы описываются в контексте компьютерной науки и демонстрируется их применение, а для этого не обойтись без программных иллюстраций. Программы должны быть написаны на каком-то языке программирования. Кнут выбрал для этой цели машинный язык.
Чтобы книга не превратилась в справочник машинного языка какого-то конкретного компьютера, автор придумал гипотетический компьютер. Реальные компьютеры быстро сменяют друг друга, а копьютер, предложенный в книге, демонстрировал базовые принципы любого из реальных комьютеров своего времени. Назывался тот гипотетический компьютер MIX, он обладал архитектурой типичной для компьютеров 60x годов.
Затем MIX устарел. На замену ему Кнут придумал компьютер MMIX. По словам автора, MMIX - типичный современный компьютер с RISC архитектурой.
Я предполагаю, что примеры в книге становятся гораздо нагляднее, когда их можно занести в компьютер и посмотреть, как они выполняются. И решать упражнения, на мой взгляд, гораздо веселее, когда можно проверить результат работы программы на компьютере. Благо, что эмулятор MMIX существует и им можно и нужно пользоваться.
Установка под Винду
- Канонический способ.
- Быстрый способ:
- Качаете архив.
- Куда-нибудь распаковываете. Например в D:\usr\bin
- Добавляете этот путь в переменную среды %PATH%
- Проверяете, что команды
C:\> mmix C:\> mmixal
запускаются и выдают короткую справку по своему использованию.
Установка под Линукс
- Идём сюда: http://www-cs-faculty.stanford.edu/~uno/mmixware.html
-
Качаем файл, находящийся под словами final versions can be downloaded (например, сегодня это такая ссылка: final versions can be downloaded)
-
Распаковываем куда-нибудь архив. Например, у меня это каталог: /home/serdgo/usr/share/mmix
-
Убеждаемся, что установлена утилита ctangle. Если нет, то надо установить пакет cwebx. Например, так:
sudo apt-get install cwebx
- Убеждаемся, что установлены утилиты make и cc.
-
Сборка MMIX:
cd ~/usr/share/mmix make mmix
Выводится много текста и, если повезёт, в каталоге появится исполняемый файл mmix. Это эмулятор MMIX.
make mmixal
Выводится немного текста и в каталоге появляется исполняемый файл mmixal. Это компилятор ассемблера.
-
Проверяем, как работает:
./mmixal copy.mms
должна создать файл copy.mmo — это исполняемый файл для mmix.
./mmix copy README
должен вывести содержимое файла README на экран.
-
Последние необязательные штрихи (с учётом, разумеется, того, куда вы распаковали mmix и какие у вас папки прописаны в $PATH):
cd ~/usr/bin ln -s ../share/mmix/mmix ln -s ../share/mmix/mmixal
-
Проверяем, что получилось:
cd ~/desktop cp ~/usr/share/mmix/copy.mms . mmixal copy.mms mmix copy copy.mms
Последняя команда должна будет вывести содержимое файла copy.mms на экран.
Браво! установка завершена.
Первая программка
- Создаём файл first.mms следующего содержания:
* First programm LOC #100 Main TRAP 0,0,0* First program - это комментарий.
LOC #100 означает, что следующий за ней код надо разместить по адресу #00000100
Main означает место, с которого надо начинать выполнение программы.
TRAP 0,0,0 команда, которая производит прерывание операционной системы, т.е. это конец нашей программы.
-
Компилируем:
mmixal -l first.lst first.mms
В файле first.lst мы сможем увидеть соответствия между нашим кодом и машинным кодом. Также, создался исполняемый файл first.mmo.
-
Запускаем:
mmix first
Всё проходит успешно, пустая программа выполнилась так, как и положено выполняться пустой программе.
Немножко учимся
- Берём книжку http://profs.sci.univr.it/~manca/storia-informatica/mmix.pdf (или русскую версию)
- Читаем раздел 1.3.1'. Там описана архитектура и все команды процессора
- Открываем страницу 24 с упражнениями. Выполняем те упражнения, которые нравятся, сверяемся с ответами.
- На странице 94 читаем и пытаемся понять ответы на остальные упражнения.
- Открываем раздел 1.3.2'.
- Читаем сначала (стр. 28), до Программы H
- Читаем текст Программы H ("Hello, world") и её описание. (до стр. 32).
- Если всё понятно, то можно попробовать её выполнить.
Hello, World
Упрощённая (по сравнению с книгой) версия программы с пояснениями для тех, кто пропустил предыдущий пункт нашего руководства.
Файл hello.mms:
* Hello, world
LOC #100
Main GETA $255,String Адрес строки в регистр.
TRAP 0,Fputs,StdOut Выводим строку на стандарный вывод.
TRAP 0,Halt,0 Останавливаем программу
String BYTE "Hello, world!",#a,0 Строка, состоящая из букв, переноса строки, нулевого символа.
Если будете компилировать прямо этот файл, то ошибок не будет. Но будут предупреждения об очень длинных строках, которые обрезались. Поэтому стоит выкинуть из программы комментарии:
* Hello, world
LOC #100
Main GETA $255,String
TRAP 0,Fputs,StdOut
TRAP 0,Halt,0
String BYTE "Hello, world!",#a,0
Кстати, эта программа идентична программе на MMIX из огромной коллекции HelloWorld программ.
Скомпилировать:
mmixal -l hello.lst hello.mms
Выполнить:
mmix hello
Посмотреть результат компиляции (полезно):
less hello.lst