У меня есть код как это:
.bss
woof: .long 0
.text
bleh:
...some op codes here.
теперь я хотел бы переместить адрес лая в eax. Каков код синтаксиса Intel здесь для того, чтобы сделать это? То же идет с адресом движущегося bleh в, скажем, ebx.
Ваша справка очень ценится!
В разделе bss не может быть никаких реальных объектов. Некоторые ассемблеры могут по-прежнему позволять вам переключаться в раздел .bss, но все, что вы можете там сделать, это сказать что-то вроде: x:. знак равно + 4
.
В наши дни в большинстве ассемблеров, особенно в gnu для Intel, больше нет директивы .bss
, поэтому вы временно переключаетесь на bss и создаете символ bss за один раз, примерно так: .comm sym, размер, выравнивание
. Вот почему вы предположительно получаете сообщение об ошибке «. директива bss не распознана » или что-то в этом роде.
А затем вы можете получить адрес с помощью:
lea woof, %eax
или
movl $woof, %eax
Обновить: ага, синтаксис Intel, а не архитектура Intel. ОК:
.intel_syntax noprefix
lea esi,fun
lea esi,[fun]
mov eax,OFFSET FLAT:fun
.att_syntax
lea fun, %eax
mov $fun, %eax
.data
fun: .long 0x123
Все формы lea
должны генерировать один и тот же код.