Естественно, в i386% eax содержит возвращаемое значение функций, да? Однако, по-видимому, это только конвенция. Можно ли изменить это соглашение и сделать возвращаемое значение равным% ebx или что-то еще? И если вы это сделаете, это также приведет к возврату значений% ebx в систему?Возвращаемое значение% eax Convention
ответ
Это соглашение только, да. Поскольку инструкция ret
не изменяет никаких регистров, кроме esp
, вы можете использовать любые другие для возврата значений. Однако как вызывающий, так и вызываемый должны согласовать, где должно быть возвращаемое значение, поэтому, если вы хотите взаимодействовать с другим кодом, используемые соглашения о вызовах должны быть совместимы. Между вашими собственными функциями вы можете использовать все, что хотите. Составители также изобретают специальные соглашения для частных функций по соображениям эффективности.
Возможно, это очевидно, но как вы используете разные регистры для возвращаемых значений в коде? Когда ret выполняется, он помещает возвращаемое значение в% eax независимо. Вам нужно изменить соглашения во время компиляции или написать свои собственные соглашения, и если да, то как? – WhiteMask
Как я уже сказал, 'ret' не изменяет регистры, кроме' esp'. Как таковой он ничего не помещает в 'eax'. Вызываемая функция помещает возвращаемое значение в 'eax' (или где угодно), а' ret' не затрагивает его и не заботится об этом. 'ret' - это чуть больше, чем прославленный' jmp'. Вызывающий должен смотреть в нужном месте. Да, это компиляция. – Jester
- 1. `testl` eax против eax?
- 2. Точка теста% EAX% EAX
- 3. x86_64 - cmpxchg. Возвращаемое значение
- 4. Какой смысл LEA EAX, [EAX]?
- 5. Как вернуть комплексное возвращаемое значение?
- 6. Возвращаемое значение двумя копиями
- 7. Visual Studio: получите значение EAX на этапе ожидания?
- 8. Возвращаемое значение из подпрограммы в сборке
- 9. Как можно вернуть возвращаемое значение eax, размер которого превышает 4 байта?
- 10. gdb, похоже, влияет на возвращаемое значение функции, которое хранится в $ eax?
- 11. Возвращает ли возвращаемое значение всегда в регистр eax после вызова метода?
- 12. изменить возвращаемое значение функции с переполнением буфера
- 13. Ruby On Rails Convention Naming Convention
- 14. Рекурсия - Python, возвращаемое значение вопрос
- 15. Почему содержание EAX отличается?
- 16. Рассмотрение ассемблерного кода mov 0x8 (% ebx),% eax mov (% eax),% eax cmp% eax, (% ebx)
- 17. C - каково возвращаемое значение точки с запятой?
- 18. Есть ли __asm {}; вернуть значение eax?
- 19. Что делает mov eax, dword ptr [eax]?
- 20. Как работает «mov (% ebx,% eax, 4),% eax»?
- 21. Rails convention
- 22. Compact Convention
- 23. Automapper Convention
- 24. close() x86_64 системный вызов странное возвращаемое значение
- 25. Возвращаемое значение или значение rvalue?
- 26. Что делает eax после mov eax, dword ptr [edi]
- 27. Возвращаемое значение по умолчанию Возвращаемое значение, когда тип перечисления неизвестен
- 28. Прочтите регистр eax
- 29. JavaFX Binding Setter Convention
- 30. "mov eax, dword ptr fs: loc_12 + 6" Какое значение присвоено eax?
Я мог бы добавить, что соглашения о вызовах обычно рассматриваются в двоичном интерфейсе приложения (ABI), если вы посмотрите на различные соглашения, которые вы можете определить, если вы можете изменить то, что использует ваша система для статуса выхода, но я не уверен если это даже возможно. – James