Форум программистов, компьютерный форум, киберфорум
Assembler: Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/32: Рейтинг темы: голосов - 32, средняя оценка - 4.91
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
GAS/AT&T

Раздельная компиляция

22.10.2019, 18:15. Показов 7286. Ответов 32

Студворк — интернет-сервис помощи студентам
помогите пожалуйста понять как надо правильно сделать.

первый файл под названием f.s


Assembler
1
2
3
4
5
6
7
foo:
 
mov $3 , %r9
 
inc %r0
 
ret



второй файл f2.s
Assembler
1
2
3
4
5
6
7
8
9
10
11
.section .text
 
.global _start
_start:
 
call foo
 
 
 
mov $1, %rax
int $0x80


Bash
1
2
gcc f.s f2.s -c
ld f.o f2.o -o start
что исправить ,чтобы сработало ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.10.2019, 18:15
Ответы с готовыми решениями:

раздельная компиляция
Вот есть три файла: заголовочный файл с классом (.h), файл с реализацией методов класса (.cpp), и функцию main. Как, корректно, выполнить...

Раздельная компиляция
Пусть есть программа, которая состоит из 2 файлов. 1 файл: основной, там где main 2 файл: содержит некоторые функции Также есть...

Раздельная компиляция
Как в с# сделать раздельную компиляцию. Спасибо.

32
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
23.10.2019, 21:44  [ТС]
ну помогите уже уважаемые форумчане
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
23.10.2019, 21:54
Цитата Сообщение от pcmax Посмотреть сообщение
ну помогите уже уважаемые форумчане
Людям будет проще, если ты напишешь, что ты конкретно сделать хочешь. Из написанного кода не понятна ни цель, ни средства.
Цитата Сообщение от pcmax Посмотреть сообщение
mov $1, %rax
int $0x80
На x64 нужно использовать syscall для системных вызовов, а не прерывание 80. И номера системных вызовов там отличаются, если вдруг здесь exit подразумевался. Читай книги, уже который раз говорю.
3
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
24.10.2019, 17:45  [ТС]
ребята, syscall про него все верно. так пишут везде.

но давайте просто разберемся как мне вызвать фунцию foo написанную в отдельном файле на Gas из другой программы написанной также на GAs. любой пример пожалуйста
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
24.10.2019, 17:59
pcmax, хорошо. Базовый вопрос: как ты определяешь вызвалась функция или нет.
0
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
24.10.2019, 19:00  [ТС]
как я могу определять, если не знаю,как ее даже вызвать. вы пожалуйста не забывайте ,что я не программист.


просто помогите вызвать функцию правильно написанную на GAS в другом файле программы также на GAS
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
24.10.2019, 19:23
Цитата Сообщение от pcmax Посмотреть сообщение
как я могу определять, если не знаю,как ее даже вызвать
Хорошо. Тогда твой код - верный, и вызывает функцию foo. Что ты с этим будешь делать дальше?
Цитата Сообщение от pcmax Посмотреть сообщение
вы пожалуйста не забывайте ,что я не программист.
Зачем же ты код пишешь, если не программист?

Добавлено через 3 минуты
Цитата Сообщение от pcmax Посмотреть сообщение
как я могу определять, если не знаю,как ее даже вызвать.
По сути, для тебя вызов функции сейчас - это кот Шредингера. Ты ее вызвал. Но ты не знаешь об этом. Или ты ее не вызвал. Ты тоже об это не знаешь. От чего тогда вопрос возникает, если никакой разницы в итоге?
2
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
24.10.2019, 19:29  [ТС]
слушайте, это сейчас все кто пишут код-программисты. в мои дни, код могли писать обычные пользователи zx spectrum , например, и это было увлечение. это увлечение я сохранил и до этих дней. только вместо basic C++ и Assembler.


я не использую советы данные мне на этом форуме по написанию кода ни в работе, ни в учебе. там иные вопросы и боюсь что многие в них будут также некомпитентны как и я.


по Ассемблеру Вам есть чем мне помочь?
1
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
24.10.2019, 19:39
Цитата Сообщение от pcmax Посмотреть сообщение
по Ассемблеру Вам есть чем мне помочь?
Нет, я ничего не знаю, просто фигней страдаю, от скуки маюсь и все такое...
Я не вижу конкретной проблемы в это теме. Напиши функцию, которая что-то делает. Вызови ее. Проверь, что результат, который ты ожидаешь, не тот, который ты получаешь по факту. И вот тогда можно уже что-то обсуждать.

