ILOAD 1
    ILOAD 2
    ISUB
    IFLT L1   // if arg1 >= arg2 goto L1
    ILOAD 1
    IFEQ L2
    ILOAD 1
end:IRETURN
L1: ILOAD 2
    IFEQ L3
    ILOAD 2
    GOTO end
L2: ILOAD 2
    GOTO end
L3: ILOAD 1
    GOTO end

Questo codice ha due argomenti (ovviamente passati sullo Stack)
e non ha variabili locali. Questo significa che i 4 byte che precedono
questo codice quando inserito nella Method Area sono  0x00 0x02 0x00 0x00

Una possibile chiamata e' la seguente

        BIPUSH OBJREF  (*)
        BIPUSH 5
        BIPUSH 7
        INVOKEVIRTUAL m1 (**)
                                                       

(*) In IJVM si suppone per semplicita' che ci sia un unico
    oggetto. Quindi OBJREF sarebbe ridondante come informazione
    da porre sullo Stack. Per uniformita' con JVM si pone lo stesso.
    Il Tanenbaum pero'  non chiarisce cosa sia di preciso OBJREF.

(**) dove m1 e' la posizione relativa al CPP contenente l'indirizzo
     del nostro metodo nella method area.
 
----------------------------

La soluzione precedente mi sembra alquanto confusa e per niente
ottimizzata.
Questa dovrebbe essere un po' migliore.

.method confronta (j,k)
    ILOAD J
    DUP
    IFEQ L1
    ILOAD K
    DUP
    IFEQ L2
    ISUB
    IFLT L2
L1: ILOAD K
    GOTO End
L2: ILOAD J
End:IRETURN
.end-method

I quattro byte che precedono il codice nella Method Area devono essere:

0x00 0x03 0x00 0x00

in quanto i parametri in ingresso sono 2(J,K)+OBJREF, che  considerato
anch'esso un parametro.


OBJREF si carica sulla stack con l'opcode LDC_W, non con BIPUSH, in
quanto si tratta di un valore nella Constant Pool, mentre BIPUSH serve a caricare
un valore tramite indirizzamento immediato.

[Giorgio Stampa]
________________________________________________________________________________

UN'ALTRO ESERCIZIO È QUELLO N'21 DI IJVM


I LOAD K
I LOAD J
I SUB
IFLT LI
I LOAD K
BIPUSH 0
IFICMPEQ L3
I LOAD K
I STORE K
LI
   I LOAD J
   BIPUSH 0
   IFICMPEQ L2
   ILOAD J
   I STORE
   GOTO FINE
L2
   ILOAD K
   I STORE
L3
   ILOAD J
   I STORE
FINE