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". В "Спектруме" по прерываниям опрашивается клавиатура и произ- водится отсчет времени; буфера клавиатурного ввода в "Спектруме" нет, поэтому фиксируется только код одной, последней нажатой, клавиши. О пользе применения механизма прерываний можно судить по сле- дующему грубоватому жизненному примеру: предположим, вы сидите за компьютером и набираете текст программы, а на кухне в это время разогревается чайник. Если чайник не имеет свистка, вы вы- нуждены периодически бегать на кухню и проверять, не закипел ли он (опрос состояния чайника). При наличии свистка вы можете не беспокоиться - чайник сам подаст сигнал (запрос прерывания по чайнику). А вот если при этом еще и зазвонит телефон, то вам придется самим решать, какое событие требует первоочередного ре- агирования (приоритет прерываний). [ Продолжение следует ].
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября