![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 | ||
Пользователь
Регистрация: 08.11.2017
Сообщений: 48
|
![]()
Мб кто сталкивался с такой проблемой.
Нужно передать мат. выражения с помощью процедур. Написал модуль на Си вроде бы правильно, скомпилировал gcc -c main.c. Написал модуль на ассемблере собрал командой nasm -f elf32 asm.asm -o asm.obj. Cкомпоновал модуль на Си и асм командой gcc -o start main.o asm.obj -lm. Считает нормально значения х и у: х=-2.52, у=9.65, но ху неправильно: ху=-2 только не пойму. Где-то ошибка в стеке видимо, пробовал исправить, но значения то больше, то меньше бывали и всегда разные выдает при запуске. Должна быть сумма х и у. Мб кто нибудь сможет найти где ошибка. Код main.c: Цитата:
Цитата:
Последний раз редактировалось Alexis_777; 06.04.2018 в 00:40. |
||
![]() |
![]() |
![]() |
#2 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 296
|
![]()
Вместо sub esp, 12 нужно написать add esp,12 (стек растёт вниз).
Сделайте это, а там посмотрим ![]()
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
![]() |
![]() |
![]() |
#3 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 296
|
![]()
Кстати, вы в курсе, что в соглашении fastcall (GNU) параметры передаются через ecx и edx, а дальше через стек?
http://agner.org/optimize/calling_conventions.pdf (глава 7) upd: Да, вижу, что знаете, зато не знаете, что в stdcall параметры передаются в обратном порядке, как в cdecl. Разница только в том, что у stdcall параметры из стека вынимает вызываемая функция, а не вызывающая.
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
Последний раз редактировалось 7in; 11.04.2018 в 20:55. |
![]() |
![]() |
![]() |
#4 | |
Пользователь
Регистрация: 08.11.2017
Сообщений: 48
|
![]() Цитата:
Написал что-то похожее на правду, но результат пока что не совсем правильный, какое то значение теряется. Что это может быть? Код:
Код:
Последний раз редактировалось Alexis_777; 17.04.2018 в 11:41. |
|
![]() |
![]() |
![]() |
#5 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 296
|
![]()
Alexis_777, вы читали, что я написал?
1. Параметры в stdcall заносятся в обратном порядке 2. У вас x – cdecl, значит параметры нужно убрать после вызова вручную (add esp,12), зачем это убрали? И зачем делаете fstp st1 ? Ну и ret 8 всё-таки, а не просто ret – в fastcall параметры удаляет вызываемая процедура.
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
Последний раз редактировалось 7in; 17.04.2018 в 14:22. |
![]() |
![]() |
![]() |
#6 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 296
|
![]()
А вообще, всё проще можно сделать:
Код:
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
![]() |
![]() |
![]() |
#7 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 296
|
![]()
Как вариант (если не понятно, почему и там, и там [esp+8]):
Код:
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
![]() |
![]() |
![]() |
#8 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 296
|
![]()
Ну или если надо прямо-таки с фреймом (но смысл?):
Код:
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 08.11.2017
Сообщений: 48
|
![]() Цитата:
Последний раз редактировалось Alexis_777; 17.04.2018 в 14:52. |
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 08.11.2017
Сообщений: 48
|
![]()
del
Последний раз редактировалось Alexis_777; 17.04.2018 в 14:51. Причина: del |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Использование процедур в С++ | Tagimasad | Общие вопросы C/C++ | 1 | 12.12.2012 20:01 |
ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР в C++ | baximaxik | Помощь студентам | 7 | 17.11.2012 14:51 |
Использование процедур | WTF??? | Паскаль, Turbo Pascal, PascalABC.NET | 0 | 21.12.2011 14:24 |
Использование процедур | cyt | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 09.10.2010 13:15 |
использование процедур | street-walker | Общие вопросы Delphi | 4 | 14.09.2010 21:38 |