# test program for stage 2: Population Count # ----- INSTRUCTION 0-7: INITIALIZE ----- # LLB R2, 1 # R2 = 1 LLB R5, 0 # R5 = 0 LLB R4, 0x0E LHB R4, 0x0E # R4 = 0x0E0E LLB R8, 1 # R8 used as LOOP_COUNT SLL R8, R8, 4 # R8 = 16 LHB R5, 0x01 # R5 = 0x0100 (256) SW R0, R5, 0 # [256] = 0 # ----- INSTRUCTION 8-15: LOOPING COMPUTATION ------ # L1: AND R6, R4, R2 # R6 = R4 or 0x01: check the LSB of R4 SUB R12, R6, R0 # R12 = R6 - 0 Compare R6 with 0 B 000, L2 # if the last bit of R4 is 0, skip addition JAL L4 # jump to subroutine L2: SRL R4, R4, 1 SUB R8, R8, R2 # R8=R8-1 B 010, L1 # if R8>0 (>=1), goto L1 RL R0, R0, 0 # NOP # ----- INSTRUCTION 16-23: FINISH ------ # L3: LLB R11, 24 LLB R12, 27 EXEC R11 # should be R10 = 6 EXEC R12 # should do nothing L0: B 111, L0 # jump to self: infinite loop RL R0, R0, 0 # NOP RL R0, R0, 0 # NOP RL R0, R0, 0 # NOP # ----- INSTRUCTION 24-27 : SUBROUTINE ----- # L4: LW R10, R5, 0 # R10=[256] ADD R10, R10, R2 # R10++ SW R10, R5, 0 # [256]=R10 JR R15 # return