Предлагаю в данной теме общими усилиями начать собирать недокументированные возможности процессоров: недокументированные инструкции, "побочные эффекты" выполнения инструкций и т.д., одним словом все, что осталось за границами официальных мануалов. Ну что же, надо как-то начать тему В системе команд процессоров 286/386 была недокументированная инструкция LOADALL. Она задумывалась как тестовая, ее назначение - загрузка всех регистров, включая системные. В общем, эту команду использовали для более быстрого перехода в защищенный режим. Ее опкод для 286-го: 0F05h, для 386-го: 0F07h В старших моделях процессоров она не поддерживается и вызывает исключение #UD. В системе команд процессоров Pentium/Pentium Pro/Pentium II были команды MOV reg32,TRn и MOV TRn,reg32. В текущих мануалах Intel их уже нет, можно лишь найти упоминание в разделе, где описывается карта опкодов, причем есть пометка, что в моделях, старше Pentium Pro/Pentium II эти инструкции могут вызвать исключение #UD. Если использовать инструкцию BSWAP r32 с префиксом 66h (в 32-х битном режиме получаем BSWAP r16), то эта инструкция обнуляет используемый 16-ти битный регистр. Если использовать инструкцию MOVSX/MOVZX r32,r16/m16 с префиксом 66h (в 32-х битном режиме получаем MOVSX/MOVZX r16,r16/m16), то эта инструкция выполняется как обычная MOV. Инструкция SMSW r16 описана в мануалах только с 16-ти битным операндом, но есть пометка, что в случае использования r32 результат старшей части неопределен. Практическое же использование показывает, что результат (т.е. содержимое регистра CR0) возвращается корректно.
Есть ещё вот такой прикол: push cs/es/gs/fs pop eax Старшая часть EAX - мусор, т.к. push cs/es/gs/fs на самом деле работает как: sub esp,4 mov word ptr [esp],cs/es/gs/fs - такой команды ессно нет, тут показана логика работы )
2 _BC_: Хех - точна есть, проглядел ) P.S. Где-то ещё проскакивала недокументированная инструкция, которая в зависимости от C флага в AL пишет 0 или FF (если я ничего не путаю) ...
Вот нашёл: # Команда: SALC # Назначение: Установить AL в соответствии с CF # Процессор: 8086 Устанавливает AL в 0FFh, если флаг CF = 1, и сбрасывает в 00h, если CF = 0. Это недокументированная команда с кодом 0D6h, присутствующая во всех процессорах Intel и совместимых с ними (начиная с 8086). В документации на Pentium Pro эта команда упоминается в общем списке команд, но ее действие не описывается. Действие SALC аналогично SBB AL,AL, но SALC не изменяет значений флагов
Цитирую, _edge писал на форуме http://lowlevel.h14.ru/cgi-bin/yabb/YaBB.cgi?board=programming;ac tion=display;num=1112251970;start=0#0