|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
05.04.2018, 22:43 | #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. |
||
11.04.2018, 20:31 | #2 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Вместо sub esp, 12 нужно написать add esp,12 (стек растёт вниз).
Сделайте это, а там посмотрим
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
11.04.2018, 20:35 | #3 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Кстати, вы в курсе, что в соглашении 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. |
17.04.2018, 11:32 | #4 | |
Пользователь
Регистрация: 08.11.2017
Сообщений: 48
|
Цитата:
Написал что-то похожее на правду, но результат пока что не совсем правильный, какое то значение теряется. Что это может быть? Код:
Код:
Последний раз редактировалось Alexis_777; 17.04.2018 в 11:41. |
|
17.04.2018, 13:41 | #5 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
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. |
17.04.2018, 14:18 | #6 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
А вообще, всё проще можно сделать:
Код:
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
17.04.2018, 14:19 | #7 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Как вариант (если не понятно, почему и там, и там [esp+8]):
Код:
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
17.04.2018, 14:20 | #8 |
(aka Jin X) !RTFM!
Форумчанин
Регистрация: 14.12.2014
Сообщений: 295
|
Ну или если надо прямо-таки с фреймом (но смысл?):
Код:
Делаю лабы на Asm/Delphi/C++/Python/VBA(Excel): asmlabs.ru
|
17.04.2018, 14:47 | #9 | |
Пользователь
Регистрация: 08.11.2017
Сообщений: 48
|
Цитата:
Последний раз редактировалось Alexis_777; 17.04.2018 в 14:52. |
|
17.04.2018, 14:51 | #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 |