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)