Как работают прерывания?
Программное - просто вызов подпрограммы, адрес которой записан в таблице векторов прерваний, только стек при этом формируется немного другим образом. 
Аппаратное зависит от реализации. На x86, ЕМНИП, используется отдельный контроллер. Поступивший на него от устройства сигнал защёлкивает соответствующий триггер, процессор на определённом этапе выполнения команды проверяет состояние всех триггеров в порядке приоритета. При обнаружении сигнала берётся нужный адрес из той же таблицы прерываний и вызывается подпрограмма по этому адресу. Подпрограмма обработки прерывания перед своим завершением должна сбросить триггер, чтобы следующий поступивший сигнал снова мог его взвести.
Что конкретно вас интересует? Вот процессор работает, выполняет какие-то команды, опа, прерывание, значит надо обработать, останавливает работу и отдаёт управление обработчику команд, обработчик что-то выполняет и возвращает управление.
Аппаратные от программных отличаются тем, что программные вы вызываете в коде программа, а аппаратные, например, от флешки/внешнего жёсткого диска/что-то ещё.