Потому что A это всего лишь метка, это просто адрес той области
Если бы я огласил A dd 0, то было бы не так. Но тут тоже вроде метка...
После dd можно указать значение которым ты инициализируешь, знак вопроса значит что такого значения ты не предоставил
...и в итоге туда вставляется 0 dd 0 == dd ?
Вот тут хз, не шарю
Нууу ... это понятно. Вопрос в том, почему в первом случае(без инициализации) потом нужно использовать [ ] , а во втором случае - не нужно. Сори, просто у меня опыт asm < 5 часов.)
A dd ? ; A dd 0 Прикрутить к адресу метку A, чтобы было легче обращаться к адресу. Т.е если A будет по виртуальному адресу 0x400000, тогда можно сделать: dd ? ; 0x400000 dd ? ; 0x400004 mov dword[0x400000], 12 mov dword[0x400004], 10 mov ecx, dword[0x400000] add ecx, dword[0x400004] Но т.к неудобно рассчитывать, по какому адресу разместятся данные - легче просто указать ему метку, и компилятор сам это вычислит: A dd ? mov dword[A], 12 ; Компилятор: mov dword[0x400000], 12 Квадратные скобки [] означают - взять значение по адресу\положить значение по адресу Поэтому когда ты определяешь метку - скобки не нужны
Квадратные скобки это способ сказать ассемблеру что ты хочешь что-то сделать с данными лежащими по адресу, метка это и есть адрес
Типа * в С? Указатель?
Типа того, но метка это просто константа означающая адрес, само значение указателя, если так можно выразиться
Ты можешь поместить этот адрес в регистр, если будешь использовать без квадратных скобок, ибо это просто число, но если заключишь в квадратные скобки можешь что-то сделать с данными на которые указывает эта константа
Обсуждают сегодня