Возврат результата на eax (язык сборки IA-32)

Я немного смущен тем, как вернуть значение из метода на языке ассемблера. Насколько мне известно, регистр eax используется для хранения результата, который должен быть возвращен.

в качестве примера, скажем, мой результат 4, и я использую:

mov eax, 4

теперь у меня есть 4 в eax, и я хочу вернуть этот метод. Есть все, что мне нужно сделать или инструкцию ret автоматически вернуть результат?

дело в том, что я не знаю, что такого особенного Регистрация eax С тех пор, когда я использую ret Я возвращаюсь к вызывающему абоненту, и вызывающий абонент может получить доступ к любому из регистров, в которых я сохранил результат, поэтому я не мог просто использовать ebx или ecx с сохраненным результатом вместо этого?

2 ответов


причина, по которой результат сохраняется в eax Это соглашение; вы можете решить сохранить его в любом регистре, который вам нравится. Однако вызывающий объект вашей функции, скорее всего, предположит, что содержимое возвращаемого значения хранится в eax. Это также означает, что при вызове ret.


то, что вы описываете-это используемое по крайней мере компиляторами Microsoft. Нет ничего особенного в eax само по себе. Если ваша функция языка ассемблера вызывается кодом C/C++, скомпилированным с одним из обычных соглашений о вызовах, ожидается, что результат будет передан в eax.

ret просто возвращает элемент управления в точку, где была вызвана ваша функция. Никакие регистры не затрагиваются (за исключением ESP и указатель инструкции курс.)