Обработчики прерываний в операционной системе - PullRequest
3 голосов
/ 26 февраля 2012

В чем причина написания хотя бы части обработчиков прерываний на языке ассемблера?

Ответы [ 2 ]

2 голосов
/ 27 июня 2012

Обработчик прерываний всегда начинает выполняться в среде очень низкого уровня. Языки программирования, но для сборки всегда нужны системные библиотеки и что-то, называемое «время выполнения».

Например, нелегко манипулировать регистром указателя стека вне языков ассемблера.

Кроме того, ABI также барьер. Двоичный интерфейс приложения слишком сложен в обработке прерываний, особенно для сохранения и восстановления контекста.

1 голос
/ 26 февраля 2012

Обычно у вас есть , чтобы написать хотя бы некоторую часть подпрограммы прерывания в сборке.Это связано с тем, что во многих случаях прерывание просто заставляет процессор перемещаться в определенную область памяти и начинать выполнение кода с этой точки.

Поскольку ваш процессор, вероятно, не подчиняется соглашению о вызовах любого более высокого уровня.языковой уровень, который вы используете, вам нужно написать некоторый ассемблерный код, чтобы исправить это, вызвать некоторый высокоуровневый код обработки прерываний, а затем еще немного ассемблерного кода, чтобы очистить прерывание и вернуть систему в нормальное выполнение.Например, на чипе Intel вам нужно заставить процессор выполнить команду iret для возврата из прерывания.Нет никакого способа сделать это стандартным способом на любом языке высокого уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...