никак не могу понять команду lea например есть(из Юрова): Код (Text): .data mas db 10 dup (0) .code mov di, 4 lea bx, mas[di] после компиляции mas - это смещение относительно начала сегмента и весь вышеприведённый код можно представить: Код (Text): mov bx, mas add bx, di Вообще я прочитал что lea - загрузка эффективного адреса объекта в памяти. Так а объект в памяти чем задаётся, не смещением ли? Вывод lea - это псевдокоманда, обрабатывающаяся на этапе кимпиляции. короче запутался совсем, помогите пожалуйста
Правильно Load Effective Address. Допустим есть локальная переменная i при исполнении программы для этих переменных (masm) отводится дырка в стеке (пролог функции). Код (Text): push ebp mov ebp, esp add esp, -04 ; Дыра размером DWORD естественно значение стека не знаем, если надо загрузить адрес переменной i Код (Text): lea eax, i Компилятор превратит в код Код (Text): lea eax,[ebp-04] Что означает загрузить в eax адрес переменной i, которая находится по адресу ebp-4 lea - не для компилятора - это команда процессора.
Sem Какой-такой линкер делает вышепреведенный код код нет я, про то что вроде бы можно представить, а не про конкретный линкер ChS загрузить в eax адрес переменной i, которая находится по адресу ebp-4 именно это мне и не понятно. "Адрес переменной - по адресу". Т.е. eax = ebp-4 Можно поподробней, что-то не доходит и ещё не дошло где в первой части примера i, как оно связано с ebp, esp Спасибо
> Т.е. eax = ebp-4 Именно так процессор и поступает. Проще взять отладчик н-р OllyDbg и по шагам трассировать програмку, там все увидишь Если совсем не дойдет: [url=http://www.kalashnikoff.ru/index.html ]http://www.kalashnikoff.ru/index.html [/url] По вопросу примера разберешся чуть позже, когда освоишь передачу параметров через стэк.