вопрос по макросам в масм

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

  1. jeff

    jeff New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2010
    Сообщения:
    10
    привет всем. нашел на форуме сорец макроса для того,чтобы получить строку поксоренную с некоторым ключом:
    EncryptText macro text:req
    LOCAL chipherByte
    chipherByte = 0AAh
    FORC plainByte, <&text>
    chipherByte = chipherByte xor '&plainByte'
    db cipherByte
    endm
    db 0
    endm

    почитал руководство по проектированию макросов, но все равно не понятно,как мне определить переменную со значнием,которое выдаст этот макрос
    те чтоб было примерно так:
    Var1 EncryptText <PLAINSTRING>

    и еще в макросе самом непонятно: chipherByte = chipherByte xor '&plainByte' мы же здесь модифицируем chipherByte, а не то, что нам нужно,верно?
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    да символы ксорятся с переменной маской, зависящей от предшествующих символов
    т.е.
    Var1 EncryptText <PLAINSTRING>
    превратится в
    db 'P' xor 0AAh
    db 'L' xor ('P' xor 0AAh)
    db 'A' xor ('L' xor ('P' xor 0AAh))
    ... ; надеюсь идея понятна ;)
    db 0
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    то есть в
    Var1 db 'P' xor 0AAh
    db 'L' xor ('P' xor 0AAh)
    db 'A' xor ('L' xor ('P' xor 0AAh))
    ...
    db 0
    ЗЫ: Не хватает редактирования однако.
     
  4. jeff

    jeff New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2010
    Сообщения:
    10
    ага это ясно,спасибо, но если я пишу так
    .data
    szCaption EncryptText < PLAINSTRING >
    .code
    invoke ....
    , то мне масм выкидывает ошибку
    error A2008: syntax error : szCaption
     
  5. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Как вариант преврати имя в метку - функциональность не пострадает, а глюк должен исчезнуть
    szCaption: EncryptText < PLAINSTRING >
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    И ещё когда нужно отладить/изучить макрос удобно использовать ключ /Fl в коммандной строке в сочетании с директивами .NOLIST .LIST
    Код (Text):
    1. .NOLIST ; первым делом выключаем листинг чтобы не тормозило и *.lst не захламлялось
    2. ...
    3. .data
    4. .LIST
    5.      szCaption EncryptText < PLAINSTRING >
    6. .NOLIST
    7. .code
    8. invoke ....
    В файле *.lst получишь развёртку когда сгенерированного нужным макросом, после отладки макроса лишние .LIST .NOLIST уберёшь, чтобы листинг не захламляли и кодогенерацию не тормозили.
     
  7. jeff

    jeff New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2010
    Сообщения:
    10
    да,так все ок. большое спасибо еще раз.