Node:Команды загрузки, Next:, Previous:Структура инструкции, Up:Набор инструкций MIX



Команды загрузки

Для загрузки содержимого памяти в регистр могут использоваться следующие инструкции:

LDA
Поместить в rA содержимое ячейки памяти M. OPCODE = 8, MOD = fspec. rA <- V.
LDX
Поместить в rX содержимое ячейки памяти M. OPCODE = 15, MOD = fspec. rX <- V.
LDi
Поместить в rIi содержимое ячейки памяти M. OPCODE = 8 + i, MOD = fspec. rIi <- V.
LDAN
Поместить в rA содержимое ячейки памяти M с противоположным знаком. OPCODE = 16, MOD = fspec. rA <- -V.
LDXN
Поместить в rX содержимое ячейки памяти M с противоположным знаком. OPCODE = 23, MOD = fspec. rX <- -V.
LDiN
Поместить в rIi содержимое ячейки памяти M с противоположным знаком. OPCODE = 16 + i, MOD = fspec. 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
Безусловный переход. OPCODE = 39, MOD = 0.
JSJ
Безусловный переход без изменения rJ. OPCODE = 39, MOD = 1.

Эти инструкции для принятия решения о переходе проверяют триггер переполнения.

JOV
Выполнить переход при установленном OV (OV сбрасывается). OPCODE = 39, MOD = 2.
JNOV
Выполнить переход при сброшенном OV (OV остаётся сброшенным). OPCODE = 39, MOD = 3.

В следующих инструкциях переход обусловлен содержимым флага сравнения:

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
Выполнить переход, если содержимое rA, соответственно, отрицательно, равно нулю, положитнльно, неотрицательно, не равно нулю или неположительно. OPCODE = 40, MOD = 0, 1, 2, 3, 4, 5.
JXN
JXZ
JXP
JXNN
JXNZ
JXNP
Выполнить переход, если содержимое rX, соответственно, отрицательно, равно нулю, положительно, неотрицательно, не равно нулю или неположительно. OPCODE = 47, MOD = 0, 1, 2, 3, 4, 5.
JiN
JiZ
JiP
JiNN
JiNZ
JiNP
Выполнить переход, если содержимое rIi, соответственно, отрицательно, равно нулю, положительно, неотрицательно, не равно нулю или неположительно. OPCODE = 40 + i, MOD = 0, 1, 2, 3, 4, 5.

Node:Запуск программы, Next:, Previous:Компиляция, Up:Начало работы



Запуск программы

MIX - мифический компьютер, и бесполезно пытаться заказать его у вашего поставщика аппаратного обеспечения. Тем не менее, MDK предоставляет три программных эмулятора этого компьютера. Это

Все три эмулятора используют один и тот же набор команд пользователя, но, как отмечено выше, предлагают различные пользовательские интерфейсы. В этом разделе мы опишем некоторые из этих команд и покажем вам, как пользоваться ими в командной строке 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

и вы, скомпилировав её mixasm получили двоичный файл sample.mix, загрузка его в виртуальную машину будет выглядеть так:

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.