Возврат результата на eax (язык сборки IA-32)
Я немного смущен тем, как вернуть значение из метода на языке ассемблера. Насколько мне известно, регистр eax используется для хранения результата, который должен быть возвращен.
в качестве примера, скажем, мой результат 4, и я использую:
mov eax, 4
теперь у меня есть 4 в eax, и я хочу вернуть этот метод. Есть все, что мне нужно сделать или инструкцию ret автоматически вернуть результат?
дело в том, что я не знаю, что такого особенного Регистрация eax С тех пор, когда я использую ret Я возвращаюсь к вызывающему абоненту, и вызывающий абонент может получить доступ к любому из регистров, в которых я сохранил результат, поэтому я не мог просто использовать ebx или ecx с сохраненным результатом вместо этого?
2 ответов
причина, по которой результат сохраняется в eax Это соглашение; вы можете решить сохранить его в любом регистре, который вам нравится. Однако вызывающий объект вашей функции, скорее всего, предположит, что содержимое возвращаемого значения хранится в eax. Это также означает, что при вызове ret.
ret просто возвращает элемент управления в точку, где была вызвана ваша функция. Никакие регистры не затрагиваются (за исключением ESP и указатель инструкции курс.)