Отправлено
колян безпарольный 23 февраля 2008 г. 01:11
В ответ на: Ответ: отправлено
leon 23 февраля 2008 г. 01:03
еще раз обьясняю. Глубинный смысл прерывания это наискорейшее начало выполнение операции при появлении того или иного события. Все что вы предлогаете это лишние манипуляции между появлением события и началом выполнения операции. Анализ стека, анализ флагов итд- всё извращение, причем достаточно емкое, особенно анализ стека- вытащить 2 байта сравнить эти 2 байта несколько раз и ветвиться.
Единственный быстрый способ- а именно для быстроты и придуманно прерывание- это безусловный переход по ЗАРАНЕЕ извесному адресу, просто тупо 1 команда. Сделать адрес заранее известным можно при входе в X функцию, простой операцией копирования в регистр адреса функции X' которая должна выполнится если прерывание возникнет в момент выполнения функции X. Что тут не понятного? Это будет оптимально как на си так и на асме с точки зрения оптимизации времени отклика на прерывание. Есть же бляха муха какието принципы програмирования, чтоза привычка извращяться и искать сложности как на свою задницу так и на зады тех кто после вас будет ваш код разбирать.