В masm существует 5 мнемоник префиксов повторения rep, repe repz repne repnz Сколько им соответствует опкодов ?? Я экспериментально выяснил, что 2, другими словами rep заменяется или на repne или repe например опкод rep movsb соответствует repe movsb как показывают отладчики. Однако, masm ругается на конструкцию repe movs вне зависимости от суффикса размера. Печальный путающийся под ногами факт.
Если в команде высолняется сравнение cmps scas, то префиксы будут repe/repne. Если сравнения не требуется, то любой префикс повторения будет воспринят как rep. Остальное уже проблемы компиляторов и отлидчиков.
asd repe/ne =repz/nz - тривиально в любом учебнике написано грабли в другом, что в листингах полученных из отладчиков и дисасмов приходится вылавливать и заменять repe на rep перед movs
а чего там вылавливать? Код (Text): $ sed -i 's/repe\(\s*\)movs\(.*\)/rep\1movs\2/' *asm вот intel в at&t или наоборот, довольно сложно конвертнуть, а такие мелочи...
Rockphorr Вот я компелирую: Код (Text): .386 option casemap:none .model flat,stdcall .code start: rep movsb end start Генериться код: Код (Text): F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR [ESI] И никакой не REPE Если компелировать Код (Text): .386 option casemap:none .model flat,stdcall .code start: repe movsb end start ,то masm ругнется естественно , т.к. префикс repe не поддерживается командой movsb. И никакие префиксы размера тут не причем.
IceStudent Нет, это и не должно поддерживаться по логике машинных команд. Но с другой стороны это подчеркивает гибкость фасма и деревянность масма. В фасме можно просто написать: Код (Text): repe repne repe repe repne rep repe repne movsb или что-то вроде того и все замечательно скомпилиться в отличие от масма. Но любому ассемблерщику думаю больше понравиться подход фасма, ведь ассемблер призван быть максимально гибким.
Bill_Prisoner то что генериться по исходнику это одно а то что в результате реверса это совсем другое проблема тут только в утомительности замен repe на rep для masm