документация директив GNU ассемблера

Пытаюсь на данный момент изучить сборку mips. С этой целью я написал очень простую программу на c ...

int main(){}

... и скомпилировал его на машине mips с параметром -S для gcc для генерации кода сборки. Вот как выглядит начало основной функции:

    .ent   main
main:
    .frame $fp,8,$31
    .mask  0x40000000,-8
    .fmask 0x00000000,0

Затем я попытался выяснить, что все это означает, просмотрев документацию по газу, но я не нашел там ни одной из этих директив. Так что они означают? Где я могу найти дополнительную информацию?


person Kim Stebel    schedule 08.04.2009    source источник
comment
Возможно, ваша копия gcc настроена на использование другого ассемблера (не газа)? Что здесь написано: gcc -c -Wa, -version -xc - ‹/ dev / null?   -  person sigjuice    schedule 09.04.2009
comment
Моя копия gcc - это та, которая поставляется с netbsd и использует газ. Я выполнил вашу команду для подтверждения. Я все еще думаю, что это странно, что газ не документирует их и даже не ссылается на какое-то другое место, где они задокументированы.   -  person Kim Stebel    schedule 09.04.2009
comment
Голосование за закрытие как ресурсная рекомендация. Хотя было бы здорово спросить, что .ent, .frame и т. Д. Находятся в отдельных вопросах.   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 20.06.2015


Ответы (1)


Я знаю, что мой ответ немного запоздал. Лучше поздно, чем никогда.

Когда вы компилируете файл сборки, в коде могут отображаться два типа директив.

  1. Один из видов - это директивы, поддерживаемые вашим ассемблером, в вашей ситуации этоGNU as директивы.

  2. Другой тип зависит от вашего ассемблера, и, поскольку вы явно используете здесь сборку mips, .ent на самом деле является директивой mips assembly.

Вот руководство, в котором можно найти .ent .frame .fmask .mask директивы : все они директивы сборки mips. Или вы можете просто Google MIPS Assembly Language Programmer’s Guide. Перейдите к chapter 8, Pseudo Op-Codes, и вы получите все, что вам нужно.

Вы можете спросить, как GNU as может поддерживать mips directives? Введите Info as, перейдите к главе Machine Dependent Features, затем перейдите к подразделу MIPS-Dependent. Но все же вы не можете найти ни директиву ни .ent, ни .frame .fmask .mask. Это потому, что info as не является руководством по сборке mips и не может быть настолько исчерпывающим.

Между прочим, nasm, ассемблер, с которым знакомы многие программисты, имеет свои собственные директивы и синтаксис (стиль Intel), которые отличаются от директив GNU as (заимствованных из древнего стиля AT&T). Точно так же разные языки ассемблера могут иметь свои собственные уникальные директивы (но не синтаксис), поддерживаемые ассемблерами, которые тоже могут их собирать. Вот почему в файле сборки могут отображаться два источника директив. Теперь ассемблер GNU as может даже поддерживать синтаксис Intel. Кроме того, существуют инструменты для перевода синтаксиса между AT&T и Intel. Однако вы должны помнить, что директивы отличаются от синтаксиса. Честно говоря, меня это тоже смущает.

person Han XIAO    schedule 13.03.2018
comment
ценю ответ - person Edgar Aroutiounian; 24.03.2019