Вопрос по статье 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 Подскажите, в чем проблема?
мда.. сам шучю - сам смеюсь... Комбинаторика, блин.. Работает, если lea eax, [ variable - delta + ebp ] А почему, не скажете? Просто интересно
масм поганый компилятор =) Не может понять что если использовать ebp как регистр2 с множителем 1, а не регистр1, тогда всё кореектно.
вот еще одна проблема: код находится в двух файлах ( движок и модуль, реализующий функции виря ). Соответственно delta находится в файле движка. В модуле пишу EXTRN delta : NEAR при использовании variable - delta + ebp в модуле получаю ошибку invalid use of external symbol
delta должна быть не переменной, а константой. В первом посте - delta: смещение начала программы lea eax, [ variable - delta + ebp ] - в этом случае delta и variable - константы (смещение и ссылка на переменную) если у тебя 2 модуля, то лучше в каждом посчитай свои смещения - или ты знаешь как они будут в памяти расположены относительно друг друга?
ну с этим разобрался, а вот с модульностью - нет пришлось все в один модуль влепить и обойтись без EXTRN