Собираем коллекцию NOP'ов

Тема в разделе "WASM.ASSEMBLER", создана пользователем Atlantic, 22 июн 2005.

  1. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Atlantic

    Точно, Athlon forever, Intel в отстой ! ;)



    Только не понятно, что значит "пашет без проблем".

    Если декодер за один такт распознает не более 3-х префиксов, то сколько тактов будет декодироваться твоя цепочка "NOP9 (или даже NOP15)" ?
     
  2. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    большой nop от wasm :)



    db "WASM.ASSEMBLER.NOP.XFGZMDJIEI[[[_"



    p.s> хотя вот флаги портит, и не знаю, насколько безопасен опкод 2eh
     
  3. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    leo



    Значит, что выполняется как NOP и не вызывает при этом Exception. А насчет 3-х префиксов ты, скорее всего, прав, но в таком случае я в своем посте уже привел эффективные NOP'ы (NOP1-NOP9). То есть эти NOP'ы (вплоть до NOP12) будут выполняться за один такт на Athlon'е.
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Black_mirror



    Бажить будет если... Да, бажить не будет :) Что-то мне показалось что 4G в мантиссу не влезут. Торможу, FPU ведь на 80 бит работает :)
     
  5. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Atlantic

    Много префиксов к сожалению плохо - декодирование будет тормозить.



    <Prefix Decode Penalty>

    Intel Pentium Pro/Pentium II: 1-clock Delay

    AMD K6: Delays can occur due to prefix accumulation.
     
  6. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    leo

    alpet

    Сейчас тестил на своем Athlon XP:

    db 66h,66h,66h,66h,66h,66h,66h,66h,66h,66h,66h,66h,66h,66h,90h - 5 тактов на 15 байт

    db 66h,66h,66h,90h,66h,66h,66h,90h,66h,66h,66h,90h - 1 такт на 12 байт!!!!!!! Так что Athlon'ы действительно рулят. А вот насчет

    - тут alpet прав, на этих процах дела с префиксами похуже.
     
  7. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Atlantic

    Ты наверное цикл сделал большой. Команда декодировалась медленно, а по итерациям выполнялась быстро. Надо посмотреть через CodeAnalyst будет...



    Но вообще не ясно чем эта команда будет лучше jmp $ + 17h
     
  8. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Atlantic




    db 0x8D,0x80,0,0,0,0 ; lea eax,[eax+0x00000000]

    db 0x8D,0x89,0,0,0,0 ; lea ecx,[ecx+0x00000000]



    Пенёк сделает тоже и без префиксов (даже можно ещё инструкцию впихнуть в этот такт, главное чтобы alu не использовала)
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Atlantic

    > "1 такт на 12 байт!!!!!!!"



    Здорово !!!!!!! ;)

    Но думаю, парочка стандартных lea eax,[eax+00000000h] с разными регистрами датут те же 12 байт за 1 тик, и надеюсь не только на Athlon XP

    И говоря о тиках не стоит забывать о распараллеливании со следующими командами. Например на PIII lea вроде как только через один порт работает (по Фогу), поэтому 2 штуки вроде как должны выполняться за 2 тика, но ведь одновременно с ними могут выполняться и следующие инструкции если нет конфликта по портам и регистрам.



    ЗЫ: Ну вот пока сочинял, bogrus уже тоже самое сказал ;)
     
  10. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    leo У нас развивается телекинез какой-то :)
     
  11. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    leo У нас развивается телекинез какой-то :)



    сказало эхо ...
     
  12. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    bogrus точно ;)
     
  13. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    alpet

    Ну сделал я цикл из многих повторений, чтобы точно замерить время...

    bogrus

    leo

    А как вам это:

    db 81h,0C3h,0h,0h,0h,0h,81h,0C1h,0h,0h,0h,0h,66h,83h,0C0h,0

    16 байт, 1 такт (но флаги меняет)
     
  14. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Atlantic




    На пнях 2 alu, третий add не лезет в такт(у атлона 3?), попробуй prefetchnta [esp+0x0000000] ; целых 8 байт :)
     
  15. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    bogrus



    Я знаю :dntknw: Но вот на атлонах 3 :) А вообще, оптимизация NOP'ов - имхо, пустое занятие. Лучше оптимизить код, который эти самые NOP'ы выравнивают ;)
     
  16. RobinFood

    RobinFood New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2004
    Сообщения:
    45
    Адрес:
    Ukraine
    Странно, почему никто не вспомнил сдвиги на 0x20, 0x40, 0x60 и т.д.?
     
  17. _BC_

    _BC_ БЦ

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



    Невнимательно читаешь. ;)
     
  18. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Кстати, сдвиги на 0 тоже считаются, если кто не знает:



    shl eax,0

    или

    rcl eax,0



    Можно также попробовать



    rcl eax,1

    rcr eax,1



    будет портиться только флаг OF
     
  19. RobinFood

    RobinFood New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2004
    Сообщения:
    45
    Адрес:
    Ukraine
    Сорри, действительно невнимательно



    тогда

    jnc _L1

    stc

    _L1:

    и тому подобное.
     
  20. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Funbit



    Только сейчас заметил, что это действительно NOP. Вручную подбирал, или с помощью какой-то проги?