Как скомпилировать ассемблер в c - PullRequest
2 голосов
/ 26 сентября 2010

Я смотрю на код ассемблера, который компилируется вместе с c.Они используют простую #define сборку без заголовков в коде boot.s.Как это работает?

Ответы [ 4 ]

1 голос
/ 26 сентября 2010

Обычно .s файлы обрабатываются ассемблером.Не зная никаких других деталей, больше нечего сказать.Файл .s входит, файл .o выходит.

Многие ассемблеры предоставляют какую-то директиву include, позволяющую использовать заголовки, которые также будут на языке ассемблера.Ах, код, который вы связали, предназначен для использования ассемблером GNU as.Если вы используете Linux или Mac, сделайте man as, чтобы узнать об этом.Если вы используете Windows, установите MinGW или Cygwin.

1 голос
/ 26 сентября 2010

Компиляторы часто включают встроенную сборку, но я считаю, что это зависит от компилятора.

Я не помню точных деталей, но я думаю, что-то вроде:

void myFunc(void)
{
    int myNum; /* plain old C */

    __asm   /* Assembly */
    {
       mov ax,bx;
       xor cx,cx;
    }

    myNum = 5; /* more C */
}

Исследуйте ваш конкретный компилятор для деталей.

0 голосов
/ 18 февраля 2012

Если в вашем коде есть «main proc», вы используете архитектуру x86, и ваш файл заканчивается на .asm, который вы используете для компиляции tasm fileName.asm

В результате вы получите файл fileName.obj. После этого вам нужно связать его и для что вы можете использовать tlink filename.obj

Чтобы запустить, просто введите filename.exe в командной строке

Если вам нужно связать более одного файла, используйте tlink filename1.obj filename2.obj и так далее

при компиляции и компоновке необязательно указывать расширение файла, например .obj или .asm. Использование только имени файла должно быть хорошо.

0 голосов
/ 26 сентября 2010

Ссылка, которую вы публикуете в своем комментарии, является исходным файлом на ассемблере, который должен быть сначала запущен через c-препроцессор. Это просто удобство программирования, но многие компиляторы на ассемблере все равно поддерживают подобные конструкции, поэтому я не уверен, почему они пошли по пути c-препроцессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...