// SQUARES      Table of Squares
        .data                     // Declare storage
        .align  8                 // Desired alignment
sq1:    .skip   8                 // To store 1 squared
sq2:    .skip   8                 // To store 2 squared
sq3:    .skip   8                 // To store 3 squared
                                  // etc.
        .text                     // Section for code
        .align  32                // Desired alignment
        .global main              // These three lines
        .proc   main              //  mark the mandatory
main:                             //   'main' program entry
        .body                     // Now we really begin...
first:  mov     r21 = 1;;         // Gr21 = first difference
        mov     r22 = 2;;         // Gr22 = 2nd difference
        mov     r20 = 1;;         // Gr20 = first square
        addl    r14 = @gprel(sq1),gp;;  // Point to storage
        st8     [r14] = r20;;     //        for sq1
        add     r21 = r22,r21;;   // Adjust first difference
        add     r20 = r21,r20;;   // Gr20 = second square
        addl    r14 = @gprel(sq2),gp;;  // Point to storage
        st8     [r14] = r20;;     //        for sq2
        add     r21 = r22,r21;;   // Adjust first difference
        add     r20 = r21,r20;;   // Gr20 = third square
        addl    r14 = @gprel(sq3),gp;;  // Point to storage
        st8     [r14] = r20;;     //        for sq3
                                  // etc.
done:   mov     r8 = 0;;          // Signal all is normal
        br.ret.sptk.many b0;;     // Back to command line
        .endp   main              // Mark end of procedure