документация директив GNU на ассемблере - PullRequest
5 голосов
/ 08 апреля 2009

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

int main(){}

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

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

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

1 Ответ

4 голосов
/ 13 марта 2018

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

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

  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. Однако вы должны помнить, что директивы отличаются от синтаксиса. Честно говоря, я тоже запутался в этом.

...