Недокументированные инструкции

Тема в разделе "WASM.ASSEMBLER", создана пользователем Hunter, 13 авг 2005.

  1. Hunter

    Hunter New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2005
    Сообщения:
    47
    Предлагаю в данной теме общими усилиями начать собирать недокументированные возможности процессоров: недокументированные инструкции, "побочные эффекты" выполнения инструкций и т.д., одним словом все, что осталось за границами официальных мануалов.

    Ну что же, надо как-то начать тему:)



    В системе команд процессоров 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) возвращается корректно.
     
  2. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Есть ещё вот такой прикол:

    push cs/es/gs/fs

    pop eax



    Старшая часть EAX - мусор, т.к. push cs/es/gs/fs на самом деле работает как:

    sub esp,4

    mov word ptr [esp],cs/es/gs/fs - такой команды ессно нет, тут показана логика работы :))
     
  3. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759




    Вообще-то есть и работает. :)
     
  4. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    2 _BC_:

    Хех - точна есть, проглядел :))



    P.S. Где-то ещё проскакивала недокументированная инструкция, которая в зависимости от C флага в AL пишет 0 или FF (если я ничего не путаю) ...
     
  5. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Вот нашёл:



    # Команда:

    SALC

    # Назначение:

    Установить AL в соответствии с CF

    # Процессор:

    8086



    Устанавливает AL в 0FFh, если флаг CF = 1, и сбрасывает в 00h, если CF = 0. Это недокументированная команда с кодом 0D6h, присутствующая во всех процессорах Intel и совместимых с ними (начиная с 8086). В документации на Pentium Pro эта команда упоминается в общем списке команд, но ее действие не описывается. Действие SALC аналогично SBB AL,AL, но SALC не изменяет значений флагов
     
  6. _Supervisor_

    _Supervisor_ Денис

    Публикаций:
    0
    Регистрация:
    10 авг 2005
    Сообщения:
    4
    Адрес:
    Москва
    Цитирую, _edge писал на форуме http://lowlevel.h14.ru/cgi-bin/yabb/YaBB.cgi?board=programming;ac tion=display;num=1112251970;start=0#0



     
  7. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229