Nicron #15
10 января 1997

Программирование - курс изучения ассемблера от Wlodek Black, продолжение.

╔──────────────────────────────────────────────────────────────╗
│ ▒▒▒▒░  ▒▒▒▒░  ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░  ▒▒▒▒░▒▒▒▒▒▒░▒▒▒▒▒░│
│▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░    ▒▒▒▒▒▒░▒▒░     ▒▒░▒▒░▒▒░    ▒▒░ ▒▒│
│▒▒░ ▒▒░▒▒░    ▒▒░    ▒▒▒▒▒░ ▒▒░ ▒▒░▒▒▒▒▒▒░ ▒▒░▒▒░▒▒▒▒▒░ ▒▒░ ▒▒│
│▒▒▒▒▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░    ▒▒░ ▒▒░▒▒░ ▒▒░▒▒░ ▒▒░▒▒░    ▒▒▒▒▒░│
│▒▒░ ▒▒░ ▒▒▒▒░  ▒▒▒▒░ ▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░ ▒▒░▒▒▒▒▒▒░▒▒░z80│
╚──────────────────────────────────────────────────────────────╝
[ Продолжение ].

(C) WLODEK BLACK

		00Ch. СПЕЦИАЛЬНЫЕ КОМАНДЫ.

NOP (No Operation) - команда "нет операции".  Холостая  команда,
по которой никаких действий не производится.  Код  команды - 00.
Команда исполняется за 4 такта.Применяется при отладке программ
(особенно чужих);  для затяжки времени  в программах  реального
времени; для "забивания" ставших ненужными команд(яркий пример -
обессмерчивание игр).

