Прерывание 17 - Исключение контроля выравнивания ( #AC - Alignment Check Exception )

Тип исключения - Fault (ошибка).
Описание
        Означает, что процессор обнаружил не выравненный операнд при включённой проверке выравнивания (например, слово, начинающееся по нечётному адресу). Это исключение относится только к сегментам данных и стека (не кода или системных сегментам). В таблице 1 приведены границы выравнивания типов данных:

Таблица 1. Границы выравнивания типов данных
Тип данных Адрес должен делиться на
Слово (word) 2
Двойное слово (dowbleword) 4
Вещественное число одинарной точности (32-бита) 4
Вещественное число двойной точности (64-бита) 8
Вещественное число расширенной точности (80-бит) 8
Quadword 8
Double quadword 16
Селектор сегмента 2
32-разрядный дальний указатель (Far Pointer) 2
48-разрядный дальний указатель (Far Pointer) 4
32-разрядный указатель 4
Содержимое регистров GDTR, IDTR, LDTR или TR 4
Область сохранения FSTENV/FLDENV 4 или 2, в зависимости от размера операнда
Область сохранения FSAVE/FRSTOR 4 или 2, в зависимости от размера операнда
Строка битов 2 или 4, в зависимости от атрибута размера операнда

        Для данных, выравниваемых на 16 байтную границу, генерируется исключение общей защиты.

        Условия контроля выравнивания:
  •  
  • Установлен флаг AM в CR0.
  •  
  • Установлен флаг AC в EFLAGS.
  •  
  • CPL = 3 (защищённый режим или режим виртуального-8086).

    Код ошибки: есть (всегда нуль).
    Указатель кода: сохранённые значения CS:EIP указывают на команду, вызвавшую исключение.
    Изменение состояния программы: нет, т.к. команда, вызвавшая исключение, не выполнилась.

    Вопросы? Замечания? Пишите: sasm@narod.ru

      Copyright © Александр Семенко.
    TopList

    Hosted by uCoz