Ассемблер Это просто! Учимся программировать
508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.

ГЛАВА 08


В я писал о том, что программа не работает на 486 процессорах (помните?). Пришло несколько ответов, которые я опубликую (возможно, вам это будет интересно):

В 486 процессорах есть ошибка в схемотехнике, приводящая к тому, что при записи в память по адресу большему текущего IP, но меньшему длины очереди предвыборки команд, содержимое очереди не перечитывается, а выполняется то, что уже было считано процессором. Поэтому процессор никак не реагирует на изменения в коде. Эта ошибка была исправлена только в Пентиуме.

Прислал Alex.

_______

Мне кажется, я могу дать объяснение данному "феномену" :) Дело в том, что у процессоров 80486 работа механизма кэширования отлична от механизма реализованного в процессорах Pentium. Попробую разъяснить.

Дело в том, что процессор, при выполнении команд, считывает их в кэш. И на выполнение команды поступают уже из кэша. Так вот. Секрет в том, что при изменении участка кода, который уже закэшировал процессор 486, не обновляет содержимое кэша!!! Т.е. на 486 процессорах возможен вариант затирания NOP-ами всей программы, и, тем не менее, она выполнится. В случае с Pentium-ами, ситуация выглядит более правильной. При изменении участка памяти, который уже закэширован, процессор сбрасывает содержимое кэша и заново считывает данные из памяти. Поэтому пример работает на Pentium и не работает на 486.

Остается один момент: почему на 486 под SoftIce программа-таки да выполняется? Тут дело в том, что когда отладчик прерывает выполнение программы, то меняются значения всех сегментных регистров. И процессор принудительно сбрасывает кэш, так как его содержимое ему уже не нужно. А так как кэш сбрасывается, то его новое содержимое уже будет отражать текущее содержимое памяти, и, следовательно, программа выполняется по командам, которые лежат в памяти. А там как раз лежат именно нами прописанные NOP-ы.

Прислал Slava V.




Начало  Назад  Вперед


508 Resource Limit Is Reached

Resource Limit Is Reached

The website is temporarily unable to service your request as it exceeded resource limit. Please try again later.