Node:Оболочка mixvm, Next:, Previous:Описание функций Scheme, Up:Описание функций Scheme



Оболочка команд mixvm

Каждой из команд mixvm, перечисленных в Команды, соответствует функция Scheme, название которой образовано добавлением к имени команды префикса mix- (например, mix-load, mix-run и т.д.). Эти оболочки команд реализованы единой функцией передачи команды:

mixvm-cmd command argument Function
Передаёт указанную команду command и аргументы виртуальной машине MIX. И command, и argument должны быть строками. Результат будет тот же, что и выполнение "command argument" из командной строки mixvm или gmixvm.

Например, вы может вызвать команду run из приглашения mixvm тремя разными способами:

MIX > run hello
MIX > (mix-run "hello")
MIX > (mixvm-cmd "run" "hello")

(в приглашении mixguile или в скрипте Scheme могут быть использованы только две последние формы).

Функции mix- не вычисляют значений. Если вы хотите проверять результаты вызова команд mixvm, используйте функцию mix-last-result:

mix-last-result Function
Возвращает #t, если последнее выполнение команды mixvm было успешным, #f в противном случае.

Используя эту функцию, мы можем усовершенствовать скрипт для запуска программы, приведённый в прошлом разделе, добавлением проверки ошибок:

#! /usr/bin/mixguile \
-e main -s
!#

;;; выполнить заданную программу и вывести содержимое регистров.

(define main
  (lambda (args)
    ;; загрузить файл, указанный в аргументе командной строки
    (mix-load (cadr args))
    ;; выполнить его, если команда mix-load сработала
    (if (mix-last-result) (mix-run))
    ;; вывести содержимое регистров, если вышеприведённые
    ;; команды успешно завершили работу
    (if (mix-last-result) (mix-pall))))

Список доступных команд см. в Команды. Там дано описание команд mixvm, соответствующие команды Scheme используются точно так же, и поэтому мы не приводим здесь полного описания этих функций. Вместо этого мы лишь укажем те оболочки, поведение которых чем-то отличается от соответсвующих команд.

mix-preg [register] Function
mix-sreg register value Function
Аргумент register этих функций может быть либо строкой, либо символом, представляющим регистр. Например, следующие вызовы эквивалентны:
(mix-preg 'I1)
(mix-preg "I1")

mix-pmem from [to] Function
Команда pmem принимает один аргумент - либо номер ячейки, либо диапазон в виде FROM-TO. Функция же принимает один аргумент, если запрашивается содержимое одной ячейки памяти, и два, если запрашивается диапазон. Например, следующие команды эквивалентны:
MIX > pmem 10-12
0010: + 00 00 00 00 00 (0000000000)
0011: + 00 00 00 00 00 (0000000000)
0012: + 00 00 00 00 00 (0000000000)
MIX > (mix-pmem 10 12)
0010: + 00 00 00 00 00 (0000000000)
0011: + 00 00 00 00 00 (0000000000)
0012: + 00 00 00 00 00 (0000000000)
MIX >

mix-sover #t|#f Function
Команда sover принимает в качестве аргумента либо строку T, либо строку F, чтобы установить, соответственно, триггер переполнения истинным или ложным. Соответствующая функция Scheme, mix-sover, принимает в качестве аргумента логическое значение Scheme: #t (истина) или #f.

С остальными функциями достаточно принимать в расчёт, что когда аргументами команды служат числа, соответствующая функция Scheme принимает в качестве аргументов числовые литералы Scheme. В то же время, если аргументом команды служит строка, аргументом связанной с ней функции Scheme будет строка Scheme. Например, следующие вызовы попарно эквивалентны:

MIX > load ../samples/hello
MIX > (mix-load "../samples/hello)

MIX > next 5
MIX > (mix-next 5)