Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2011, 15:43   #91
program2001
Пользователь
 
Аватар для program2001
 
Регистрация: 20.02.2011
Сообщений: 68
По умолчанию

У Вована NASM ,а мне нужен FASM
Цитата:
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
Linus Torvalds

Последний раз редактировалось program2001; 16.12.2011 в 15:48.
program2001 вне форума Ответить с цитированием
Старый 17.12.2011, 15:29   #92
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

там синтаксис почти не разнится.
да и мой на FASMe.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.12.2011, 18:41   #93
Prosto_Serg
 
Регистрация: 26.07.2011
Сообщений: 3
По умолчанию

Товарищи программеры, прошу помощи в использовании в ядре на C++(или хотя бы на Си) подпрограмм, написанных на ассемблере FASM. Встроенный ассемблер честно говоря, не удобно использовать, разве что одну-две строки кода.
Проблема вот в чем. Получается объявляем мы функцию не stdcall
Исходник fasm (asm.ASM):
Цитата:
Код:
format MS COFF

include "D:\Games\fasmw16934\INCLUDE\win32a.inc"

public fasm_proc as "_fasm_proc"

section '.text' code readable executable

proc fasm_proc c
     hlt
endp
Итак, в Си получается, в C++ не робит и все... Что придется отказаться от C++ в пользу fasm?
Линкую таким образом:

Цитата:
Код:
@echo off

set asm_file_f = "asm.OBJ" - готовый ассемблерный модуль.

D:\Builder\MinGW\bin\gcc.exe -ffreestanding -c -O3 -o entry.o bin\entry.c - точка входа
D:\Builder\MinGW\bin\gcc.exe -masm=intel -ffreestanding -c -O3 -o kernel.o bin\kernel.c - ядро тестовой ОС

D:\Builder\MinGW\bin\ld.exe -nostdlib -Ttext 0x200000 -o main.exe entry.o kernel.o %asm_file_f% - собираем все вместе и получаем ошибку!
Если кто откликнется, буду благодарен. Программист профессиональный из меня не очень, но в языке разбираюсь.
PS: приведите примеры функций, прошу.
Приложил файлы с разбором ассемблерных функций для C на английском.
Вложения
Тип файла: txt c.txt (1.5 Кб, 117 просмотров)
Тип файла: txt asm.txt (5.5 Кб, 151 просмотров)

Последний раз редактировалось Prosto_Serg; 18.12.2011 в 10:24.
Prosto_Serg вне форума Ответить с цитированием
Старый 17.12.2011, 20:51   #94
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы в С++ через extern "C" {<функция>} пробовали?
да и к сожалению С++ там не подходит, по крайней мере у меня пока не вышло, всетаки С++ с его исключениями сложнее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2011, 11:04   #95
Prosto_Serg
 
Регистрация: 26.07.2011
Сообщений: 3
По умолчанию

Если что неправильно скажу, не ругать. =)
При простом объявлении функции в С:
Код:
void fasm_proc(void);
Все компилится, но при использовании функций возникают (одна из них) ошибки. Приведу 2 примера наиболее частых:
Код:
undefined reference to ... "<имя функции>"
Код:
expected primary-expression before 'void'
Продолжаю думать...
Так и назревает вопрос - я наверняка что-то неправильно делаю, не так ли?
Prosto_Serg вне форума Ответить с цитированием
Старый 18.12.2011, 11:36   #96
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я не совмещал FASM и GCC, проще было на GASM'е чтото написать.
+выкладывали бы полные ошибки.

PS: попробую конечно, отпишусь о результатах.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2011, 12:08   #97
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

все работает:
вот асм код:
Код:
format MS COFF

public fasm_proc as "_fasm_proc"

section '.text' code readable executable

fasm_proc:
    hlt
    ret
ну и kernel.c:
Код:
void fasm_proc();

void kernel()
{
    fasm_proc();
    while(1);
}
вот батник построения ядра:
Код:
gcc --freestanding -c -o x86\bin\entry.o x86\src\entry.c
fasm x86\src\asm.asm x86\bin\asm.o
gcc --freestanding -c -o x86\bin\kernel.o x86\src\kernel.c
ld -O -S -Ttext 0x200000 --enable-stdcall-fixup -Map x86\map.txt -o x86\bin\kernel.obj x86\bin\entry.o x86\bin\kernel.o x86\bin\asm.o
objcopy -R .bss -R .CRT -R .tls -R .endjunk -R .idata -R .edata -S x86\bin\kernel.obj x86\bin\kernel.bin  -O binary
echo Kernel build ended
проверил в Борще, процедура вызывается и работает.

+архив со всем добром
Вложения
Тип файла: rar PhOS.rar (7.0 Кб, 68 просмотров)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.12.2011, 16:20   #98
Prosto_Serg
 
Регистрация: 26.07.2011
Сообщений: 3
По умолчанию

Пепел Феникса, большое спасибо за разъяснения!
Сделал, как Вы сказали. Все успешно заработало.
Будем экспериментировать дальше.
Кстати, смог вызвать функцию puts из асм кода, что не может не радовать.
Prosto_Serg вне форума Ответить с цитированием
Старый 02.01.2012, 17:19   #99
program2001
Пользователь
 
Аватар для program2001
 
Регистрация: 20.02.2011
Сообщений: 68
Печаль

Простите что не в тему..)
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Да и мой на FASMe.
Там A20.asm нет
Цитата:
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
Linus Torvalds
program2001 вне форума Ответить с цитированием
Старый 02.01.2012, 17:31   #100
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

возможно, я не помню уже.
но он есть в архиве из поста 97
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объявление собственной глобальной процедуры Gorin Общие вопросы Delphi 11 06.11.2007 17:49
РАЗРАБОТКА DLL Leo Общие вопросы Delphi 2 26.10.2007 21:35
Разработка протокола OrdJONY Общие вопросы по программированию, компьютерный форум 2 04.10.2007 13:21