вот код: call asd asd: pop ebp lea eax,[ebp+asd1-asd] asd1: внимание вопрос: почему компилятор выдаёт ошибку в строке lea.. ? error a2155: cannot use 16-bit register with a 32-bit addres
может у меня с компилятором геморой какой? компилирую: ml /c /coff /Cp proba.asm компилятор masm32 7.0 по-моему
Вот так вроде должно работать (может быть ещё надо и offset перед asd1 и asd добавить) - Code (Text): lea eax,[ebp+[b]([/b]asd1-asd[b])[/b]] это баг masm.
не, offset туда лучше ни записывать- masm какой-то левый код вообще может начать генерить. или как S_T_A_S_ сказал или Code (Text): call asd asd: pop ebx delta = asd1-asd ;макро переменная lea eax, [ebx+delta] asd1: nop
нифига, в данном случае нам нужен адрес метки - значит OFFSET и ничего masm никогда левого не генерил
Спасибо всем большое. Благодаря короткому lea код существенно уменьшился. lea eax,[ebp+(asd1-asd)] - работает без offset call asd asd: pop ebx delta = asd1-asd ;макро переменная lea eax, [ebx+delta] asd1: nop тоже работает lea eax,[ebp+offset asd1 - offset asd] - без () у меня не работает . Со () не пробовал.
Asterix > в данном случае нам нужен адрес метки "Адрес метки" - это значение самой метки Так понимают и masm, и fasm, и даже С++.
- ну это ты сгоряча... переодически глюки всплывают, однажды даже было: (2+4)*2 по мнению MASM-а почему-то равно 7