Он будет генерировать ошибку общей защиты (#GP) из-за проверки предела в сегментах. Процессор проверяет предел сегмента при доступе к данным с регистром сегмента DS, который является обычным делом. Предел сегмента по умолчанию для сегмента сегмента DS: [0,0xffffffff].
Процессор вызывает исключение, общая защита от любой момент предпринимается попытка получить доступ к следующим адресам в сегменте:
- A байт со смещением больше, чем эффективный предел
- Одним словом на смещение больше, чем (эффективного предельного срока - 1)
- двойного слова на смещение больше, чем (эффективного предельного срока - 3)
- квадраслово при смещении больше, чем (эффективного предельного срока - 7)
В соответствии со спецификацией Intel x86 «явно неравномерные» обращения (независимо от того, находятся ли они на краю вашего адресного пространства) также могут вызвать общие ошибки защиты для команд AVX, FME, VEX или SSE.
Интересно, что самые низкие и самые высокие адреса - это не единственные границы вашего адресного пространства, где это может произойти. Больше границ отображается в адресных пространствах x86_64, где в середине есть sparse/unaddressable space, который ваш процессор не может использовать (так как производители процессоров могут сократить количество бит, необходимых для многих внутренних процессоров - ведь никто не использует полное 64-разрядное адресное пространство).
Спасибо за ваш ответ! Прошу прощения за то, что вы изменили свой ответ. Я считаю, что причиной генерации ошибки #GP является предел сегмента. Можем ли мы добавить причину в ответ? – writalnaie
Нет проблем, я не понял, почему изменение было отклонено! Я обновил ответ с вашими изменениями. – Dan
@writalnaie: не забудьте принять, если это ответили на ваш вопрос :) – Dan