Этот фрагмент выделен из программы ПЗУ — базовой системы ввода-вывода

(Код, взят из начала программы, которая обрабатывает запросы услуг видеодисплея.)

список адресов машинный шестнадцатеричный код эквивалент программного кода на языке ассемблера регистр
фрагмент выделен из программы ПЗУ — базовой системы ввода-вывода
F000: 3605 FB STI  
F000: 3606 FC CLD  
F000: 3607   PUSH ES
F000: 3608 IE PUSH DS
F000: 3609   PUSH DX
F000: 360А   PUSH CX
F000: 360В   PUSH BX
F000: 360С   PUSH SI
F000: 360D   PUSH DI
F000: 360E   PUSH BP
F000: 360F   PUSH AX
F000: 3610 8AC4 MOV AL,AH
F000: 3612 32E4 XOR AH,AH
F000: 3614 D1E0 SHL AX,1
F000: 3616 8BF0 MOV SI,AX
F000: 3616 3D2800 CMP AX,0028

1. Первая колонка (F000: 3605 и т.д.) — это список адресов, которым мы можем пренебречь.

2. Вторая колонка (FB, FC,06 и т.д.) — это действующий машинный шестнадцатеричный код.

3. Третья колонка - это эквивалент программного кода на языке ассемблера.

Код начинается с команды STI, которая приводит в действие прерывание. Когда происходит прерывание, дальнейшие прерывания приостанавливаются на тот случай, если программе обработки прерывания придется выполнять какую-либо очень важную операцию. В данном же случае ничего важного не происходит и поэтому включается механизм обработки других видов прерываний.

Следующая команда CLD устанавливает флаг направления в его нормальное положение "вперед". Это обеспечивает продвижение "вперед", а не "назад", данным программы. Для нас это не очень важно, но интересно отметить, что программист потратил время на то, чтобы специально удостовериться, что флаг установлен в направление "вперед" еще до начала работы.

За этим следует: серия из девяти команд PUSH. Эти команды записывают данные в стек компьютера. Вы видите, что каждая из команд PUSH указывает на регистр (ES, DS и т.д.), который сохраняется. Эти значения регистров заносятся в стек, так что программа обработки прерывания может убедиться, что они сохранены. По окончании действия программы обработки данных эти значения возвращаются из стека в регистры, таким образом, независимо от того, как в это время использовались регистры, они всегда возвращаются в свое первоначальное состояния.

За девятью операциями PUSH мы находим четыре команды обработки данных (MOV, XOR, SHL, MOV), которые делают одну простую вещь: они берут число и готовят его для сравнения. Хотя эти команды выглядят довольно сложными, все, что здесь происходит, на самом деле очень просто.

!!! Таким образом, при появлении запроса на прерывание

· система прерываний идентифицирует сигнал

· затем управление передается на соответствующую подпрограмму обработки.

Программы обработки прерывания могут быть расположены:

· во встроенном ПЗУ базовой системы ввода-вывода

· как часть операционной системы.

· прикладные программы обработки текстов, электронные таблицы и т.п. — могут также иметь свои подпрограммы обработки прерывания, если в этом есть необходимость.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: