Node:Поддерживаемые платформы, Previous:Специальные флаги конфигурации, Up:Установка MDK
GNU MDK тестировался на следующих платформах:
Вероятно, MDK будет работать на всех платформах GNU/Linux и BSD. Если вы пытаетесь использовать на одной из не упомянутых выше платформ, пожалуйста, пошлите письмо автору.
Примечание: на этой платформе Кристоф тестировал только
mixvm и mixasm, с использованием gcc 2.95.3-2,
GLIB 1.2.10 и GNUreadline 4.1-2. Он сообщил о том, что
при первой попытке история команд не работала. Если вы обнаружите
проблемы с функционированием history/readline, попробуйте использовать
более новую или установленную вручную версию readline.
Node:Команды пересылки адреса, Next:Команды сравнения, Previous:Арифметические команды, Up:Набор инструкций MIX
В этих инструкциях M (адрес после модификации) используется как
число, а не как адрес ячейки памяти. Соответственно, M может
иметь любое допустимое для слова значение (т.е. не ограничено диапазонов
адресов памяти 0-3999).
ENTA
M в [rA]. OPCODE = 48, MOD = 2. rA <- M.
ENTX
M в [rX]. OPCODE = 55, MOD = 2. rX <- M.
ENTi
M в [rIi]. OPCODE = 48 + i, MOD = 2. rIi <- M.
ENNA
-M в [rA]. OPCODE = 48, MOD = 3. rA <- -M.
ENNX
-M в [rX]. OPCODE = 55, MOD = 3. rX <- -M.
ENNi
-M в [rIi]. OPCODE = 48 + i, MOD = 3. rIi <- -M.
INCA
M. OPCODE = 48, MOD = 0. rA <- rA + M.
INCX
M. OPCODE = 55, MOD = 0. rX <- rX + M.
INCi
M. OPCODE = 48 + i, MOD = 0. rIi <- rIi + M.
DECA
M. OPCODE = 48, MOD = 1. rA <- rA - M.
DECX
M. OPCODE = 55, MOD = 0. rX <- rX - M.
DECi
M. OPCODE = 48 + i, MaOD = 0. rIi <- rIi - M.
В вышеперечисленных инструкциях поле ADDRESS (модифицированное)
играет роль непосредственного операнда, и позволяет напрямую
устанавливать содержимое регистров MIX без перенаправления к ячейкам
памяти (в реальных процессорах это означает, что они выполняются быстрее,
чем обсуждавшиеся ранее инструкции, операнды которых берутся из памяти).
Так, если вы хотите поместить в rA значение -2000 (- 00 00 00 31 16),
вы можете использовать двоичную инструкцию + 31 16 00 03 48, или,
символически,
ENNA 2000
В сочетании с командами запоминания (STA, STX и т.д.)
эти инструкции позволяют устанавливать конкретные значения содержимого
ячеек памяти.
Имейте в виду, что в командах пересылки адреса поле MOD - не
спецификатор поля, а служит для определения (вместе с OPCODE)
конкретной выполняемой операции.
Node:Временные характеристики, Previous:Прочие команды, Up:Набор инструкций MIX
При написании программ на MIXAL (или любых других программ) нас часто интересует время их выполнения. Приблизительно, нас интересует ответ на вопрос: как долго будет выполняться программа? Конечно, это время выполнения является функцией от объёма входных данных, и ответ на наш вопрос обычно даётся в виде асимптотического поведения функции от объёма входных данных. В любом случае, для вычисления асимпотического приближения нам нужна мера времени выполнения одной инструкции на нашем (виртуальном) процессоре. Поэтому с каждой инструкцией MIX связано время выполнения, заданное в относительных единицах (в реальных компьютерах значение этой единицы зависит от аппаратной конфигурации). Когда наша виртуальная машина MIX выполняет программы, она может (по желанию) выводить значение времени выполнения на основе времени выполнения каждой отдельной инструкции.
В следующей таблице приведены значения времени выполнения (в вышеупомянутых относительных единицах) инструкций MIX.
NOP | 1 | ADD | 2 | SUB
| 2 | MUL | 10
|
DIV | 12 | NUM | 10 | CHAR
| 10 | HLT | 10
|
SLx | 2 | SRx | 2 | LDx
| 2 | STx | 2
|
JBUS | 1 | IOC | 1 | IN
| 1 | OUT | 1
|
JRED | 1 | Jx | 1 | INCx
| 1 | DECx | 1
|
ENTx | 1 | ENNx | 1 | CMPx
| 1 | MOVE | 1+2F
|
В таблице 'F' обозначает число перемещаемых блоков (заданное полем
FSPEC инструкции), SLx и SRx - сокращения для операций
побайтового сдвига, LDx обозначает все операции загрузки,
STx - все операции запоминания, Jx обозначает
все операции перехода, и т.д. для остальный сокращений.
Node:Команды конфигурирования, Next:Команды Scheme, Previous:Команды состояния, Up:Команды
Этот раздел описывает команды, позволяющие изменять поведение виртуальной
машины. Эта конфигурация хранится в каталоге MDK ~/.mdk.
Как можно видеть из описания, некоторые команды в качестве побочного
эффекта выводят на стандартный вывод информационные сообщения
(например, load выводит сообщение, информирующее о начальном
адресе загруженной программы). Эти сообщения могут быть включены и
отключены командой slog:
| slog on|off | команда конфигурирования |
Включает/выключает ведение лога информационных сообщений. Имейте в виду,
что сообщения об ошибках, а также сообщения о состоянии, требующие
использования команд, предварённых p (preg, pmem
и т.п.) выводятся всегда.
|
| stime on|off | команда конфигурирования |
| ptime | команда конфигурирования |
Команда stime включает/выключает вывод статистики времени выполнения,
а ptime выводит текущую статистику:
MIX > ptime Elapsed time: 10 /Total program time: 11 (Total uptime: 11) MIX > |
| sedit TEMPLATE | команда конфигурирования |
| pedit | команда конфигурирования |
sedit указывает команду, используемую для редактирования исходных
файлов на MIXAL командой edit. TEMPLATE должен содержать
управляющие литеры %s, отмечающие место, куда вставляется имя
исходного файла. Например, если вы введёте:
MIX > sedit emacsclient %s MIX > при выполнении в
|
| sasm TEMPLATE | команда конфигурирования |
| pasm | команда конфигурирования |
sasm указывает команду, используемую для компиляции исходных
файлов на MIXAL командой compile. template должен содержать
управляющие литеры %s, отмечающие место, куда вставляется имя
исходного файла. Например, если вы введёте:
MIX > sasm mixasm -g -l %s MIX > при выполнении в
|
| sddir DIRNAME | команда конфигурирования |
| pddir | команда конфигурирования |
Устройства MIX (see Устройства) реализованы в виде обычных файлов,
находящися по умолчанию в каталоге ~/.mdk. Команда sddir
позволяет указать иное расположение этих файлов, а pddir
выводит текущий каталог устройств.
|
Наконец, вы можете изменить командное приглашение по умолчанию
(MIX > ) командой prompt:
| prompt PROMPT | команда конфигурирования |
Изменяет командное приглашение на prompt. Если вы хотите поместить
в конце приглашения пробел(ы), заключите prompt в двойные кавычки
(например, prompt ">> ").
|