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