OSDev
http://osdev.ru/

Подключение заголовочного файла Cи к программе на ассемблере
http://osdev.ru/viewtopic.php?f=6&t=827
Страница 1 из 1

Автор:  mikesmmm [ 26 ноя 2013, 05:52 ]
Заголовок сообщения:  Подключение заголовочного файла Cи к программе на ассемблере

Всем доброго времени суток!

Вопрос по практике программирования:
Как подключить заголовочный файл Cи к программе на ассемблере, чтобы пользоваться его определениями?

Например, имеется заголовочный файл example.h, где находится единственное определение #define OFFSET 0x02
Хотелось чтобы в следующем коде в регистре al оказалось значение 3.

.intel_syntax noprefix

.text
mov al, [var+OFFSET]

var:
.byte 0x01
.byte 0x02
.byte 0x03

Автор:  pavia [ 26 ноя 2013, 07:30 ]
Заголовок сообщения:  Re: Подключение заголовочного файла Cи к программе на ассемб

А никак. Заголовочные файлы в Си согласно формальной грамматике не отличаются от файлов с кодом("*.c").
Есть несколько решений:
1. Писать на встроенном ассемблере.
2. Ручками конвертировать заголовочные файлы в формат приемлемый в ассемблере.
3. Тоже самое но сделать некоторый скрипт, который с конвертирует заголовочные файлы.

А так обычно всё пишут на Си, на ассемблере очень мало кода. Поэтому подключать заголовочные файлы не требуется. Это я к тому что архитектуре лучше разделить более высокий код и низкий на ассемблере. Тогда и подключать ничего не надо будет.

#define OFFSET 0x02

можно заменить на
equ OFFSET 0x02

Автор:  Himik [ 26 ноя 2013, 11:27 ]
Заголовок сообщения:  Re: Подключение заголовочного файла Cи к программе на ассемб

Подключается точно так же, как и в С
#include "example.h"
Но это особенность GCC и GAS, для других компиляторов не сработает.
Смотри как в теме viewtopic.php?f=6&t=811

Автор:  mikesmmm [ 28 ноя 2013, 04:26 ]
Заголовок сообщения:  Re: Подключение заголовочного файла Cи к программе на ассемб

Himik писал(а):
Подключается точно так же, как и в С
#include "example.h"
Но это особенность GCC и GAS, для других компиляторов не сработает.
Смотри как в теме viewtopic.php?f=6&t=811

Не подключается. Это работает с ACK. А разбираю я как раз исходники учебной Minix3.
Хочу перевести ее на gcc в рамках дипломной.

pavia писал(а):
А никак. Заголовочные файлы в Си согласно формальной грамматике не отличаются от файлов с кодом("*.c").
Есть несколько решений:
1. Писать на встроенном ассемблере.
2. Ручками конвертировать заголовочные файлы в формат приемлемый в ассемблере.
3. Тоже самое но сделать некоторый скрипт, который с конвертирует заголовочные файлы.

А так обычно всё пишут на Си, на ассемблере очень мало кода. Поэтому подключать заголовочные файлы не требуется. Это я к тому что архитектуре лучше разделить более высокий код и низкий на ассемблере. Тогда и подключать ничего не надо будет.

#define OFFSET 0x02

можно заменить на
equ OFFSET 0x02

2 и 3 варианты приемлемы в условиях нехватки времени, но ощущение такое, что есть решение элегантнее. Буду копать дальше.

Спасибо за ответы!

Автор:  Himik [ 28 ноя 2013, 14:24 ]
Заголовок сообщения:  Re: Подключение заголовочного файла Cи к программе на ассемб

Файл ассемблерной программы должен иметь тип (расширение имени) .S , и компилироваться с помощью gcc.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/