OSDev

для всех
Текущее время: 17 дек 2017, 13:10

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 26 ноя 2013, 05:52 

Зарегистрирован: 05 сен 2013, 10:01
Сообщения: 8
Всем доброго времени суток!

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

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

.intel_syntax noprefix

.text
mov al, [var+OFFSET]

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 ноя 2013, 07:30 
Аватара пользователя

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

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

#define OFFSET 0x02

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 26 ноя 2013, 11:27 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 ноя 2013, 04:26 

Зарегистрирован: 05 сен 2013, 10:01
Сообщения: 8
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 варианты приемлемы в условиях нехватки времени, но ощущение такое, что есть решение элегантнее. Буду копать дальше.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 ноя 2013, 14:24 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
Файл ассемблерной программы должен иметь тип (расширение имени) .S , и компилироваться с помощью gcc.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB