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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2011, 12:42   #1
BigBong
Пользователь
 
Регистрация: 20.09.2011
Сообщений: 10
По умолчанию Fasm, вызов С-функции.

Здравствуйте.
Как в fasm вызвать C-функцию? Конкретно: какой формат должен подключаться, какие особенности оформления сишного кода, какими командами ассемблера это делается и т.д. В общем вся информация, необходимая для подключения С-файла и использования С-функции. Желательно развернутый ответ или ссылка на хороший сайт(гуглин, но ничего путного не нашел). Компилятор gcc или mvc.
Спасибо.

Последний раз редактировалось BigBong; 01.10.2011 в 13:41.
BigBong вне форума Ответить с цитированием
Старый 01.10.2011, 15:49   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

С-соглашение (cdecl) отличается от stdcall только тем что стек очищает вызывающий.
Код:
push ...
push ...
push...
call Func
add esp, <количество переданных параметров>*4
если макросы, то всё также как и stdcall, только вызывать надо макросы cinvoke и сcall.
вот, собственно, и всё
rpy3uH вне форума Ответить с цитированием
Старый 02.10.2011, 06:58   #3
BigBong
Пользователь
 
Регистрация: 20.09.2011
Сообщений: 10
По умолчанию

Спасибо, буду разбираться. А не могли бы вы пример привести?
BigBong вне форума Ответить с цитированием
Старый 02.10.2011, 11:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
format PE console
entry start

include 'D:\fasmw16726\INCLUDE\win32a.inc'

section '.data' data readable writeable
message db 'Привет мир',0
member dw ?
r db 'Russian',0
section '.code' code readable executable

start:

 cinvoke setlocale,1,r

; CINVOKE макрос в составе FASM.
; Позволяет вызывать CDECL-функции.
  cinvoke printf,message
  cinvoke getch
; INVOKE аналогичный макрос для STDCALL-функций.
  invoke ExitProcess,0
section '.idata' import data readable
library kernel,'kernel32.dll',\
	msvcrt,'msvcrt.dll'

import kernel,\
       ExitProcess,'ExitProcess'

import msvcrt20,\
       setlocale,'setlocale',\
       printf,'printf',\
       getch,'_getch'
Увидел нямку?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2011, 14:14   #5
flance
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 184
По умолчанию

У вас опечатка. Вы берете функции из "msvcrt20", а подключили "msvcrt" (из msvcrt.dll). Просто для ТС говорю, чтобы он не ломал голову, что здесь не так. Хотя может он и сам догадается.
Программист-фрилансер, готовый рассмотреть предложения на постоянную удаленную работу... Ответственный, трудолюбивый
telegram: flancejob
flance вне форума Ответить с цитированием
Старый 02.10.2011, 15:06   #6
BigBong
Пользователь
 
Регистрация: 20.09.2011
Сообщений: 10
По умолчанию

Благодарю.
BigBong вне форума Ответить с цитированием
Старый 02.10.2011, 17:15   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
У вас опечатка.
А-а-а. Вижу. Собсно раньше не замечал, поскольку как правило из этого шаблона импортирую другие функи, а такую реализацию ниразу не запускал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.10.2011, 19:50   #8
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

Скажите, а как понять вот эти строчки кода..
типа указывает на секцию с датой и кодом, но что дальше написано не понятно..

Код:
section '.code' code readable executable


section '.data' data readable writeable
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 06.10.2011, 20:20   #9
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

code и data это вспомогательные метки для FASM чтобы он знал где начинается код и данные (BaseOfCode и BaseOfData), их можно не указывать, программа будет работать, но заголовок будет немного неверный
а потом атрибуты секций.
readable - можно не указывать. всегда есть по умолчанию, ибо если её нет, то толку от секции никакого
executable - выполнимая
writeable - записываемая
последние два обязательные, без них программа работать не будет (либо будет выдавать ошибки)
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии

Последний раз редактировалось haruhi; 06.10.2011 в 20:23.
haruhi вне форума Ответить с цитированием
Старый 06.10.2011, 23:39   #10
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

haruhi, скажите Вы написали что два атрибута (executable, writeable) обязательны.. тогда почему в секции кода нету writeable, а в секции данных нету executable ?
или обязательны так: executable для кода, writeable для данных ?
Спеши медленно.
asmars вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вызов функции -Anton- Microsoft Office Excel 2 09.06.2011 14:18
Вызов функции Anubys Помощь студентам 2 06.04.2011 16:40
Мини бэйсик:объявление функции, вызов функции , возврат. AL_LORD Помощь студентам 2 14.10.2010 17:48
Вызов функции new player БД в Delphi 5 07.10.2010 13:01
Вызов функции MarSeON PHP 2 01.08.2008 20:22