Cтраница 2
Такая ситуация была проиллюстрирована выше на рис. 10.6. При выполнении второй команды вызова подпрограммы текущее содержимое счетчика команд помещается в стек. Текущее содержимое счетчика команд представляет собой в данном случае адрес одной из команд первой подпрограммы. Эти 2 байт размещаются в двух областях стека, следующих за теми областями, в которых хранится текущее содержимое счетчика команд главной программы. Теперь в счетчик команд загружается из второго и третьего байтов команды вызова подпрограммы начальный адрес второй подпрограммы, и начинается выполнение подпрограммы второго уровня вложения. [16]
Команда загрузки непосредственного операнда в указатель стека занимает в памяти 3 байт и выполняется за три цикла. Эта команда используется для установки исходного состояния стека, что обеспечивается загрузкой в указатель стека адреса начальной области стека. Напомним, что очередная доступная для использования область стека имеет меньший адрес по отношению к адресам других, занятых областей стека. [17]
![]() |
Команды условного перехода. [18] |
Применение стека для сохранения адреса возврата позволяет простыми средствами обеспечить правильную последовательность возврата при повторных и многократных обращениях из подпрограммы к другим подпрограммам. Единственное требование состоит в том, что перед выполнением команды возврата в подпрограмме должно быть восстановлено то значение УС, которое было при входе в подпрограмму. Такая необходимость возникает только в тех подпрограммах, которые используют область стека. [19]
Способ заражения среды обитания зависит от самой среды. В частности, тело файлового вируса может при заражении размещаться в конце, начале, середине или хвостовой ( свободной) части последнего кластера файла. Наиболее просто реализуется внедрение вируса в конец файла типа com. Наиболее сложна имплантация вируса в середину файла, поскольку для этого должна быть известна структура заражаемого файла, чтобы можно было внедриться, к примеру, в область стека. При внедрении загрузочного вируса ( ввиду малых размеров среды обитания) используется размещение головы тела вместо загрузочного сектора диска или сектора системного загрузчика, а хвост вируса и следующий за ним загрузочный сектор размещаются в других кластерах или секторах. [20]
Младшие 11 адресных разрядов будут адресовать байт данных, который затем выводится на шину данных. Неполное декодирование часто используется в небольших системах, где имеется только одно постоянное и одно оперативное запоминающие устройства и один порт ввода / вывода. Однако в случае памяти, схема которой изображена на рис. 4.23, и адресов от FFOO до FFFFie, отведенных под область стека, неполного декодирования ( рис. 4.24) не происходит, так как одновременно могут адресоваться и перепрограммируемое постоянное запоминающее устройство, и стек оперативного запоминающего устройства, что приведет к конкуренции за обладание шиной данных. Декодирование адреса должно быть более полным. Поправку в схему декодирования можно внести, соединив четыре старшие адресные линии с дешифратором 1-из - 16 ( устройства 74154 или 4515) и присоединив выходы дешифратора к соответствующим линиям выбора кристалла. Кроме того, вместо кристалла дешифратора может быть использована логическая схема на вентилях. [21]
На рис. 11.3 представлено распределение памяти области кучи при работе программ, написанных на Турбо Паскале. Куча первоначально всегда свободна и заполняется от нижних адресов в области кучи. Эта область характеризуется двумя предопределенными в языке указателями ( переменными типа Pointer): HeapOrg и HeapPtr. Переменная HeapOrg указывает на начало кучи. Если же программа не имеет оверлейных блоков, то куча начинается сразу за областью стека. Значение HeapOrg постоянно и, как правило, не меняется по ходу выполнения программы. [22]
Другим аппаратным средством УВК СМ-4 является диспетчер памяти, который служит для увеличения до 124К слов объема используемого ОЗУ. Шестнадцатиразрядный формат слова не позволяет адресовать память объемом свыше 32К слов. Для выполнения нескольких задач необходима управляющая программа, которая распределяет память между задачами и выполняет диспетчерские функции по передаче управления той или другой задачи. Поэтому в УВК СМ-4 предусмотрены два режима работы: пользовательский и системный. Режим, в котором в текущий момент находится процессор, определяется разрядами 14 и 15 ССП. При смене режима может возникнуть необходимость в обмене информацией между текущей программой и программой, которая выполнялась до смены режима. Такой обмен может осуществляться через область стековой памяти. В УВК СМ-4 имеются два аппаратных указателя стека. Один из них работает в системном режиме, а другой - в пользовательском. Во время выполнения программы выбирается один из указателей в зависимости от текущего режима. Таким образом, одновременно существуют две области стека: системная и одна из пользовательских. Для предотвращения пересечения этих областей может служить ограничитель стека. [23]