Архитектура микропроцессорной системы. Состав машинных команд и основы программирования микропроцессорной системы на ассемблере. Булатов В.Н. - 70 стр.

UptoLike

Составители: 

Stack:=<F> - загружает в стек PSW (содержимое регистра флагов);
Stack:=<CS> - загружает в стек содержимое сегментного регистра
CS; Stack:=<IP> - загружает в стек текущий адрес, то есть адрес
следующей команды прерванной программы.
3) Начиная с адреса CS:EA, где CS = 0000, EA = 4×n — считывает
2 слова, (4 байта), первое (младшее) из которых попадает в IP, а
второе (старшее) — в CS.
Таким образом, следующая команда будет выбираться, начиная с
адреса CS:IP, который установило программное прерывание INT n .
Следовательно, в задачу пользователя входит:
а) знать, в каком сегменте и с какого адреса расположена
подпрограмма, которая вызывается прерыванием INT n;
б) загрузить в ячейки памяти в нулевом сегменте, начиная с EA =
4×n, слово адреса и слово сегмента начала подпрограммы.
Пример 1 пусть подпрограмма должна вызываться прерыванием
INT 2F, и эта подпрограмма располагается в ОЗУ, начиная с адреса:
CS=1570, IP = 0100.
Ответ:
Вычисляем адрес вектора : EA = 2F×4=BC.
Располагаем адрес начала подпрограммы по адресу вектора:
IP CS
Адрес
00BC 00BD 00BE 00BF
Данные
00 01 70 15
Естественный вопрос: как вернуться из программного прерывания?
Команду безадресного перехода RET FAR здесь можно использовать, но
к ней необходимо добавлять команду POPF, чтоб восстановить и регистр
флагов F, и указатель стека. Такой возврат обеспечивается специальной
командой безадресного перехода, которая поглощает в себя эти две
команды:
а) Ассемблер: IRET;
б) КОП = CF.
Действие команды:
IP := <Stack> ;возврат адреса из стека;
CS := <Stack> ;возврат сегмента из стека;
F := <Stack> ;возврат флагов из стека.
Следовательно, если подпрограмма вызывается программным
прерыванием, а не командой CALL, то она должна заканчиваться
командой IRET.
Теперь снова вернемся к аппаратному прерыванию. Итак,
микропроцессор сигналом чтения -INTA требует у контроллера
прерываний КОП следующей команды. По всей видимости, это должна
быть команда программного прерывания INT n с кодом операции CD.
70
Stack:= - загружает в стек PSW (содержимое регистра флагов);
Stack:= - загружает в стек содержимое сегментного регистра
CS; Stack:= - загружает в стек текущий адрес, то есть адрес
                следующей команды прерванной программы.
     3) Начиная с адреса CS:EA, где CS = 0000, EA = 4×n — считывает
2 слова, (4 байта), первое (младшее) из которых попадает в IP, а
второе (старшее) — в CS.
           Таким образом, следующая команда будет выбираться, начиная с
     адреса CS:IP, который установило программное прерывание INT n .
     Следовательно, в задачу пользователя входит:
           а) знать, в каком сегменте и с какого адреса расположена
     подпрограмма, которая вызывается прерыванием INT n;
           б) загрузить в ячейки памяти в нулевом сегменте, начиная с EA =
     4×n, слово адреса и слово сегмента начала подпрограммы.
           Пример 1 – пусть подпрограмма должна вызываться прерыванием
     INT 2F, и эта подпрограмма располагается в ОЗУ, начиная с адреса:
     CS=1570, IP = 0100.
     Ответ:
     Вычисляем адрес вектора : EA = 2F×4=BC.
     Располагаем адрес начала подпрограммы по адресу вектора:

                                   IP            CS
                   Адрес
                            00BC        00BD 00BE 00BF
                  Данные     00          01   70    15

           Естественный вопрос: как вернуться из программного прерывания?
     Команду безадресного перехода RET FAR здесь можно использовать, но
     к ней необходимо добавлять команду POPF, чтоб восстановить и регистр
     флагов F, и указатель стека. Такой возврат обеспечивается специальной
     командой безадресного перехода, которая поглощает в себя эти две
     команды:
     а) Ассемблер: IRET;
     б) КОП = CF.
     Действие команды:
     IP :=  ;возврат адреса из стека;
     CS :=  ;возврат сегмента из стека;
     F :=          ;возврат флагов из стека.
           Следовательно, если подпрограмма вызывается программным
     прерыванием, а не командой CALL, то она должна заканчиваться
     командой IRET.
           Теперь снова вернемся к аппаратному прерыванию. Итак,
     микропроцессор сигналом чтения -INTA требует у контроллера
     прерываний КОП следующей команды. По всей видимости, это должна
     быть команда программного прерывания INT n с кодом операции CD.
70