реклама на сайте
подробности

 
 
> Передача аргументов из Си в Асм и обратно, Кто как делает?
=GM=
сообщение Jun 12 2007, 18:29
Сообщение #1


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Народ, у меня такой вопрос назрел.

Для тексасовских процов, кто как передаёт аргументы из головной программы, написанной на Си в ассемблерную подпрограмму и как получает обратно?

До недавнего времени передавал обычно адреса двух массивов, один для входных аргументов, второй для выходных. Ещё раньше передавал значения через стек. Теперь стал задумываться о передаче и получении аргументов по значению.

Стало интересно выяснить, а как вы делаете?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SM
сообщение Jun 14 2007, 14:17
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Бред какой-то. Ни errors, ни status не могут возвращаться при таком объявлении. Они только передаются в функцию. Возвращаться может что-то переданное в ф-цию по указателю и что то ОДНО (пусть хоть байт, хоть структура), что является типом, возвращаемым функцией. И третьего не дано.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 14 2007, 15:55
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(SM @ Jun 14 2007, 17:17) *
Ни errors, ни status не могут возвращаться при таком объявлении.

А они и не возвращаются smile.gif они остаются лежать в мусоре стека, из этого мусора ASM программа их и извлекает - трюкачество на ровном месте, короче. В принципе для более-менее чистого С существует один более-менее легальный вариант - использовать разнобой между 'C' и Паскалевским соглашением по очистке стека от аргументов и вызывать реальную _cdecl функцию по _pascal прототипу. Это если конечно компилятор поддерживает.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jun 14 2007, 18:22
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(SM @ Jun 14 2007, 14:17) *
Бред какой-то. Ни errors, ни status не могут возвращаться при таком объявлении. Они только передаются в функцию. Возвращаться может что-то переданное в ф-цию по указателю и что то ОДНО (пусть хоть байт, хоть структура), что является типом, возвращаемым функцией. И третьего не дано.

Ну, я бы так с ходу не стал называть это бредом. Аргументы в функцию я не передаю, мне не надо, но, сишная программа, действительно, передаёт в программу через AL и AH. И одновременно, кладёт эти же значения в стек! Вопрос зачем?

Дома у меня нет, завтра покажу дизассемблированный кусок, там прям видно, как сишная программа использует возвращенные значения, никаких фокусов, всё по-честному.

Цитата(zltigo @ Jun 14 2007, 15:55) *
А они и не возвращаются smile.gif они остаются лежать в мусоре стека, из этого мусора ASM программа их и извлекает - трюкачество на ровном месте, короче. В принципе для более-менее чистого С существует один более-менее легальный вариант - использовать разнобой между 'C' и Паскалевским соглашением по очистке стека от аргументов и вызывать реальную _cdecl функцию по _pascal прототипу. Это если конечно компилятор поддерживает.

Да? А зачем тогда, по-вашему, их в стек класть вообще, в мусор? Просветите, не дайте помереть дурой(:-). У меня асм ничего не извлекает из стека, он туда кладёт, а вот сишная программа - берёт из стека и присваивает значения сишным переменным! Там кстати, не мусор, а хип, который организуется самим компилером.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 04:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016