Моя сборка немного ржавая, но первая инструкция загружает что-то в EAX ... что-то, на что указывает содержимое регистра ECX ... но это смещение слова (4 байта) оттуда.Затем следующая инструкция загружает (перезаписывает) EAX тем, на что указывает EAX.
Эта запись (квадратные скобки, окружающие вторую или "исходные" операции этих инструкций MOV (загрузка), указывает, что косвенныйиспользуются режимы адресации.
Я предполагаю, что это просто способ реализовать своего рода двойное косвенное обращение. Адрес в регистре ECX может указывать на кадр стека или, возможно, на некоторый указатель атрибута C ++«this», на которое вы ссылались. Этот адрес, в свою очередь, содержит адрес возвращаемого значения. Таким образом, этот код перетаскивает адрес в регистр, а затем использует этот адрес в регистре для извлечения значения (попутно втот же регистр.) Этот подход хорош тем, что сохраняет все остальные регистры.
(кстати, большинство парадигм вызова функций x86 - системные вызовы, вызовы функций DOS и т. д. оставляют коды возврата функций илисистемные ошибки ... ошибочно в библиотеках stdlib C, в реестре EAX).