Добавлено через 3 минуты
С точки зрения банальной логики: если я никак не могу убедиться, что функция, которую я написал, вызывается и работает... То и не имеет значения, вызывается по факту функция, или нет. Она же ни на что не влияет и проверить ее никак не могу.
1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
24.10.2019, 19:43
Почему бы не предположить, что топикстартер предлагает минимальный тестовый пример, правильность работы которого проверяет в отладчике?

Как понимаю, его интересует раздельная компиляция файлов, составляющих единую программу.
2
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
24.10.2019, 20:27
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Почему бы не предположить, что топикстартер предлагает минимальный тестовый пример, правильность работы которого проверяет в отладчике?
Но он этого не делает. Иначе, бы он написал, что в отладчике call не срабатывает, или что код не компилируется. Но, как я вижу, по самому первому сообщению, проблем с раздельной компиляцией и вызовом никаких нет. Тогда не понимаю, в чем вопрос.
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Как понимаю, его интересует раздельная компиляция файлов, составляющих единую программу.
Точно. Он и привел ее пример в самом начале. Но не сказал, что его не устраивает в собственном примере раздельной компиляции.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4494 / 1669
Регистрация: 01.02.2015
Сообщений: 13,905
Записей в блоге: 12
24.10.2019, 20:45
Надеюсь, теперь pcmax понял, что:
- его код корректный, компилируется, выполняется
- в чём состоит проблема - никому не понятно, раз код правильный
Таким образом, от pcmax требуется уточнение, что в корректном коде его не устраивает.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
24.10.2019, 22:24
Код, может быть, и абсолютно верный, но у меня первый модуль f.s не ассемблируется:
Bash
1
gcc f.s f2.s -c
Code
1
2
f.s: Assembler messages:
f.s:5: Error: bad register name `%r0'
Поэтому один из объектных модулей не создается, и компоновщику пока не с чем связывать.

Bash
1
nm f.o f2.o
Code
1
2
3
4
5
nm: 'f.o': Нет такого файла
 
f2.o:
                 U foo
0000000000000000 T _start
2
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
25.10.2019, 18:31  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Как понимаю, его интересует раздельная компиляция файлов, составляющих единую программу.

спасибо что поняли.

Добавлено через 1 час 25 минут
Цитата Сообщение от politoto Посмотреть сообщение
Код, может быть, и абсолютно верный, но у меня первый модуль f.s не ассемблируется:

пердложите пожалуйста свой вариант.... я просто хочу вызвать любую функцию написанную в отдельном файле в основном коде. функция и основной код из которого она будет вызвана ,написанны на языке GAS.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
26.10.2019, 19:06
Так какая раздельная компляция, если код одного модуля даже не компилируется?

Добавлено через 1 минуту
Цитата Сообщение от pcmax Посмотреть сообщение
я просто хочу вызвать любую функцию написанную в отдельном файле
В самом начале нужно написать код функции в отдельном файле, который скомпилируется. Еще до "основного" кода.
0
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
26.10.2019, 20:29  [ТС]
Цитата Сообщение от Vourhey Посмотреть сообщение
В самом начале нужно написать код функции в отдельном файле, который скомпилируется. Еще до "основного" кода.

вместо того чтобы лепить мне дизлайки, лучше бы написали работающий пример. говорить расплывчато и я умею.


тут одни господа опираясь на маны, заявили в темах 2011 годов,что невозможно вызвать функцию написанную на Nasm в коде на Cи. А вот Politoto дал рабочий пример ,в котором я смог это осуществить. и я порой думаю откуда у них такая репутация высокая? не ужели это все благодаря чтению манов,которые говорят что это невозможно, а на деле возможно еще как?

также один господит вообще не понимая в Assembler долго тыкал меня носом в дерьмо, говоря что он дал уже мне рабочий пример. при этом его пример не мог работать. я это понял, когда Человек,который действительно шарит в Си дал мне правильный пример))))

вобщем долой расплывчатые слова! только рабочие примеры.
если таких нет, то просим идти лесом.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
27.10.2019, 09:18
Лучший ответ Сообщение было отмечено pcmax как решение

Решение

Цитата Сообщение от pcmax Посмотреть сообщение
лучше бы написали работающий пример. говорить расплывчато и я умею.
Вы и писать расплывчатые примеры умеете неплохо.

Цитата Сообщение от pcmax Посмотреть сообщение
А вот Politoto дал рабочий пример ,в котором я смог это осуществить. и я порой думаю откуда у них такая репутация высокая?
Вы же сами в той теме придумали задачу и сами в ней разобрались. 8)
А репутация высокая у тех, к чьим вопросам и ответам другие пользователи не ленятся писать отзывы, а потом кликать на +1 Спасибо

Проблема, которая у меня возникла с Вашим примером в том, что первый файл не являтся корректным модулем программы, написанном на входном языке gas с теми параметрами и настройками, с которыми я его запускаю.

Добавлено через 24 минуты
Предлагаю начать с абсолютно минимального примера программы из двух файлов, которые успешно ассемблируются раздельно и затем компонуются с помощью GNU binutils.

Затем Вы добавите минимальные изменения в эти два файла, после которых модули все ещё можно будет успешно ассемблировать и создавать соответствующие объектные модули.
Мы обсудим эти изменения, и, если повезёт, сможем понять, что хотите понять Вы.

Bash
1
rm a.out
(На всякий случай)

Bash
1
2
3
4
5
touch первый
touch первый второй
as первый -o один
as второй -o два
nm один два
Code
1
2
3
один:
 
два:
Bash
1
ld один два
Code
1
ld: warning: cannot find entry symbol _start; defaulting to 0000000000400040
По умолчанию nm показывает символы в a.out, который мы и создали только что
Bash
1
nm
Code
1
2
3
4
0000000000601000 A __bss_start
0000000000601000 A _edata
0000000000601000 A _end
                 U _start
Подробности:
Bash
1
readelf -a a.out
Кликните здесь для просмотра всего текста

Заголовок ELF:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Класс: ELF64
Данные: дополнение до 2, little endian
Версия: 1 (current)
OS/ABI: UNIX - System V
Версия ABI: 0
Тип: EXEC (Исполняемый файл)
Машина: Advanced Micro Devices X86-64
Версия: 0x1
Адрес точки входа: 0x400040
Начало заголовков программы: 0 (байт в файле)
Начало заголовков программы: 240 (байт в файле)
Флаги: 0x0
Размер этого заголовка: 64 (байт)
Размер заголовков программы: 0 (байт)
Число заголовков программы: 0
Размер заголовков раздела: 64 (байт)
Число заголовков раздела: 4
Индекс табл. строк загол. раздела: 1

Заголовки разделов:
[Нм] Имя Тип Адрес Смещение
Размер Разм.Ent Флаги Ссылк Инфо Выравн
[ 0] NULL 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0
[ 1] .shstrtab STRTAB 0000000000000000 000000d1
000000000000001b 0000000000000000 0 0 1
[ 2] .symtab SYMTAB 0000000000000000 00000040
0000000000000078 0000000000000018 3 1 8
[ 3] .strtab STRTAB 0000000000000000 000000b8
0000000000000019 0000000000000000 0 0 1
Обозначения флагов:
W (запись), A (назнач), X (исполняемый), M (слияние), S (строки), l (большой)
I (инфо), L (порядок ссылок), G (группа), T (TLS), E (исключён), x (неизв.)
O (треб. доп. обработка ОС) o (специфич. для ОС), p (специф. для процессора)

В этом файле нет групп разделов.

В этом файле нет заголовков программы.

В этом файле нет перемещений.

The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.

Таблица символов «.symtab» содержит 5 элементов:
Чис: Знач Разм Тип Связ Vis Индекс имени
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND _start
2: 0000000000601000 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
3: 0000000000601000 0 NOTYPE GLOBAL DEFAULT ABS _edata
4: 0000000000601000 0 NOTYPE GLOBAL DEFAULT ABS _end

В этом файле не найдена информация о версии.
3
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
27.10.2019, 10:13  [ТС]
в моем примере опечатка: там регистр r0 вместо r9.

напишите пожалуйста как бы Вы вызвали функцию на Gas написанную в отдельном файле из основного кода на Gas в другом файле?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
27.10.2019, 10:20
Assembler
1
call external_function
2
 Аватар для pcmax
443 / 74 / 7
Регистрация: 29.01.2018
Сообщений: 1,274
27.10.2019, 10:25  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
call external_function

пожалуйста не поленитесь набросать вес код и функции и основной. это всего несколько строк.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.10.2019, 10:25
Помогаю со студенческими работами здесь

Раздельная компиляция
В Гугле не забанен,нашел описание самого принципа,но конкретных примеров не нашел. Вопросы вот какие: 1) Если у меня есть класс,...

Раздельная компиляция
Здравствуйте, я перечитал на форуме информацию по этой теме, но пока что не сумел разобраться. У меня в проекте такие файлы: ...

Шаблоны и раздельная компиляция
Здравствуйте! Если просто я пишу класс, например: class Test { private: int *pm; ... public: bool inc();

Раздельная компиляция и шаблоны
Есть 3 файла с кодом: 1) foo.hpp template<typename T> class foo { public: T bar; foo(); ~foo(); };

Раздельная компиляция и шаблоны
привет. возьму вот такой выдуманный пример #ifndef CCLASS_H #define CCLASS_H #include <functional> class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru