2011-05-05 11 views
5

Estoy un poco confundido en cuanto a cómo devolver un valor de un método en lenguaje ensamblador. Hasta donde yo sé, el registro eax se usa para mantener el resultado que se debe devolver.Resultado devuelto a eax (lenguaje ensamblador IA-32)

A modo de ejemplo, digamos que mi resultado es 4 y utilizo:

mov eax, 4 

ahora tengo 4 en EAX y quiero volver a este método. ¿Hay algo que necesite hacer o la instrucción ret devolverá automáticamente el resultado?

Lo que pasa es que yo no sé qué tiene de especial registro eax ya que cuando uso ret vuelvo a la persona que llama, y ​​la persona que llama es libre de acceder a cualquiera de los registros que almacenan el resultado a, ¿por qué No podría haber usado ebx o ecx con el resultado almacenado en su lugar?

Respuesta

7

El motivo por el que se almacena el resultado en eax es convencional; puede decidir almacenarlo en el registro que desee. Sin embargo, es probable que la persona que llama de su función suponga que el contenido del valor de retorno se almacena en eax. Esto también implica que no tiene que hacer ningún trabajo adicional al llamar al ret.

4

Lo que está describiendo es un convention utilizado por al menos los compiladores de Microsoft. No hay nada en particular acerca de eax en sí mismo. Si su función de lenguaje ensamblador es invocada por código C/C++ compilado con una de las convenciones de llamada normales, esperará que el resultado se transmita en eax.

ret simplemente devuelve el control al punto donde se llamó a su función. Ningún registro se ve afectado (excepto por ESP y el puntero de instrucción, por supuesto).

+0

Pensé que esta convención en particular estaba un poco más extendida, incluyendo más que GCC. ¿Conoces algún compilador común que no use esta convención? –

+0

No. Pero todo es posible con las convenciones. –

+1

@Mr. Shickadance: aunque no es exactamente convencional (no se puede llamar desde el código de usuario), algunos ayudantes del compilador Delphi usan ZF para devolver un resultado booleano. –

Cuestiones relacionadas