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

Discussion in 'WASM.ASSEMBLER' started by Rockphorr, May 26, 2006.

  1. Rockphorr

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    В masm существует 5 мнемоник префиксов повторения rep, repe repz repne repnz

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

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

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

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

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

    asd New Member

    Blog Posts:
    0
    Joined:
    Mar 12, 2005
    Messages:
    952
    Location:
    Russia
    repe/ne =repz/nz просто записи разные.

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

    NullSessi0n New Member

    Blog Posts:
    0
    Joined:
    Jan 20, 2006
    Messages:
    322
    Плохо то, что repe не желает распознаваться.

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

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

    HitmaN85 New Member

    Blog Posts:
    0
    Joined:
    Oct 6, 2005
    Messages:
    36
    Если в команде высолняется сравнение cmps scas, то префиксы будут repe/repne. Если сравнения не требуется, то любой префикс повторения будет воспринят как rep.

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

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    asd

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



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

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    -1 в пользу масма :)
     
  7. r90

    r90 New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2005
    Messages:
    898


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


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

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    если УНИХ то да, но у нас MSDOS
     
  9. Bill_Prisoner

    Bill_Prisoner New Member

    Blog Posts:
    0
    Joined:
    May 4, 2005
    Messages:
    238
    Rockphorr
    Вот я компелирую:
    Code (Text):
    1. .386
    2. option casemap:none
    3. .model flat,stdcall
    4. .code
    5. start:
    6.     rep movsb
    7. end start
    Генериться код:
    Code (Text):
    1. F3:A4          REP MOVS BYTE PTR ES:[EDI],BYTE PTR [ESI]
    И никакой не REPE
    Если компелировать
    Code (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

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    Это у масма не поддерживается. Компилировал фасмом.
    Code (Text):
    1. .00011050: F3A4                         repe        movsb
    (hiew)
     
  11. Bill_Prisoner

    Bill_Prisoner New Member

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

    Rockphorr Well-Known Member

    Blog Posts:
    0
    Joined:
    Jun 9, 2004
    Messages:
    2,625
    Location:
    Russia
    Bill_Prisoner

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

    Dima_X New Member

    Blog Posts:
    0
    Joined:
    Sep 4, 2006
    Messages:
    6
    Rockphorr
    repe и rep это разные префиксы по логике. Зачем их заменять?