First look in the C to LC3 example programs we'll use for the first set up C to LC3 translation examples.
This assignment is due on 29 October. You can turn in a written copy in class or you can email your homework to brock@cs.unca.edu.
You may work with a partner on the LC3 to C assignments, but you must change your partner between assignments.
Translate the five C programs on the C to LC3
page from real C to a very primitive form of C where
(1)
no if
, for
, or while
statements
are allowed except for an if
with a single goto
as its then case;
(2) the expression on the right-hand side of an assignment
statement has at most one operator; and
(3) all arguments to functions are single variables.
Here is an example of doing this for the hardest part of the
C examples, the if
in the middle of the for
for finding the largest odd element of an array.
{ if ((a[i] & 1) && (r==0 || a[i] > r)) r = a[i] ; }
{ int α1, α2, α3, α4 ; α1 = a[i] ; α2 = α1 & 1 ; /* that's the AND instruction */ if (α1 == 0) goto λ2 ; α3 = r==0 ; if (α3 != 0) goto λ1 ; α4 = α1 > r ; if (α4 == 0) goto λ2 ; λ1: r = α1 ; λ2: }
The rest of the homework is much easier than this. By the way, you can "optimize" the reduced C a bit more.
{ int α1, α2 ; α1 = a[i] ; α2 = α1 & 1 ; /* that's the AND instruction */ if (α1 == 0) goto λ2 ; if (r == 0) goto λ1 ; if (α1 <= r) goto λ2 ; λ1: r = α1 ; λ2: }