Я читаю эту https://en.wikibooks.org/wiki/X86_Assembly/X86_Architecture#General-purpose_registers_.2864-bit_naming_conventions.29Прямая адресация памяти в Ассамблее и []
На Прямая адресацию памяти он говорит:
.data
my_var dw 0abcdh ; my_var = 0xabcd
.code
mov ax, [my_var] ; copy my_var content into ax (ax=0xabcd)
Интересно, что бы это скопировать топор без [], если а не его значение, равное 0xabcd?
И почему это содержание в первую очередь? Не следует ли обрабатывать 0xabcd в качестве адреса памяти и посмотреть, что хранится по адресу 0xabcd вместо этого?
'Если вы не используете ссылку на память, копируется значение символа my_var, то есть адрес этой переменной. '- означает ли это, что в сборке, в отличие от HLL, переменная является указателем по умолчанию? – Kotaa
также, 'mov bx, [myvar]' выбирает содержимое my_var, не так ли? но это противоречит этому ответу. http://stackoverflow.com/questions/42050480/storing-a-value-in-a-register-and-when-is-it-address-and-when-pure-value/42050785# 42050785 --- ** .... Не перемещает содержимое esp в eax. ** – Kotaa
@ Kotaa A (статическая) переменная является частью памяти. Символы относятся к адресам, поэтому символ переменной всегда ссылается на адрес этой переменной. Вы не можете изменить значение символа во время выполнения, так как символы будут разрешены до запуска программы. К вашей ссылке: обратите внимание, что 'esp' является регистром, а не символом. Регистры могут содержать значения, и эти значения могут измениться. Объяснение совершенно верно. – fuz