Показать сообщение отдельно
Старый 17.06.2011, 14:05   #22
saovu
Gold Member
 
Регистрация: 07.09.2005
Сообщений: 1,326
По умолчанию

Вообще-то решений тут я и не ждал (gav просил вопросики).
Но раз пошла такая пьянка.

Цитата:
Сообщение от PavelAR Посмотреть сообщение
Дальний jump по абсолютному адресу, который вычисляется на этапе компиляции.
16-битное смещение зависит от положения точки применения макроса в исходном
коде, 16-битный сегментный адрес берется из того, что передается как параметр,
который тоже подставляется на этапе компиляции. Подобный прием используется
везде, где требуется сбросить конвейер процессора, чтобы избежать конфликтов.
Да, разумеется.
Кстати, это вполне официальный способ рекомендуемый Интелом для очистки конвейера команд. Я так понимаю, что особую команду для этого заводить не стали (для экономии, ага; тем более она бы использовалась крайне редко) - поскольку уже есть побочное действие другой команды, дающее нужный результат.

На последнюю часть вопроса
Цитата:
Сообщение от saovu Посмотреть сообщение
для чего-почему он используется строго СРАЗУ ЖЕ после включения защищенного режима процессора
не ответили


Цитата:
Сообщение от PavelAR Посмотреть сообщение
4-байтная переменная, для хранения адреса (16-битный сегмент: 16-битное
смещение) обработчика прерывания, по совместительству выполняющая роль
исполняемого кода (jump на метку begin). При установке новых обработчиков
переменная разумеется модифицируется, и уже не годится для исполнения
Это верно.
На самом деле смысл этого кода в экономии 4 байт.
Переменная будет объявлена и затрет программный код, который уже точно не будет нужен к моменту использования переменной.
saovu вне форума   Ответить с цитированием
Реклама