GNU ASM (синтаксис Intel) получает адрес метки без LDA
У меня странная ситуация, и я не уверен, что это ошибка ассемблера GNU или я делаю что-то не так. Я в конечном итоге переключусь на nasm, я думаю, но я использую некоторые макросы, написанные для ассемблера GNU.
Например, у меня есть метка с такой переменной, как эта:
msg1:
.asciz "hello world"
var1:
.long 0
Теперь я ожидал, что mov eax, var1 переместит указатель на var1 на eax, а mov eax, [var1] должен переместить содержимое этой переменной в eax, но оба дают мне один и тот же код, давая мне содержимое этой переменной. Я знаю, что могу использовать LDA, но в этом нет необходимости. Если я хочу нажать указатель на какую-то строку, я должен сделать что-то вроде
lea eax, msg1
push eax
Другая проблема. Я определяю константу с помощью.set, вот так:
.set const1 0x1000
mov eax, const1 дает мне содержимое памяти в 0x1000 вместо непосредственного значения. Что я могу сделать, чтобы это исправить?