Здравствуйте, начал изучать асм и столкнулся с непониманием того, как работает сегмент данных. Если я пишу на Си, то можно использовать: int i; /* значение */ int *i; /* указатель (только адрес) */ Если писать на асм (masm, в моём случаи), то: i dd 0 Чем сейчас является i? Значением или указателем? Т.е. что бы получить значение в i мне нужно использовать: mov eax, i или mov eax, или lea eax, mov eax, [eax] ? А если мне нужен указатель на адрес i в памяти? Спасибо, за терпение P.S. Проверял все варианты в отладчике - результат везде один :-(
В общем, как я понял, работая с отладчиком - это всё-таки указатель на память. При этом mov копирует значение, а lea - адрес. Пока так
В одних ассемблерах i - это переменная, в других - адрес переменной. См. описание синтаксиса по тому ассемблеру, который ты используешь. Чаще всего я использую fasm, так там i - это адрес, а - переменная, находящаяся по этому адресу. Такой подход мне больше нравится, т.к. он более естественен при программировании на ассемблере. Другой более естественен при программировании на высокоуровневых языках (слово offset в этом случае похоже на оператор получения адреса переменной).