son sirve que pasar parámetros parametros para metodo los linea ejecutar con comandos argumentos java jvm bytecode instructions jasmin

sirve - que es main en java



La instrucción JVM ALOAD_0 en el método ''main'' apunta a ''args'' en lugar de ''this''? (1)

se supone que aload_0 empuja "esto" a la pila

No del todo ... aload_0 lee el primer argumento de referencia (o, más generalmente, la primera variable de referencia local) del método y lo coloca en la pila.

En las funciones miembro, la primera variable local pasa a ser this referencia.

Pero main no es una función miembro, es una función estática , por lo que no existe this argumento, y el primer argumento verdadero del método es args .

Estoy tratando de implementar un subconjunto de Java para un estudio académico. Bueno, estoy en las últimas etapas (generación de código) y escribí un programa bastante simple para ver cómo se manejan los argumentos de los métodos:

class Main { public static void main(String[] args) { System.out.println(args.length); } }

Luego lo construí y corrí ''Main.class'' a través de un desensamblador en línea que encontré en: http://www.cs.cornell.edu/People/egs/kimera/disassembler.html

Obtengo la siguiente implementación para el método ''principal'': (la salida desensamblada está en Jasmin)

.method public static main([Ljava/lang/String;)V .limit locals 1 .limit stack 2 getstatic java/lang/System/out Ljava/io/PrintStream; aload_0 arraylength invokevirtual java/io/PrintStream.println(I)V return .end method

Mi problema con esto es:
1. se supone que aload_0 ''this'' en la pila (eso es lo que parece decir la especificación de JVM)
2. se supone que arraylength devuelve la longitud de la matriz cuya referencia se encuentra en la parte superior de la pila

Así que de acuerdo a mí, la combinación de 1 y 2 no debería funcionar.

¿Cómo / por qué funciona? ¿O es que el desensamblador tiene errores y el código de bytes real es otra cosa?