Грабли со строковыми командами

Тема в разделе "WASM.ASSEMBLER", создана пользователем Rockphorr, 26 май 2006.

  1. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    В masm существует 5 мнемоник префиксов повторения rep, repe repz repne repnz

    Сколько им соответствует опкодов ??

    Я экспериментально выяснил, что 2, другими словами

    rep заменяется или на repne или repe например опкод rep movsb соответствует repe movsb как показывают отладчики.

    Однако, masm ругается на конструкцию repe movs вне зависимости от суффикса размера.

    Печальный путающийся под ногами факт.
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    repe/ne =repz/nz просто записи разные.

    А что печального в том, что rep на что-то меняется ?
     
  3. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Плохо то, что repe не желает распознаваться.

    На счёт остального asd прав.

    repz распознаётся?
     
  4. HitmaN85

    HitmaN85 New Member

    Публикаций:
    0
    Регистрация:
    6 окт 2005
    Сообщения:
    36
    Если в команде высолняется сравнение cmps scas, то префиксы будут repe/repne. Если сравнения не требуется, то любой префикс повторения будет воспринят как rep.

    Остальное уже проблемы компиляторов и отлидчиков.
     
  5. Rockphorr

    Rockphorr Well-Known Member

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

    repe/ne =repz/nz - тривиально в любом учебнике написано



    грабли в другом, что в листингах полученных из отладчиков и дисасмов приходится вылавливать и заменять repe на rep перед movs
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    -1 в пользу масма :)
     
  7. r90

    r90 New Member

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


    а чего там вылавливать?
    Код (Text):
    1. $ sed -i 's/repe\(\s*\)movs\(.*\)/rep\1movs\2/' *asm


    вот intel в at&t или наоборот, довольно сложно конвертнуть, а такие мелочи...
     
  8. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    если УНИХ то да, но у нас MSDOS
     
  9. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    Rockphorr
    Вот я компелирую:
    Код (Text):
    1. .386
    2. option casemap:none
    3. .model flat,stdcall
    4. .code
    5. start:
    6.     rep movsb
    7. end start
    Генериться код:
    Код (Text):
    1. F3:A4          REP MOVS BYTE PTR ES:[EDI],BYTE PTR [ESI]
    И никакой не REPE
    Если компелировать
    Код (Text):
    1. .386
    2. option casemap:none
    3. .model flat,stdcall
    4. .code
    5. start:
    6.     repe movsb
    7. end start
    ,то masm ругнется естественно
    , т.к. префикс repe не поддерживается командой movsb. И никакие префиксы размера тут не причем.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Это у масма не поддерживается. Компилировал фасмом.
    Код (Text):
    1. .00011050: F3A4                         repe        movsb
    (hiew)
     
  11. Bill_Prisoner

    Bill_Prisoner New Member

    Публикаций:
    0
    Регистрация:
    4 май 2005
    Сообщения:
    238
    IceStudent
    Нет, это и не должно поддерживаться по логике машинных команд. Но с другой стороны это подчеркивает гибкость фасма и деревянность масма. В фасме можно просто написать:
    Код (Text):
    1. repe repne repe repe repne rep repe repne movsb
    или что-то вроде того и все замечательно скомпилиться в отличие от масма. Но любому ассемблерщику думаю больше понравиться подход фасма, ведь ассемблер призван быть максимально гибким.
     
  12. Rockphorr

    Rockphorr Well-Known Member

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

    то что генериться по исходнику это одно а то что в результате реверса это совсем другое
    проблема тут только в утомительности замен repe на rep для masm
     
  13. Dima_X

    Dima_X New Member

    Публикаций:
    0
    Регистрация:
    4 сен 2006
    Сообщения:
    6
    Rockphorr
    repe и rep это разные префиксы по логике. Зачем их заменять?