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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2016, 17:54   #1
testr
Новичок
Джуниор
 
Регистрация: 20.11.2016
Сообщений: 3
По умолчанию Прием четырех параметров от приложения на C.

В коде С я вызываю код ассемблера

int __attribute__((cdecl)) func(int _a, int _b, int _c, int _d);

int main()
{
int x=func(3,4,2,1);
printf("x = [%d]\n", res);
return 0;
}

Но в коде ассемблера получается принять только 2 параметра.
Добавление строки mov eax, [ebp+16] не работает

global func

section .text

func:

push ebp
mov ebp, esp
mov eax, [ebp+8]
push eax
mov eax, [ebp+12]
push eax
pop ebp
ret
testr вне форума Ответить с цитированием
Старый 20.11.2016, 18:46   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от testr Посмотреть сообщение
push eax
pop ebp
Это проще так:
Код:
mov ebp, eax
waleri вне форума Ответить с цитированием
Старый 20.11.2016, 18:59   #3
testr
Новичок
Джуниор
 
Регистрация: 20.11.2016
Сообщений: 3
По умолчанию

Частично разобрался. Вот что получилось:

global func

extern su

section .text

func:
push ebp
mov ebp, esp
mov eax, [ebp+8]
push eax
mov eax, [ebp+12]
push eax
mov eax, [ebp+16]
push eax
mov eax, [ebp+20]
push eax
call su
pop ebp

ret

и код C:

#include <stdio.h>

int __attribute__((cdecl)) func(int _a, int _b, int _c, int _d);
extern __attribute__((stdcall)) int su(int _a, int _b, int _c, int _d);

int main()
{
int x=func(3,4,2,6);
printf("x = [%d]\n", res);
return 0;
}


extern __attribute__((stdcall)) int su(int _a, int _b, int _c, int _d)
{
return _a+_b+_c+_d;
}

Теперь вопрос как вызвать ту же самую su если сделать ее _fastcall

Последний раз редактировалось testr; 20.11.2016 в 20:02.
testr вне форума Ответить с цитированием
Старый 20.11.2016, 22:55   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

https://msdn.microsoft.com/en-us/library/6xa169sk.aspx
waleri вне форума Ответить с цитированием
Старый 21.11.2016, 08:32   #5
testr
Новичок
Джуниор
 
Регистрация: 20.11.2016
Сообщений: 3
По умолчанию

Спасибо. Буду пробовать
testr вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
четырех мерный масссив Victor1963 Общие вопросы Delphi 5 12.03.2014 18:25
Передача параметров в приложения Alkcatras C++ Builder 2 09.08.2013 08:21
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 0 02.11.2012 21:58
Робот в четырех направлениях omelon Паскаль, Turbo Pascal, PascalABC.NET 0 29.05.2012 06:50
Запуск приложения и передача ему параметров из указанного файла Glegus Помощь студентам 1 11.01.2010 20:24