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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.10.2007, 09:45   #1
MultIfleX
 
Регистрация: 15.10.2007
Сообщений: 5
По умолчанию Способы вызовов функций

Подскажите где найти инфу (или скажите так если знаете) как правильно передавать параметры и получать результаты в stdcall и pascal вызовах. И в догонку, если не сложно, поясните как в Delphi если первый/второй..... параметр - это строка, получить её длину? какое смещение указателя брать?
MultIfleX вне форума Ответить с цитированием
Старый 15.10.2007, 19:24   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

результаты всегда в eax
1. Директива pascal определяет "паскальный" вызов подпрограммы (он стоит по умолчанию во всех процедурах и функциях): а именно параметры пихаются в стек в прямом порядке, но стек нормализует ВЫЗЫВАЕМЫЙ.
2. Директива cdecl (C declaration) определяет "сишный" вызов подпрограммы: а именно параметры пихаются в стек в обратном порядке, но стек нормализует ВЫЗЫВАЮЩИЙ (путаница какая-то, неправда ли?).
3. Директива stdcall (Standart calling) определяет стандартный вызов всех продпрограмм всех библиотек WINDOWS: параметры пихаются в стек в обратном порядке, но стек нормализует ВЫЗЫВАЕМЫЙ. Это есть синтез двух видов вызовов.
получение длины ZS строки (оканчивается нулём) FASM
Код:
GetZSLength:
; get zero-string length
;IN
;       EDI ZS offset
;OUT
;       EAX ZS length

        push ecx
        push esi

        cld
        xor   al, al
        mov ecx, 0FFFFFFFFh
        mov esi, edi
        repne scasb
        sub edi, esi
        mov eax, edi
        dec eax

        pop esi
        pop ecx
        ret
rpy3uH вне форума Ответить с цитированием
Старый 16.10.2007, 06:07   #3
MultIfleX
 
Регистрация: 15.10.2007
Сообщений: 5
По умолчанию

Пасибки бальшое. Чёртичо. понамутили а ты сиди разбирайся ))
MultIfleX вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват системных вызовов Windows Irat Помощь студентам 1 04.02.2008 16:30
способы работы с Б.Д. Ванька БД в Delphi 1 20.11.2007 22:12
способы создания баз Ванька БД в Delphi 2 20.11.2007 12:42
Способы ведения файла-лога Norfolk Общие вопросы Delphi 2 14.06.2007 20:47