w=0 for (x=1;x<=10;x++) { w=w+5 } Step 1: pull out the pieces for statements and for loop control structure code for var = expr (w=0) code for var = expr (Begin for loop) loop: code for boolExpr ; result in ACC: 1=true, 0=false JMZ end code for stmt (w=w+5) code for assignment JMP loop end: NOP Step 2: make substitution for first statement: w=0 LOD #0 STO W code for var = expr (Begin for loop) loop: code for boolExpr ; result in ACC: 1=true, 0=false JMZ end code for stmt (w=w+5) code for assignment JMP loop end: NOP Step 3: make substitution for initialization within for loop: x=1 LOD #0 STO W LOD #1 STO X loop: code for boolExpr ; result in ACC: 1=true, 0=false JMZ end code for stmt (w=w+5) code for assignment JMP loop end: NOP Step 3: make substitution for boolExpr within for loop: x<=10 LOD #0 STO W LOD #1 STO X loop: LOD #10 ; result in ACC: 1=true, 0=false STO T1 LOD X SUB T1 STO T1 ; T1 = expr1 - expr2 CPZ T1 ; ACC = 1, if expr1==expr2 otherwise ACC = 0 JMZ notEq ; 0 in ACC means (expr != 0) JMP done ; this instruction executes when (expr == 0) notEq: CPL T1 ; now test to see if expr1