for ( expr1; condition; expr2 ) <==> expr1; statements while ( condition ) { statements; expr2; }
Translate all for statements into a while statement before translating into assembler code.
int A[10]; int sum, i; sum = 0; for (i = 0; i < 10; i++); sum = sum + A[i];
Convert to while loop and then to assembler code:
Java: M68000: |
The flow chart of the above program is:
Here is a speedier version: click here
int A[10]; int max, i; max = A[0]; for ( i = 1; i < 10; i++ ) { if ( A[i] > max ) max = A[i]; } |
Convert to while loop:
int A[10]; int max, i; max = A[0]; i = 1; while ( i < 10 ) { if ( A[i] > max ) max = A[i]; i++; } |
The flow chart of the above program is:
In M68000:
move.l A, max; * max = A[0] (it's at A !) move.l #1, i * i = 1 WhileStart: move.l i,d0 cmp.l #10,d0 bge WhileEnd move.l #A,a0 move.l i, d0 muls #4,d0 move.l 0(a0,d0), d0 * d0 = A[i] move.l max, d1 * d1 = max cmp.l d1, d0 * Compare A[i] ?? max ble IfEnd * If ( A[i] <= max ), then: bra IfEnd (Because: "not >" is "<=" ) move.l d0, max * max = A[i] IfEnd: move.l i, d0 add.l #1, d0 move.l d0, i bra WhileStart WhileEnd: |
Here is the Egtapi debug file for the program: click here