команда lea

Тема в разделе "WASM.ASSEMBLER", создана пользователем letopisec, 9 авг 2004.

  1. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    никак не могу понять команду lea



    например есть(из Юрова):
    Код (Text):
    1.  
    2. .data
    3. mas  db   10 dup (0)
    4.  
    5. .code
    6. mov  di, 4
    7. lea  bx, mas[di]
    8.  




    после компиляции mas - это смещение относительно начала сегмента и весь вышеприведённый код можно представить:


    Код (Text):
    1.  
    2. mov  bx, mas
    3. add  bx, di
    4.  




    Вообще я прочитал что lea - загрузка эффективного адреса

    объекта в памяти. Так а объект в памяти чем задаётся,

    не смещением ли? Вывод lea - это псевдокоманда, обрабатывающаяся на этапе кимпиляции.



    короче запутался совсем, помогите пожалуйста
     
  2. Sem

    Sem New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2003
    Сообщения:
    6
    Адрес:
    Russia
    Нет, lea - не псевдокоманда, её код - 8Dh. Какой-такой линкер делает вышепреведенный код?
     
  3. ChS

    ChS New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2003
    Сообщения:
    20
    Правильно Load Effective Address. Допустим есть локальная переменная i при исполнении программы для этих переменных (masm) отводится дырка в стеке (пролог функции).
    Код (Text):
    1.  
    2. push ebp
    3. mov ebp, esp
    4. add esp, -04 ; Дыра размером DWORD
    5.  


    естественно значение стека не знаем, если надо загрузить адрес переменной i
    Код (Text):
    1.  
    2. lea eax, i
    3.  


    Компилятор превратит в код
    Код (Text):
    1.  
    2. lea    eax,[ebp-04]
    3.  


    Что означает загрузить в eax адрес переменной i, которая находится по адресу ebp-4

    lea - не для компилятора - это команда процессора.
     
  4. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    Sem



    Какой-такой линкер делает вышепреведенный код код



    нет я, про то что вроде бы можно представить,

    а не про конкретный линкер



    ChS



    загрузить в eax адрес переменной i, которая находится по адресу ebp-4

    именно это мне и не понятно.

    "Адрес переменной - по адресу".



    Т.е. eax = ebp-4



    Можно поподробней, что-то не доходит



    и ещё не дошло где в первой части примера i, как

    оно связано с ebp, esp



    Спасибо
     
  5. ChS

    ChS New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2003
    Сообщения:
    20
    > Т.е. eax = ebp-4

    Именно так процессор и поступает.

    Проще взять отладчик н-р OllyDbg и по шагам трассировать програмку, там все увидишь :)

    Если совсем не дойдет:

    [url=http://www.kalashnikoff.ru/index.html ]http://www.kalashnikoff.ru/index.html
    [/url]

    По вопросу примера разберешся чуть позже, когда освоишь передачу параметров через стэк.
     
  6. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    Спасибо
     
  7. int2e

    int2e New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2009
    Сообщения:
    169
    [del]
     
  8. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    сегодня точно какой-то день археолога :)
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.787
    K10
    [offtop]День сурка - продолжение ;)[/offtop]