инструкция insb

Тема в разделе "WASM.ASSEMBLER", создана пользователем s_d_f, 27 май 2010.

  1. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Всем здрасти.
    Раньше как-то не обращал на это внимания, но сегодня был сильно озадачен.
    masm одинаково компилирует две инструкции.

    Опкод один 6Ch.
    Может кто знает, что это за безобразие:)
    И как всё-таки правильнее.
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    esi - быть не может.
    есть только опкод insb es:[edi], dx
     
  3. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Да, только edi.
    В нескольких справочниках посмотрел, прочитал.
    Наверно в Microsoft думают совсем иначе:)
     
  4. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Ничего они не думают, опкод же правильный.
    Думать ты должен. :)
    А вообще можно просто писать:
    Код (Text):
    1. insb
     
  5. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Инструкция правильная, хоть и выглядит кривовато (к примеру, ins dword ptr es:[0], dx тоже верная инструкция). Если хорошо раскурить ман, видно следующее:
    С outs такая же картина, плюс ds может быть перекрыт префиксом, так что при определённой сноровке выстрелить себе в ногу можно даже этой внешне простой инструкцией.
     
  6. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    cppasm
    Если-бы не думал, то никогда и не заметил-бы этого.

    baldr
    Cпасибо за исчерпывающее объяснение.
    Сам я просто пользуюсь AMD`шным мануалом, и таких подвохов неожидал.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    s_d_f
    И где описано что приёмник адресуется регистром Esi ?
    Если у вас есть маны и вы их не изучаете, то это всёравно что у вас их нет. Вначале матан, затем только вопросы.
     
  8. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    s_d_f

    masm штука хитрая у меня без ошибок получалось указать ebx для инструкции movs или scas только это сути не меняет - все эти синтаксические конструкции превращаются в единственную семиотическую
     
  9. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Масму, имхо этот операнд нужен только шоб понять размерность адреса - ставить ему 67 или нет. Поэтому возможно, что пойдет любой РОН.
     
  10. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Не думал, что кто-то отнесётся с таким непониманием.

    В масме есть еще и другие загибы.
    Например инструкции типа: lock add ebx,varka
    Компилирует то что просто несуществует и это не ud2.
     
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    s_d_f
    OllyDbg почему-то расшифровывает инструкцию outsb как outs dx, byte ptr es:[edi] если бы не этот топик не обратил бы внимание, хотя должно быть ds:[esi], а вот вместо insb пишет правильно ins byte ptr es:[edi], dx надо бы Oleh Yuschuk сообщить
     
  12. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Там если постараться можно с десяток ошибок найти. И эта еще не самая серьёзная. Там нет поддержки 16-битной аддрессации.
    Код (Text):
    1. ;вот это олька будет воспринимать как данные
    2. xor bx,bx
    3. mov fs:[bx],esp
     
  13. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Там если постараться можно с десяток ошибок найти. И эта еще не самая серьёзная. Там нет поддержки 16-битной аддрессации.
    Код (Text):
    1. ;вот это олька будет воспринимать как данные
    2. xor bx,bx
    3. mov fs:[bx],esp
    Oleh Yuschuk - об этом не может не знать.