Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 138
от 16.05.2005, 20:10

Администратор:Калашников О.А.
В номере:Вопросов: 1, Ответов: 2


Вопрос № 20692: Здравствуйте Господа Эксперты. У меня возникла такая проблема. Хочу в программе на Delphi вызывать функции из dll, написанной мной же на ассемблере. Ни как не могу разобраться с типами вызовов(stdcall,pascal и т.д.) Подскажите пожалуйста как долж...

Вопрос № 20692
Здравствуйте Господа Эксперты.
У меня возникла такая проблема. Хочу в программе на Delphi вызывать функции из dll, написанной мной же на ассемблере. Ни как не могу разобраться с типами вызовов(stdcall,pascal и т.д.) Подскажите пожалуйста как должен быть оформлен код dll, чтобы реализовывался, например, stdcall.
Спасибо.
Отправлен: 11.05.2005, 20:01
Вопрос задал: the_white (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Ayl
Здравствуйте, the_white!
В общем, типы вызовов сообщают компилятору информацию о передаче параметров через стек и кто будет чистить этот самый стек после отработки процедуры.
Передача параметров с типом вызова pascal осуществляется слева направо (т.е. в том же порядке, как они и записаны в прототипе подпрограммы). В результате самый первый параметр подпрограммы будет самым последним в стеке. Кстати, именно поэтому довольно затруднительно написать подпрограмму с переменным числом параметров с этим типом вызова.
Прибирает за собой вызванная подпрограмма. Делается это обычно с помощью команды ret N, где N - число, на которое нужно увеличить регистр SP.
При использовании stdcall параметры помещаются в стек справа налево, т.е. первый параметр в описании подпрограммы будет последним в стеке (не считая точки возврата).
За удаление параметров из стека отвечает вызвавшая программа. Для этого выполняется команда add SP, N.
Соответственно, для оформления п/программы с типом вызова stdcall тебе нужно писать что-то типа этого (см. Приложение).
Замечание по возврату значений.
Все целые значения возвращаются через регистры:
1 байт: AL
2 байта: AX
4 байта: EAX
8 байт: EDX:EAX
Указатели: EAX
Символьные: AL
Логические: AL (0 или -1=255)
Вещественные: обычно через стек сопроцессора
Все остальные структуры - через указатель.

Приложение:

Ответ отправил: Ayl (статус: Профессор)
Отправлен: 12.05.2005, 12:39

Отвечает: Евгений Иванов
Здравствуйте, the_white!
proc Name stdcall
или
Model NearStack use32 NT Flat,Normal StdCall
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 12.05.2005, 17:16


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное