Code:
(ASSIGN,BP,0)
(ASSIGN,SP,0)
(ASSIGN,FP,SP)
(ADDI,SP,FP,2)
(ASSIGN,M[FP],3)
(JUMP,2)
(LABEL,0)
(ADDI,SP,SP,1)
(ADDI,SP,SP,1)
(ASSIGN,R0,M[FP+4])
(READI,M[FP+4])
(ASSIGN,R1,M[FP+5])
(ASSIGN,R2,4)
(ASSIGN,M[FP+5],R2)
(ASSIGN,M[SP],4)
(ADDI,SP,SP,1)
(ASSIGN,M[SP],FP)
(ADDI,SP,SP,1)
(SUBI,M[SP],SP,2)
(ADDI,SP,SP,1)
(ASSIGN,R3,M[FP+4])
(ASSIGN,R4,R3)
(ASSIGN,M[SP],R4)
(ADDI,SP,SP,1)
(ASSIGN,R5,M[FP+5])
(ASSIGN,R6,R5)
(ASSIGN,M[SP],R6)
(ADDI,SP,SP,1)
(SUBI,FP,SP,5)
(JUMP,1)
(LABEL,4)
(ASSIGN,SP,M[FP+2])
(ASSIGN,FP,M[FP+1])
(JUMP,M[FP])
(LABEL,1)
(ASSIGN,R7,M[FP+3])
(ASSIGN,R8,R7)
(ASSIGN,R9,M[FP+4])
(ASSIGN,R10,R9)
(ADDI,R11,R8,R10)
(WRITEI,R11)
(JUMP,M[FP])
(LABEL,2)
(ADDI,SP,SP,1)
(ADDI,SP,SP,1)
(ADDI,SP,SP,1)
(ADDI,SP,SP,1)
(ADDI,SP,SP,1)
(ASSIGN,R12,M[FP+5])
(READI,M[FP+5])
(ASSIGN,R13,M[FP+5])
(ASSIGN,R14,R13)
(WRITEI,R14)
(ASSIGN,R15,M[FP+6])
(ASSIGN,R16,R15)
(WRITEI,R16)
(ASSIGN,M[SP],5)
(ADDI,SP,SP,1)
(ASSIGN,M[SP],FP)
(ADDI,SP,SP,1)
(SUBI,M[SP],SP,2)
(ADDI,SP,SP,1)
(ASSIGN,R17,M[FP+5])
(ASSIGN,R18,R17)
(ASSIGN,M[SP],R18)
(ADDI,SP,SP,1)
(SUBI,FP,SP,4)
(JUMP,0)
(LABEL,5)
(ASSIGN,SP,M[FP+2])
(ASSIGN,FP,M[FP+1])
(JUMP,M[FP])
(LABEL,3)
The program should then make an array of basic blocks from the above code (basic block meaning anything that starts with LABEL and may or may not end with JUMP). Therefore I'm using an array of these structures: