Node:Команды загрузки, Next:Команды запоминания, Previous:Структура инструкции, Up:Набор инструкций MIX
Для загрузки содержимого памяти в регистр могут использоваться следующие инструкции:
LDA
rA <- V.
LDX
rX <- V.
LDi
rIi <- V.
LDAN
rA <- -V.
LDXN
rX <- -V.
LDiN
rIi <- -V.
Во всех вышеперечисленных инструкиях поле MOD выбирает байты
из ячейки памяти с адресом M, загружаемые в нужный регистр
(указанный OPCODE). Например, слово + 00 13 01 27 11
представляет собой инструкцию:
LD3 13,1(3:3) ^ ^ ^ ^ | | | | | | | --- MOD = 27 = 3*8 + 3 | | --- INDEX = 1 | --- ADDRESS = 00 13 --- OPCODE = 11Предположим, что перед выполнением этой инструкции компьютер MIX находился в следующем состоянии:
[rI1] = - 00 01 [rI3] = + 24 12 [12] = - 01 02 03 04 05
Поскольку, в этом случае M = 13 + [rI1] = 12,
V = [M](3:3) = (- 01 02 03 04 05)(3:3) = + 00 00 00 00 03
(имейте в виду, что указанное поле заполняется слева нулевыми байтами
до полного слова). Отсюда, состояние MIX после выполнения инструкции
будет:
[rI1] = - 00 01 [rI3] = + 00 03 [12] = - 01 02 03 04 05
Чтобы ещё проиллюстрировать команды загрузки, приведём таблицу,
показывающую содержимое rX после различных инструкций LDX:
LDX 12(0:0) [rX] = - 00 00 00 00 00
LDX 12(0:1) [rX] = - 00 00 00 00 01
LDX 12(3:5) [rX] = + 00 00 03 04 05
LDX 12(3:4) [rX] = + 00 00 00 03 04
LDX 12(0:5) [rX] = - 01 02 03 04 05
Node:Команды перехода, Next:Команды ввода/вывода, Previous:Команды сравнения, Up:Набор инструкций MIX
Компьютер MIX содержит внутренний регистр, называемый счётчиком
положения, сохраняющий адрес следующей инструкции, которая должна быть
получена из памяти и обработан виртуальным процессором. Вы не можете
напрямую изменять содержимое этого внутреннего регистра инструкцией
загрузки: после получения текущей инструкции он автоматически
увеличивается на 1 самим MIX. Тем не менее, существует набор инструкций
(называемых инструкциями перехода), которые могут изменять содержимое
счётчика положения при выполнении некоторого условия. При этом
значение адреса инструкции, которая выполнялась бы следующей, если бы
не было перехода, помещается в rJ (кроме JSJ), а значение
счётчика положения устанавливается равным M (таким образом, следующая
инструкция берётся по этому новому адресу). Позднее вы можете вернуться
к отправной точке перехода, читая адрес, сохранённый в rJ.
Компьютер MIX имеет следующие инструкции перехода:
Эти инструкции выполняют обязательный переход по указанному адресу.
Используйте JSJ, если адрес возврата вам не нужен.
JMP
JSJ
Эти инструкции для принятия решения о переходе проверяют триггер переполнения.
JOV
JNOV
В следующих инструкциях переход обусловлен содержимым флага сравнения:
JL
[CM] = L. OPCODE = 39, MOD = 4.
JE
[CM] = E. OPCODE = 39, MOD = 5.
JG
[CM] = G. OPCODE = 39, MOD = 6.
JGE
[CM] не равно L. OPCODE = 39, MOD = 7.
JNE
[CM] не равно E. OPCODE = 39, MOD = 8.
JLE
[CM] не равно G. OPCODE = 39, MOD = 9.
Вы можете также осуществлять переход в зависимости от значений регистров MIX, используя следующие инструкции:
JAN
JAZ
JAP
JANN
JANZ
JANP
JXN
JXZ
JXP
JXNN
JXNZ
JXNP
JiN
JiZ
JiP
JiNN
JiNZ
JiNP
Node:Запуск программы, Next:Использование mixguile, Previous:Компиляция, Up:Начало работы
MIX - мифический компьютер, и бесполезно пытаться заказать его у вашего поставщика аппаратного обеспечения. Тем не менее, MDK предоставляет три программных эмулятора этого компьютера. Это
mixvm, эмулятор, ориентированный на использование командной строки,
gmixvm, основанный на GTK графический интерфейс mixvm, и
mixguile, оболочка Guile со встроенным эмулятором MIX.
Все три эмулятора используют один и тот же набор команд пользователя,
но, как отмечено выше, предлагают различные пользовательские интерфейсы.
В этом разделе мы опишем некоторые из этих команд и покажем вам, как
пользоваться ими в командной строке mixvm. Вы можете также
использовать их в командной строке gmixvm (see gmixvm)
или работать со встроенными примитивами Scheme mixguile
(see Использование mixguile).
Используя эмуляторы MIX вы можете запускать ваши программы на MIXAL,
предварительно скомпилированные mixasm в двоичные файлы .mix.
mixvm может использоваться в интерактивном или в
неинтерактивном режиме. В втором случае mixvm загружает
вашу программу в память, выполняет её (создавая выходные файлы,
обусловленые наличием в программе инструкций MIXAL OUT) и
завершает работу при обнаружении инструкции HLT. В интерактивном
режиме вы попадёте в приглашение оболочки, позволяющее вам давать
команды работающей виртуальной машине. Эти команды позволят вам
загружать, запускать и отлаживать программы, а также проверять состояние
компьютера MIX (содержимое регистров, ячеек памяти и т.д.).
Node:Файловые команды, Next:Команды отладки, Previous:Команды, Up:Команды
В вашем распоряжении находится набор команд, позволяющий загружать и выполнять исполняемые файлы MIX, а также работать с исходными файлами на MIXAL:
| load file[.mix] | файловая команда |
Эта команда загружает двоичный файл file.mix в память виртуальной
машины, и устанавливает счётчик программы на начало загруженной
программы. Этот адрес задаётся операндом псевдоинструкции END
в исходном файле на MIXAL. Так, если исходный файл sample.mixal
содержит строку:
END 3000 и вы, скомпилировав её MIX > load sample Program loaded. Start address: 3000 MIX > |
| run [file[.mix]] | файловая команда |
При выполнении без аргумента эта команда начинает или возобновляет
выполнение инструкций начиная с адреса, соответствующего текущему значению
счётчика программы. Поэтому применение этой команды после успешного
выполнения load выполнит загруженную программу до обнаружения
инструкции HLT или до точки останова. Если вы зададите в качестве
аргумента имя файла MIX, этот файл будет загружен (как в случае
load file) и выполнен. Если run вызывается вновь
после завершения выполнения программы (т.е., после того, как при прошлом
запуске обнаружена инструкция HLT), счётчик программы
переустанавливается и выполнение начинается с начала (собственно говоря,
команда load перед продолжением выполнения программы сохраняет
текущий набор установленных точек останова).
|
| edit [file[.mixal]] | файловая команда |
Вызывается определённый в переменной среды MDK_EDITOR редактор
для редактирования исходного файла file.mixal. Если значение этой
переменной не установлено, проверяются другие в следующем порядке:
X_EDITOR, EDITOR и VISUAL. При вызове без аргумента
редактирует исходный файл загруженного в данный момент файла MIX. Команда,
используемая для редактирования исходных файлов, может также быть определена
командой sedit (see Команды конфигурирования).
|
| compile file[.mixal] | файловая команда |
Исходный файл file.mixal компилируется (с отладочной информацией)
mixasm. При вызове без аргументов перекомпилируется исходный
файл загруженного в данный момент файла MIX. Команда компиляции может
быть определена командой sasm (see Команды конфигурирования).
|
| pprog | файловая команда |
| psrc | файловая команда |
Вывести путь к загруженной в данный момент программе MIX и её исходному
файлу:
MIX > load ../samples/primes Program loaded. Start address: 3000 MIX > pprog ../samples/primes.mix MIX > psrc /home/jao/projects/mdk/gnu/samples/primes.mixal MIx> |
Наконец, для выхода их mixvm можно использовать команду quit:
| quit | файловая команда |
Выход из mixvm, текущие параметры конфигурации сохраняются в
~/.mdk/mixvm.config.
|