Вопрос по прерываниям BIOS

Тема в разделе "WASM.BEGINNERS", создана пользователем inviZ, 11 сен 2008.

  1. inviZ

    inviZ Сергей

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    92
    Адрес:
    Хабаровск
    Собственно, такой вопрос. Например, есть какое-либо прерывание BIOS. Оно использует определенные регистры для входных параметров и определенные регистры для записи результата (если, конечно, он есть). Гарантируется ли то, что содержимое тех регистров, которые не используются для записи результата, после вызова прерывания останется неизменным (т.е. будет таким же, как до вызова прерывания) или это зависит от реализации ?
     
  2. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    Остаются неизменными все сегментные регистры, si, di, bp, dx, bx (если не используются для возврата результатов). На некоторых биосах как минимум int 10h портит AX. Был случай из практики, когда изменялся CX (очень неприятно было обнаружить это при вызове прерывания внутри loop), но не помню, было ли это биос или дос-прерывание.
    На большинстве биосов регистры не изменяются вообще, кроме используемых для возвращения результатов, но с AX я бы подстраховался.

    Если мне не изменяет память, то в стандарте на биос гарантировано сохранение всех неиспользуемых регистров. То есть если некоторый регистр не служит ни для передачи данных в, ни для возврата результатов из прерывания, то его значение сохраняется. Остальное трактуется, по видимому, более широко - если регистр используется для передачи данных, то он может быть изменен.
     
  3. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Обо всех прерываниях и регистрах рассказывает Ральф Браун в своём интлисте.