VARS VAR size CODE st 8190,[size] ENDCODE VARS VAR IsPrime CODE ld [size],%t2 cmp %t2,0 bge L0 mov 0,%t2 L0: mov 1,%t0 add %t0,%t2,%t0 st %t0,[$a0] call PCAT$alloc add %o0,%t0,%t1 sub %t1,%t2,%t3 L1: cmp %t1,%t3 ble L2 dec %t1 st 1,[%t1] ba L1 L2: dec %t0 st %t0,[%o0] st %t1,[IsPrime] ENDCODE VARS VAR i CODE st 0,[i] ENDCODE VAR j CODE ld [i],%t4 st %t4,[j] ENDCODE VAR k CODE ld [i],%t5 st %t5,[k] ENDCODE VAR prime CODE ld [i],%t6 st %t6,[prime] ENDCODE VAR count CODE ld [i],%t7 st %t7,[count] ENDCODE PROCS PROC mark ( x ) CODE ld [x],%t0 ld [size],%t1 cmp %t0,%t1 bl L0 ba L1 L0: ld [x],%t2 cmp %t2,0 bge L3 call PCAT$bounds_error L3: ld [IsPrime],%t3 sub %t3,1,%t4 ld [%t4],%t4 cmp %t2,%t4 bl L4 call PCAT$bounds_error L4: add %t3,%t2,%t3 st 0,[%t3] ld [x],%t5 ld [prime],%t6 add %t5,%t6,%t7 st %t7,[x] ld [x],%t8 st %t8,[$a0] call mark ba L2 L1: L2: return ENDCODE CODE L3: ld [j],%t8 ld [size],%t9 cmp %t8,%t9 bl L4 ba L5 L4: ld [j],%t11 cmp %t11,0 bge L9 call PCAT$bounds_error L9: ld [IsPrime],%t12 sub %t12,1,%t13 ld [%t13],%t13 cmp %t11,%t13 bl L10 call PCAT$bounds_error L10: add %t12,%t11,%t12 ld [%t12],%t10 cmp %t10,1 be L6 ba L7 L6: ld [j],%t14 ld [j],%t15 add %t14,%t15,%t16 add %t16,3,%t17 st %t17,[prime] ld [j],%t18 ld [prime],%t19 add %t18,%t19,%t20 st %t20,[k] ld [k],%t21 st %t21,[$a0] call mark ld [count],%t22 add %t22,1,%t23 st %t23,[count] ba L8 L7: L8: ld [j],%t24 add %t24,1,%t25 st %t25,[j] ba L3 L5: st "The number of prime numbers less than ",[$a0] call PCAT$write_string ld [size],%t26 st %t26,[$a0] call PCAT$write_int st " is ",[$a0] call PCAT$write_string ld [count],%t27 st %t27,[$a0] call PCAT$write_int call PCAT$write_newline return ENDCODE