Резервирование в сегменте данных

Тема в разделе "WASM.BEGINNERS", создана пользователем AlannY, 8 дек 2008.

  1. AlannY

    AlannY New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2008
    Сообщения:
    41
    Здравствуйте, начал изучать асм и столкнулся с непониманием того, как работает сегмент данных.

    Если я пишу на Си, то можно использовать:
    int i; /* значение */
    int *i; /* указатель (только адрес) */

    Если писать на асм (masm, в моём случаи), то:
    i dd 0

    Чем сейчас является i? Значением или указателем?

    Т.е. что бы получить значение в i мне нужно использовать:

    mov eax, i

    или

    mov eax,

    или

    lea eax,
    mov eax, [eax]

    ?

    А если мне нужен указатель на адрес i в памяти?

    Спасибо, за терпение :)

    P.S. Проверял все варианты в отладчике - результат везде один :-(
     
  2. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    AlannY
    Чем хочешь. От тебя зависит чем ты его будешь считать. Это же ассемблер!
     
  3. AlannY

    AlannY New Member

    Публикаций:
    0
    Регистрация:
    24 окт 2008
    Сообщения:
    41
    В общем, как я понял, работая с отладчиком - это всё-таки указатель на память. При этом mov копирует значение, а lea - адрес. Пока так :)
     
  4. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    offset i - адрес i
    dword ptr - значение i
     
  5. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    В одних ассемблерах i - это переменная, в других - адрес переменной. См. описание синтаксиса по тому ассемблеру, который ты используешь. Чаще всего я использую fasm, так там i - это адрес, а - переменная, находящаяся по этому адресу. Такой подход мне больше нравится, т.к. он более естественен при программировании на ассемблере. Другой более естественен при программировании на высокоуровневых языках (слово offset в этом случае похоже на оператор получения адреса переменной).