HALT (останов) - остановка работы процессора.  Выполнив команду
HALT,  процессор  останавливается.  Но  от  шин  не отключается!
О факте исполнения команды останова  процессор сообщает  другим
устройствам выставлением специального сигнала "HALT" на 18-м вы-
воде своей микросхемы. Сигнал HALT может использоваться другими
устройствами как разрешающий или побуждающий к каким-либо  дейс-
твиям, а может и не использоваться  вообще.  На  MSX компьютере
и на "Спектруме" команду HALT можно использовать свободно.  Вый-
ти из состояния останова процессор может только  по  прерыванию
(подробнее о прерываниях - далее) или по сбросу (RESET).  Коман-
ду HALT обычно применяют для организации длительных циклов  пас-
сивного ожидания, синхронизируемых прерываниями (В MSX и "Спект-
руме" - с частотой кадровой развертки 50 Гц).

			00Dh. ПРЕРЫВАНИЯ.

   Русское название  "прерывание"  и его оригинал "interruption"
стопроцентно точно определяют явление, происходящее  в микропро-
цессорной системе после того, как на 16-ю лапку процессора  при-
ходит короткий импульс нулевого логического уровня,  называемый
сигналом запроса прерывания.
   Сигнал запроса прерывания обозначается "INT".
   Будем считать, что прерывания разрешены (можно запретить про-
цессору реагировать на сигнал INT с помощью специальной команды)
   Наличие сигнала INT процессор проверяет после завершения  вы-
полнения каждой команды. Обнаружив этот сигнал,процессор вместо
выборки из памяти и исполнения следующей команды  переходит  на
обслуживание прерывания.  Цикл входа  в обслуживание прерывания
состоит из следующих этапов:
1. Процессор подтверждает прием запроса на прерывание.   У  Z80
для этого специального контактного вывода нет, поэтому он форми-
рует сигнал подтверждения прерывания в виде логической  комбина-
ции сигналов IORQ=0, RD=1, WR=1, что  однозначно  расценивается
не как обращение к порту.  Дешифровав такую комбинацию сигналов,
устройство, запросившее прерывание, тут же снимает сигнал запро-
са  прерывания.  Формировать  сигнал  подтверждения  прерываний
(INTA) и плюс обеспечивать очередность обслуживания  нескольких
устройств, способных одновременно запросить  прерывание,  может
специальное устройство - контроллер прерываний.  Но мы не будем
вдаваться в подробности - в "Спектруме" и MSX родная микросхема
контроллера приоритета прерываний не используется.
2. Запрещается дальнейший прием запросов на прерывания,  впредь
до разрешения с помощью специальной команды в программе.
3. В стек засылается адрес команды, перед которой возникло  пре-
рывание.
4. Совершается переход  на подпрограмму обслуживания прерываний,
адрес входа в которую может быть задан тремя принципиально  раз-
личными способами (3 типа прерываний).

   Как можно видеть, прерывание действительно прерывает выполне-
ние программы пользователя, причем совершить это может  в любой
момент времени и в любом месте основной программы. Из этого  не-
посредственным образом вытекает необходимость обеспечить коррек-
тный возврат из прерываний, так, чтобы  основная  программа  не
ощущала прерываний. Точку (адрес) возврата процессор сам засыла-
ет в стек, а вот о сохранении регистров должен позаботиться про-
граммист. Программисту известно содержание процедуры  обслужива-
ния прерываний, он знает, какие регистры использует эта процеду-
ра. Регистры, содержимое которых изменяется при выполнении  обс-
луживания прерываний, должны сохраняться в стеке:
Точка входа в обслуживание прерываний:
-->   PUSH AF
      PUSH HL
      PUSH DE
      PUSH BC
       . . .
   < тело процедуры обслуживания прерываний >
       . . .
      POP BC
      POP DE
      POP HL
      POP AF
      EI ; обязательно нужно разрешить прерывания
	   перед возвратом
      RET ; возврат к основной программе

Системная процедура прерываний,  находящаяся в ПЗУ,  безусловно
корректно сохраняет и восстанавливает данные в регистрах.

		    Зачем нужны прерывания.

Существует целый ряд событий, происходящих достаточно редко, но
на которые микропроцессорная система должна реагировать немедле-
нно. Также существует необходимость регулярно совершать  некото-
рые действия, привязанные к реальному времени. Перечислять те и
другие можно до бесконечности,поэтому здесь мы остановимся лишь
на том, что конкретно делают прерывания в компьютере MSX.
   Итак, с частотой 50 Гц:
опрашивается клавиатура - коды введенных символов помещаются  в
буфер, фиксируются особые случаи (Ctrl+Stop и т.п.); происходит
отсчет времени таймером;продвигается очередь данных для фоновой
музыки (если очередь была задана);уменьшается счетчик интервала
для Бейсикового оператора "ON INTERVAL GOTO".
   В "Спектруме" по прерываниям опрашивается клавиатура и произ-
водится отсчет времени; буфера клавиатурного ввода в "Спектруме"
нет, поэтому фиксируется только код  одной,  последней  нажатой,
клавиши.
   О пользе применения механизма прерываний можно судить по сле-
дующему грубоватому жизненному примеру: предположим,  вы сидите
за компьютером и набираете текст программы,  а  на кухне  в это
время разогревается чайник. Если чайник не имеет свистка, вы вы-
нуждены периодически бегать на кухню и проверять, не закипел ли
он (опрос состояния чайника). При наличии свистка вы можете  не
беспокоиться - чайник сам подаст сигнал  (запрос  прерывания по
чайнику). А вот если при этом еще и зазвонит  телефон,  то  вам
придется самим решать, какое событие требует первоочередного ре-
агирования (приоритет прерываний).

[ Продолжение следует ].




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Раскрутка - прохождение текстовой адвентюры Knightmare.
Навiны - новая версия EWS, прошло SHIT 2001, вышли несколько номеров АБЗАЦА, новые газеты "Птичка KAP KAР" и "ZaRulem Печатное Слово", газеты KrNews#15 и Insanity #10, новая звуковая карта DMA USC, ZX-Spectrum медленно умирает, идея модульной игры про Dizzy.
Железо - схема псевдо-ПЗУ для PROFI.

В этот день...   19 ноября