Согласование параметров
Согласование параметров.
В таблице ниже представлены основные соглашения по передаче параметров в процедуру. Заметим в этой связи, что во всех наших ассемблерных программах мы указывали тип передачи параметров как stdcall. Однако, по сути, это никак и нигде не использовалось - так передача и извлечение параметров делалась нами явно, без помощи транслятора. Когда мы имеем дело с языками высокого уровня, это необходимо учитывать и знать, как работают те или иные соглашения.
Таблица, представляющая соглашения о вызовах
Соглашение
Параметры
Очистка стека
Регистры
Pascal (конвенция языка Паскаль) Слева направо Процедура НетRegister (быстрый или регистровый вызов) Слева направо Процедура Задействованы три регистра (EAX,EDX,ECX), далее стек Cdecl (конвенция С) Справа налево Вызывающая программа Нет Stdcall (стандартный вызов) Справа налево Процедура Нет
Таблица довольно ясно объясняет соглашения о передаче параметров, и здесь более добавить нечего.
Остановлюсь еще на весьма важном моменте - типе возвращаемых функцией данных. С точки зрения ассемблера здесь все предельно просто: в регистре EAX возвращается значение, которое может быть либо числом, либо указателем на некую переменную или структуру. Если возвращаемое число типа WORD, то оно содержится в младшем слове регистра EAX. Однако имея дело с Си, Вам надо очень аккуратно обращаться с такой проблемой, как преобразование типов. Преобразование типов — это целая наука, на которой мы не можем останавливаться в данной книге.