// This program contains code Copyright 2000 Tom Rothamel. // It is provided without warranty, and may be redistributed // and used in modified or unmodified form, provided this // copyright notice is retained in the source code. .constant objref 0x14a11 .end-constant .main .var i .end-var /// { /// for ((i = 99); i > 0; i // for: initalization expression BIPUSH 0x63 ISTORE i cond0loop: // for: loop condition BIPUSH 0x0 ILOAD i ISUB IFLT cond0true GOTO cond0false // for: loop body cond0true: /// { /// printbottlesob(i); LDC_W OBJREF ILOAD i INVOKEVIRTUAL printbottlesob POP /// out " on the wall,\n"; BIPUSH 0x20 OUT BIPUSH 0x6F OUT BIPUSH 0x6E OUT BIPUSH 0x20 OUT BIPUSH 0x74 OUT BIPUSH 0x68 OUT BIPUSH 0x65 OUT BIPUSH 0x20 OUT BIPUSH 0x77 OUT BIPUSH 0x61 OUT BIPUSH 0x6C OUT BIPUSH 0x6C OUT BIPUSH 0x2C OUT BIPUSH 0xA OUT /// printbottlesob(i); LDC_W OBJREF ILOAD i INVOKEVIRTUAL printbottlesob POP /// out ".\n"; BIPUSH 0x2E OUT BIPUSH 0xA OUT /// (i = (i - 1)); ILOAD i BIPUSH 0x1 ISUB ISTORE i /// out "Take one down, pass it around,\n"; BIPUSH 0x54 OUT BIPUSH 0x61 OUT BIPUSH 0x6B OUT BIPUSH 0x65 OUT BIPUSH 0x20 OUT BIPUSH 0x6F OUT BIPUSH 0x6E OUT BIPUSH 0x65 OUT BIPUSH 0x20 OUT BIPUSH 0x64 OUT BIPUSH 0x6F OUT BIPUSH 0x77 OUT BIPUSH 0x6E OUT BIPUSH 0x2C OUT BIPUSH 0x20 OUT BIPUSH 0x70 OUT BIPUSH 0x61 OUT BIPUSH 0x73 OUT BIPUSH 0x73 OUT BIPUSH 0x20 OUT BIPUSH 0x69 OUT BIPUSH 0x74 OUT BIPUSH 0x20 OUT BIPUSH 0x61 OUT BIPUSH 0x72 OUT BIPUSH 0x6F OUT BIPUSH 0x75 OUT BIPUSH 0x6E OUT BIPUSH 0x64 OUT BIPUSH 0x2C OUT BIPUSH 0xA OUT /// printbottlesob(i); LDC_W OBJREF ILOAD i INVOKEVIRTUAL printbottlesob POP /// out " on the wall.\n\n"; BIPUSH 0x20 OUT BIPUSH 0x6F OUT BIPUSH 0x6E OUT BIPUSH 0x20 OUT BIPUSH 0x74 OUT BIPUSH 0x68 OUT BIPUSH 0x65 OUT BIPUSH 0x20 OUT BIPUSH 0x77 OUT BIPUSH 0x61 OUT BIPUSH 0x6C OUT BIPUSH 0x6C OUT BIPUSH 0x2E OUT BIPUSH 0xA OUT BIPUSH 0xA OUT /// } cond0continue: // for: repetition expression GOTO cond0loop cond0break: cond0false: HALT /// } .end-main .method printbottlesob(n) .var q oldn .end-var /// { /// (oldn = n); ILOAD n ISTORE oldn /// if (n > 0) BIPUSH 0x0 ILOAD n ISUB IFLT cond1true GOTO cond1false cond1true: /// { /// (q = 0); BIPUSH 0x0 ISTORE q /// while (!(n < 10)) cond2continue: ILOAD n BIPUSH 0xA ISUB IFLT cond2false GOTO cond2true cond2true: /// { /// (n = (n - 10)); ILOAD n BIPUSH 0xA ISUB ISTORE n /// (q = (q + 1)); ILOAD q BIPUSH 0x1 IADD ISTORE q /// } GOTO cond2continue cond2break: cond2false: /// if (q) ILOAD q IFEQ cond3false GOTO cond3true cond3true: /// out (48 + q); BIPUSH 0x30 ILOAD q IADD OUT cond3false: /// out (n + 48); ILOAD n BIPUSH 0x30 IADD OUT /// } GOTO cond1done /// else cond1false: /// { /// out "No"; BIPUSH 0x4E OUT BIPUSH 0x6F OUT // } cond1done: /// out " bottle"; BIPUSH 0x20 OUT BIPUSH 0x62 OUT BIPUSH 0x6F OUT BIPUSH 0x74 OUT BIPUSH 0x74 OUT BIPUSH 0x6C OUT BIPUSH 0x65 OUT /// if (!(oldn == 1)) BIPUSH 0x1 ILOAD oldn IF_ICMPEQ cond4false GOTO cond4true cond4true: /// out "s"; BIPUSH 0x73 OUT cond4false: /// out " of beer"; BIPUSH 0x20 OUT BIPUSH 0x6F OUT BIPUSH 0x66 OUT BIPUSH 0x20 OUT BIPUSH 0x62 OUT BIPUSH 0x65 OUT BIPUSH 0x65 OUT BIPUSH 0x72 OUT /// return 0; BIPUSH 0x0 IRETURN /// } .end-method