Взаимодействие с человеком-оператором
Интерпретатор может выполняться в автоматическом или пошаговом режиме. В автоматическом режиме Интерпретатор моделирует выполнение команд программы без остановок до команды типа HALT или до точки останова. В точке останова оператор может вводить команды, управляющие действиями Интерпретатора и выбрать режим продолжения выполнения. В пошаговом режиме Интерпретатор после выполнения каждой команды программы останавливается и предоставляет оператору возможность вводить команды управления. Командами управления работой Интерпретатора могут быть:
- команды на отображение/изменение состояния/содержимого компонентов модели;
- команды задания точек останова;
- команды моделирования прерываний;
- команды установки режима выполнения;
- команда окончания работы.
Отображаться должны состояния и значения всех составляющих программной модели ВС: регистров (РОН, счетчика адреса, состояния), заданных участков памяти и их признаков, счетчика модельного времени, программы поступления прерываний и т.д. Отображаемые значения также должны быть доступны для изменений. Отметим, что для интерактивного отображения/изменения должны быть доступны также байты признаков памяти. Изменение содержимого регистра-счетчика адреса равносильно передачи управления в программе.
Точки останова могут задаваться в исходном для Интерпретатора файле и вводиться/изменяться в ходе интерактивной отладки. Могут быть предусмотрены остановы при:
- передаче управления по заданному адресу;
- чтении данных по заданному адресу;
- записи данных по заданному адресу.
Связь отладки с исходным текстом. Такая связь безусловно удобно и может быть осуществлена относительно несложно, если выход 1-го прохода Кросс-Ассемблера передается на вход Интерпретатора. Выход 1-го прохода связывает операторы исходного текста с адресами памяти. Таким образом, по значению счетчика адреса в каждый момент выполнения программы можно найти в выходе 1-го прохода соответствующий оператор исходного текста. Если на вход Интерпретатора подается также сформированная 1-ым проходом таблица символов, то есть возможность обращаться к переменным программы и к точкам передачи управления по символьным именам.
Можно ли обеспечить изменение прямо в ходе отладки исходного текста? Схема решения сводится к представленной на рисунке.
В схеме остается только 1-й проход Кросс-Ассемблера. Выход его - исходный текст с разметкой адресов и таблица символов является основным входом Интерпретатора. Необходимость во 2-ом проходе Кросс-Ассемблера отпадает. В начале выполнения Интерпретатор должен построить модель памяти, в которой он размещает, однако, только данные программы, но не команды. При работе Интерпретатор повторяет многие действия 2-го прохода Кросс-Ассемблера, читает не коды, а исходные тексты и распознает команду не по коду операции, а по мнемонике, и интерпретирует операнды не по кодам, а по исходным текстам. Изменения в исходном тексте оператора программы должны автоматически реплицироваться в соответствующем операторе (только в одном операторе!) результата 1-го прохода, и тогда при следующем выполнении этого оператора будет моделироваться уже выполнение новой команды. Однако, поскольку в результате 1-го прохода каждый оператор уже привязывается к определенному адресу, возможность изменения должна ограничиваться тем, что длина новой команды обязательно равна длине старой команды. Более сложные изменения потребуют повторного выполнения 1-го прохода Кросс-Ассемблера.
Итоговая схема алгоритма функционирования Интерпретатора сводится к следующей:
|
|
- при обнаружении ошибки в программе;
- при вводе оператором интерактивной команды завершения работы;
- при обработке команды останова (HALT) в программе.