import java.io.PrintWriter; import pal.*; public class SumPAL { public static void main(String[] args) throws Exception { PrintWriter out = new PrintWriter(System.out,true); Computer hal = new Computer(6); Container top = new MemLoc(new IConstant(0)); Container input = new MemLoc(new IConstant(1)); Container sum = new MemLoc(new IConstant(2)); Container temp = new Temporary(); Label readLabel = new Label("READ"); Label computeLabel = new Label("COMPUTE"); Label writeLabel = new Label("WRITE"); Label endLabel = new Label("END"); InstructionSequence code = new InstructionSequence(); code.add(new Label("START")); code.add(new Comment("Remember top of stack.")); code.add(new Move(Register.sp, top)); code.add(new Comment("Initialize sum to 0.")); code.add(new Move(new IConstant(0), sum)); code.add(readLabel); code.add(new Comment("Read values until 0. Push each on stack.")); code.add(new IRead(input)); code.add(new JumpZero(input, computeLabel)); code.add(new Push(input)); code.add(new Jump(readLabel)); code.add(computeLabel); code.add(new Comment("Sum values")); code.add(new JumpLessEqual(top,Register.sp, writeLabel)); code.add(new Pop(temp)); code.add(new IAdd(sum, temp, sum)); code.add(new Jump(computeLabel)); code.add(writeLabel); code.add(new IWrite(sum)); code.add(endLabel); code.add(new Halt()); hal.setCode(code); out.println("----- DUMP -----"); hal.dump(out); out.println("----- RUN ------"); hal.run(true); } // main(String[]) } // class SumPAL