Study/HelloWorld/MMIX

Материал из ProgSchool

Перейти к: навигация, поиск

Содержание

MMIX — что это?

Пожалуй, никому из тех, кто интересуется программированием, не нужно представлять книгу Искусство программирования. Эта книга описывает принципы и законы, лежащие в основе программирования. Также книга содержит огромное количество упражнений, облегчающих восприятие теории.

Логично предположить, что в книге по программированию должны встречаться тексты программ. Хотя книга очень академична и в ней формулируется и доказывается огромное количество теорем, она содержит не оторванную от практики математическую теорию. Любые законы и теоремы описываются в контексте компьютерной науки и демонстрируется их применение, а для этого не обойтись без программных иллюстраций. Программы должны быть написаны на каком-то языке программирования. Кнут выбрал для этой цели машинный язык.

Чтобы книга не превратилась в справочник машинного языка какого-то конкретного компьютера, автор придумал гипотетический компьютер. Реальные компьютеры быстро сменяют друг друга, а копьютер, предложенный в книге, демонстрировал базовые принципы любого из реальных комьютеров своего времени. Назывался тот гипотетический компьютер MIX, он обладал архитектурой типичной для компьютеров 60x годов.

Затем MIX устарел. На замену ему Кнут придумал компьютер MMIX. По словам автора, MMIX - типичный современный компьютер с RISC архитектурой.


Я предполагаю, что примеры в книге становятся гораздо нагляднее, когда их можно занести в компьютер и посмотреть, как они выполняются. И решать упражнения, на мой взгляд, гораздо веселее, когда можно проверить результат работы программы на компьютере. Благо, что эмулятор MMIX существует и им можно и нужно пользоваться.

Установка под Винду

Установка под Линукс

  1. Идём сюда: http://www-cs-faculty.stanford.edu/~uno/mmixware.html
  2. Качаем файл, находящийся под словами final versions can be downloaded (например, сегодня это такая ссылка: final versions can be downloaded)

  3. Распаковываем куда-нибудь архив. Например, у меня это каталог: /home/serdgo/usr/share/mmix

  4. Убеждаемся, что установлена утилита ctangle. Если нет, то надо установить пакет cwebx. Например, так:

    sudo apt-get install cwebx
    
  5. Убеждаемся, что установлены утилиты make и cc.
  6. Сборка MMIX:

    cd ~/usr/share/mmix
    make mmix
    

    Выводится много текста и, если повезёт, в каталоге появится исполняемый файл mmix. Это эмулятор MMIX.

    make mmixal
    

    Выводится немного текста и в каталоге появляется исполняемый файл mmixal. Это компилятор ассемблера.

  7. Проверяем, как работает:

    ./mmixal copy.mms
    

    должна создать файл copy.mmo — это исполняемый файл для mmix.

    ./mmix copy README
    

    должен вывести содержимое файла README на экран.

  8. Последние необязательные штрихи (с учётом, разумеется, того, куда вы распаковали mmix и какие у вас папки прописаны в $PATH):

    cd ~/usr/bin
    ln -s ../share/mmix/mmix
    ln -s ../share/mmix/mmixal
    
  9. Проверяем, что получилось:

    cd ~/desktop
    cp ~/usr/share/mmix/copy.mms .
    mmixal copy.mms
    mmix copy copy.mms
    

    Последняя команда должна будет вывести содержимое файла copy.mms на экран.

Браво! установка завершена.

Первая программка

  1. Создаём файл first.mms следующего содержания:
     * First programm
             LOC   #100
     Main    TRAP  0,0,0
    

    * First program - это комментарий.
    LOC #100 означает, что следующий за ней код надо разместить по адресу #00000100
    Main означает место, с которого надо начинать выполнение программы.
    TRAP 0,0,0 команда, которая производит прерывание операционной системы, т.е. это конец нашей программы.

  2. Компилируем:
     mmixal -l first.lst first.mms
    

    В файле first.lst мы сможем увидеть соответствия между нашим кодом и машинным кодом. Также, создался исполняемый файл first.mmo.

  3. Запускаем:
     mmix first
    

    Всё проходит успешно, пустая программа выполнилась так, как и положено выполняться пустой программе.

Немножко учимся

  1. Берём книжку http://profs.sci.univr.it/~manca/storia-informatica/mmix.pdf (или русскую версию)
  2. Читаем раздел 1.3.1'. Там описана архитектура и все команды процессора
  3. Открываем страницу 24 с упражнениями. Выполняем те упражнения, которые нравятся, сверяемся с ответами.
  4. На странице 94 читаем и пытаемся понять ответы на остальные упражнения.
  5. Открываем раздел 1.3.2'.
  6. Читаем сначала (стр. 28), до Программы H
  7. Читаем текст Программы H ("Hello, world") и её описание. (до стр. 32).
  8. Если всё понятно, то можно попробовать её выполнить.

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
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Рекомендуем посмотреть
Инструменты