Принципиальная разница между CALL и INT.

Тема в разделе "WASM.BEGINNERS", создана пользователем Dmitry S, 15 ноя 2006.

  1. Dmitry S

    Dmitry S New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2006
    Сообщения:
    4
    В чем принципиальные преимущества INT против CALL? Разве нельзя использовать CALL вместо INT?
    Спасибо!
     
  2. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    в реальном режиме разницы практически никакой
    никто не мешает засунуть в стек флаги, прочитать
    вектор нужного прерывания и сделать дальний call по этому
    адресу
    в протмоде в общем случае такой фокус просто не прокатит

    З.Ы. кстати, с jmp'ом то же самое
     
  3. CT

    CT New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2006
    Сообщения:
    72
    INT автоматически сохраняет флаги при вызове. И адрес берет из таблицы прерываний по индексу, указанному в команде, что облегчает его перехват/перенаправление. Инструкции INT - короче, в частности int 03h вообще однобайтный.

    Использовать CALL вместо INT можно только в реальном режиме. Предварительно вычислив адрес обработчика и сохранив флаги перед вызовом. Если будешь пихать в стек еще и полный адрес возврата, то вообще сможешь обойтись JMP. Это все под ДОС. В защищенном режиме происходит смена привилегий и смена стека, поэтому для получения системных сервисов INT делается на шлюх вызова (CALL GATE).
     
  4. CT

    CT New Member

    Публикаций:
    0
    Регистрация:
    17 окт 2006
    Сообщения:
    72
    Medstrax хех, пока дошел мой пост в нем необходимость отпала )))