Assume that the arrays a, b, and
c are indexed from 1 to n in each dimension.
Assume that you know at compile time that n is 500 and
that the arrays a, b, and c
start at addresses 20000, 3000000, and 5000000, respectively.
In your three address code, do not use the bracket notation, but rather do the address addition explicitly.
Create a new temporary for each value, rather than trying to be frugal and re-use temporaries. That is, do something like
t1 := i * n
t2 := t1 + j
not
t1 := i * n
t1 := t1 + j