LINUX.ORG.RU

gnu assembler аттрибуты «символов»

 ,


0

1

Возможно я не умею читать/искать в документации. Столкнулся с такой проблемой. GNU Asssembler позволяет выставить атрибуты для символов (меток) такими директивами как: .type и .size и .val

Но я нигде не нашёл, как выставленные атрибуты использовать в самом ассемблерном коде.

например хочется написать что-то вроде:

.data
  arr:
    .4byte 1, 2 , 3, 4
  .size arr, .-arr

.text
  mov $arr.size, %eax
  
  # или
  mov $arr@size, %eax

Увы что-то не нашёл.



Последнее исправление: cetjs2 (всего исправлений: 1)

Но я нигде не нашёл, как выставленные атрибуты использовать в самом ассемблерном коде.

Похоже, никак. Эти директивы дают информацию компоновщику (линковщику).

opcode
()

ну и странный вы народ, программисты… все эти «имена переменных» или «символы» это просто метка в коде, то есть адрес, и метка не знает, что написано за адресом, хоть массив в мегабайт, хоть один байт.

размеры обьектов вычисляются разностью метки в хвосте и метки в начале. то бишь разностью адресов.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Вы не вполне правы. у меток есть атрибуты, в частности атрибуты size и type. Если метка это например функция, то это полезная информация для линковщика.

Кроме всего прочего, есть такой способ написания ассемблерного кода, как макросы. В целом с практической точки зрения макросу может быть полезно знать тип своего аргумента и размер, если метка всё-таки метит переменную.

В альтернативном ассемблере masm (Macro assembler), а не Microsoft Assembler как можно подумать, узнавание атрибутов у символов - просто норма жизни. Там есть конструкции type, size, length, sizeof, lengthof. И ещё есть opatr, который в виде битовой маски рассказывает с чем вы в макросе встретились в качестве аргумента.

Я не говорю, что в GNU assembler нужно переносить все эти особенности макросостроения, но почему «за бесплатно» не давать смотреть на уже и так выставленные атрибуты на метку непонятно.

alsalnikov
() автор топика