Вирусы и средства борьбы с ними


RASPM с присоединенным вспомогательным хранилищем - часть 3


нижеследующую таблицу)
  • после выполнения соответствующей команды все инструкции, так или иначе связанные с использованием вспомогательного хранилища, будут относиться к активному хранилищу
  • если инструкция, связанная с использованием вспомогательного хранилища, выполняется до команды выбора активного хранилища, она будет использовать первое хранилище
  • машина останавливается в тех же случаях, что и RASPM с ABS, а также в случае выполнения команды смены хранилища, если операнд указывает на несуществующее хранилище
  • ИнструкцияПараметрКод инструкцииЗначение
    SETDRIVEоперандFOУстанавливает активным вспомогательным хранилищем ленту, определяемую операндом
    Теорема 2.5. RASPM с SABS эквивалентна RASPM с ABS, в том смысле, что каждая из машин может быть проэмулирована другой

    Доказательство. Достаточно показать, что RASPM с SABS может быть проэмулирована RASPM с ABS, поскольку симметричное утверждение доказывается тривиально.

    Для эмуляции N вспомогательных хранилищ одним хранилищем воспользуемся следующим принципом: пронумеруем ленты вспомогательных хранилищ от 0 до N-1. Перенесем j-й символ i-й ленты в (Nj+i)-ю позицию новой ленты. Кроме этого изменим структуру памяти эмулирующей машины следующим образом:

    1. Нулевая ячейка по-прежнему аккумулятор
    2. 1-ю ячейку оставим для будущих целей
    3. 2-я ячейка содержит адрес ячейки с номером от 3 до N+2, которая хранит номер позиции головки чтения/записи на ленте вспомогательного хранилища
    4. i-я ячейка в диапазоне от 3 до N+2 содержит позицию головки чтения/записи (i-3)-й виртуальной ленты вспомогательного хранилища
    5. i-я ячейка при i>N+2 содержит то же значение, что и (i-N-2)-я ячейка эмулируемой машины, если при трансляции программа эмулируемой машины не подверглась изменениям (см. ниже), в противном случае сдвиг происходит на большее количество позиций

    Команды эмулируемой машины переносятся в память эмулирующей машины без изменений за исключением следующих случаев:

    • если исходная программа должна изменить текущее активное хранилище, вместо команды SETDRIVE a выполняется последовательность команд, меняющая номер виртуальной ленты во 2-м регистре:




      - Начало -  - Назад -  - Вперед -