Оптимизация и дельта-смещение

Тема в разделе "WASM.BEGINNERS", создана пользователем psu, 2 ноя 2006.

  1. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    Вопрос по статье http://wasm.ru/article.php?article=1010001

    Пробую заменить
    call delta
    delta:
    pop ebp
    sub ebp, delta
    ...
    lea eax, [ ebp + variable ]

    на

    call delta
    delta:
    pop ebp
    ...
    lea eax, [ ebp + variable - delta ]

    Пишу в масме, компилятор ругается: cannot use 16-bit register with a 32-bit address
    А если написать :

    lea eax, [ ebp - delta + variable ]

    получаю ошибку: operand must be relocatable
    Подскажите, в чем проблема?
     
  2. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    мда.. сам шучю - сам смеюсь...
    Комбинаторика, блин..
    Работает, если
    lea eax, [ variable - delta + ebp ]
    А почему, не скажете? Просто интересно :)
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    масм поганый компилятор =)
    Не может понять что если использовать ebp как регистр2 с множителем 1, а не регистр1, тогда всё кореектно.
     
  4. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    вот еще одна проблема: код находится в двух файлах ( движок и модуль, реализующий функции виря ). Соответственно delta находится в файле движка. В модуле пишу
    EXTRN delta : NEAR

    при использовании variable - delta + ebp в модуле получаю ошибку invalid use of external symbol
     
  5. Th0r

    Th0r New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2006
    Сообщения:
    5
    delta должна быть не переменной, а константой. В первом посте - delta: смещение начала программы
    lea eax, [ variable - delta + ebp ] - в этом случае delta и variable - константы (смещение и ссылка на переменную)
    если у тебя 2 модуля, то лучше в каждом посчитай свои смещения - или ты знаешь как они будут в памяти расположены относительно друг друга?
     
  6. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    оверквотинг
     
  7. psu

    psu New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2006
    Сообщения:
    198
    ну с этим разобрался, а вот с модульностью - нет
    пришлось все в один модуль влепить и обойтись без EXTRN :dntknw: