This example shows how machine code is generated for a simple Pascal program. The example program computes
the sum of the squares of the first NUMINTS integers.
The program is written using a while loop instead of a for loop to produce assembly code which more closely resembles the Pascal program. NUMINTS is a constant and the program uses two variables, Count and Squares to perform the calculation. The result is left in a variable called Squares.
program SumSquare; const NUMINTS = 10 {number of integers to sum} var Count, Squares: integer; begin {SumSquare} Squares := 0; Count := 1; while ( Count <= NUMINTS ) do begin {while} Squares := Squares + (Count * Count); Count := Count + 1; end; {while} end. {SumSquare}
The MAL squares program uses registers for the variables Count and Squares. The number of integers in the sum is stored in memory at location numints.
# # MAL program to sum the squares of # the first 'numints' integers. # # Registers: # # $2 sum of squares # $3 branch condition # $5 numints # $6 squares # $7 count # .data numints: .word 10 .text __start: li $7, 1 li $2, 0 lw $5, numints while: sub $3, $7, $5 bgtz $3, end mul $6, $7, $7 add $2, $2, $6 add $7, $7, 1 j while end: done
When the MAL code is assembled, the following TAL program is produced. Note that several MAL instructions must be synthesized from one or more TAL instructions.