Стек и прерывания¶
Работа со стеком¶
Стек I80148 адресуется через регистры SP (Stack Pointer) и BP (Base Pointer). Указатель стека изменяется при выполнении стековых операций.
| OP | Увеличение SP | Уменьшение SP | Источник/приёмник | Направление |
|---|---|---|---|---|
| PUSH | 04h |
00h |
rSrc |
OUT |
| POP | 00h |
04h |
rDist |
IN |
| CALL | 04h |
00h |
IC + 5 |
OUT |
| CALLR | 04h |
00h |
IC + 2 |
OUT |
| CLABS | 04h |
00h |
IC + 5 |
OUT |
| RET | 00h |
00h |
IC |
IN |
Легенда:
- OP - стековая операция.
- Увеличение SP - на сколько байт увеличивается SP.
- Уменьшение SP - на сколько байт уменьшается SP.
- Источник/приёмник - что кладётся в стек или читается из него.
- Направление - OUT (запись в стек) или IN (чтение из стека).
Примечание: в спецификации для
RETуказано, чтоSPне изменяется (00h/00h). Это либо особенность реализации, либо ошибка в документе - в типичных архитектурахRETуменьшаетSPна размер адреса возврата. Стоит уточнить у автора спецификации.
Таблица дескрипторов прерываний (IDTR)¶
Регистр IDTR (адрес 24h) хранит базовый адрес таблицы дескрипторов прерываний. Адрес обработчика вычисляется по формуле:
То есть imm8 - это номер вектора прерывания, умноженный на 4 (размер одного дескриптора).
Обработка прерываний¶
| OP | Резервная копия IC | Адрес обработчика |
|---|---|---|
| INT | IC + 2 |
IDTR + (imm8 << 2) |
| IRQ | IC + 0 |
IDTR + (imm8 << 2) |
Легенда:
- OP - операция.
- Резервная копия IC - значение IC, которое сохраняется в стек (адрес возврата).
- Адрес обработчика - куда передаётся управление.