Глюк masm?

Тема в разделе "WASM.ASSEMBLER", создана пользователем psu, 5 сен 2007.

  1. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Есть код
    Код (Text):
    1. DATA_SIZE       equ OFFSET data_END - OFFSET data_START
    2. ...
    3. .code
    4. data_START LABEL BYTE
    5. ...
    6. data_END LABEL BYTE
    7.  
    8. start:
    9. ..
    10. mov eax, DATA_SIZE
    11. invoke RtlMoveMemory, edi, esi, DATA_SIZE
    12. ..
    В дебагере вижу

    MOV EAX,23A
    PUSH 2EF
    PUSH ESI
    PUSH EDI
    CALL <JMP.&kernel32.RtlMoveMemory>
    Что за ерунда?
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    уберите invoke и будет одинаково
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    попробуй вместо equ = поставить или в скобочки (OFFSET data_END - OFFSET data_START) взять.
     
  4. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Asterix
    Я понимаю, что работать будет, если запушить все параметры вместо invoke. Почему не работает так, как я написал?
    asmfan
    Все равно не пашет
     
  5. Fscale

    Fscale New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    25
    или вообще попробуй обойти компилятор, напр. записав

    mov eax addr data_END,
    mov ebx addr data_start
    sub eax,ebx
    и в инвоке - исп. eax;
     
  6. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Fscale
    это ж сколько байт лишних.. :)
     
  7. Fscale

    Fscale New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    25
    а что есть ограничения в размере/cкорости (драйвер что-ли?)
     
  8. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Да некрасиво просто
     
  9. Fscale

    Fscale New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    25
    ну незнаю уш... Думается что интересней покрутить, оптимизировать именно код а не всё валить на масм ;)

    [я напр. обожаю что-нибуть переделать (коды) и штобы красивеe выглядело и работало бистрее :) ]
     
  10. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Ну если обожаешь, то должен понимать, что
    Код (Text):
    1. mov eax, 2
    лучше во всех отношениях, чем
    Код (Text):
    1. mov eax, 3
    2. sub eax, 1
    З.Ы. Давай лучше по теме отвечать ;)
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Fscale
    Compile-time вычисления рулят.

    psu
    Заключение в скобки помогло? Как вариант: поставь = вместо equ, это же числа.
     
  12. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    IceStudent
    скобки не помогли
    = вместо equ вообще выдает ошибку компиляции
     
  13. Fscale

    Fscale New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    25
    да чтото я от темы отвалил...
    А какое правильное значение: в инвоке или в eax ?
    и правильно ли считается DATA_SIZE компилятором ?
     
  14. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Считается в первом случае правильно ( регистр ), во втором - нет ( инвок )
     
  15. Fscale

    Fscale New Member

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    25
    ну тогда действительно... (моё мнение) - глюк при компиляции етого инвока.
    Уш тода используй eax в качестве параметра...
     
  16. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Так пиши DATA_SIZE ниже DATA_START, её же надо знать адреса. Это equ откладывает вычисление до использования (mov eax,DATA_SIZE), а = сразу вычисляет.

    А откуда сам глюк - непонятно. Какая версия компилятора?
     
  17. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    В Инете можно найти фразу:
    "предсказуемая обработка директив EQU". Видимо у masm с этим не все гладко.
     
  18. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    IceStudent
    Попробовал. Рез-т тот же ( и в скобкх, и без )
     
  19. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    psu
    У меня проглатывает (ml 7.10.6030).
     
  20. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Сколько данных между метками и какие? У меня и код, и данные вместе
    ml 6.14.8444 ( masm9 )

    ---

    попробовал 7.10.3077. То же самое