Pennington— The Name in Software Engineering Automation

XTRAN Demonstration:  Translate Encore Assembler to C

The following example used the standard set of XTRAN rules for parsing Encore assembler and translating it to C.  NOTE that the translation shown below was done with default conditions.  XTRAN provides many options for controlling the way it translates.

We have declared to XTRAN the following C structure prior to translation:

    typedef struct
        {
        short off1;
        }
        Str;


* Input to XTRAN:

WRD2    DC      2
OFF1    EQU     4
*
* Show off various addressing modes:
*
START   LW      1,WRD1          LW    1,WRD1
        LW      1,WRD1(4)       LW    1,WRD1(4)
        LW      1,WRD1,2        LW    1,WRD1,2
        LW      1,*WRD1         LW    1,*WRD1
        LW      1,*WRD1(3)      LW    1,*WRD1(3)
        LW      1,*WRD1,2       LW    1,*WRD1,2
        LW      2,OFF1(4)       LW    2,OFF1(4)
        LW      2,OFF1,2        LW    2,OFF1,2
        LW      2,*OFF1(3)      LW    2,*OFF1(3)
        LW      2,*OFF1,2       LW    2,*OFF1,2
*
* Now show off some different instructions:
*
        TRR     1,2             LRR   1,2
        LMW     2,WRD1(3)       LMW   2,WRD1(3)
        LNW     2,WRD1,1        LNW   2,WRD1,1
        LI      1,100           LI    1,100
        LEA     1,WRD1          LEA   1,WRD1
        LA      1,WRD1          LA   1,WRD1
        LABR    5,WRD2          LABR  5,WRD2
        SUABR   5,WRD1          SUABR 5,WRD1
        STWBR   3,WRD2          STWBR 3,WRD2
        STW     4,WRD1(3)       STW   4,WRD1(3)
        ZMW     WRD1            ZMW   WRD1
        ZR      4               ZR    4


* Output from XTRAN:

        extern union                            /*unionize r1*/
            {
            long l;
            long *p_l;
            }
            r1;
        extern union                            /*unionize br4*/
            {
            long l;
            Str *p__Str;
            }
            br4;
        extern union                            /*unionize r2*/
            {
            long l;
            Str *p__Str;
            }
            r2;
        extern union                            /*unionize br3*/
            {
            long l;
            Str *p__Str;
            }
            br3;
        extern union                            /*unionize br5*/
            {
            long *p_l;
            long l;
            }
            br5;
        extern long r4;

        long wrd1 = 1;
        long wrd2 = 2;
        typedef struct str
            {
            long off1;
            }
            Str;
start:
/*
 *
 * Show off various addressing modes:
 *
 */
        r1.l = wrd1;                            /*lw    1,wrd1*/
        r1.l = wrd1[br4.l / 4];                 /*lw    1,wrd1(4)*/
        r1.l = wrd1[r2.l / 4];                  /*lw    1,wrd1,2*/
        r1.l = *wrd1;                           /*lw    1,*wrd1*/
        r1.l = *wrd1[br3.l / 4];                /*lw    1,*wrd1(3)*/
        r1.l = *wrd1[r2.l / 4];                 /*lw    1,*wrd1,2*/
        r2.l = br4.p__Str->off1;                /*lw    2,off1(4)*/
        r2.l = r2.p__Str->off1;                 /*lw    2,off1,2*/
        r2.l = *br3.p__Str->off1;               /*lw    2,*off1(3)*/
        r2.l = *r2.p__Str->off1;                /*lw    2,*off1,2*/
/*
 *
 * Now show off some different instructions:
 *
 */
        r2.l = r1.l;                            /*lrr   1,2*/
        r2.l = wrd1[br3.l / 4] & r4;            /*lmw   2,wrd1(3)*/
        r2.l = -wrd1[r1.l / 4];                 /*lnw   2,wrd1,1*/
        r1.l = 100;                             /*li    1,100*/
        r1.p_l = &wrd1;                         /*lea   1,wrd1*/
        r1.p_l = &wrd1;                         /*la    1,wrd1*/
        br5.p_l = &wrd2;                        /*labr  5,wrd2*/
        br5.l -= &wrd1;                         /*suabr 5,wrd1*/
        wrd2 = br3.l;                           /*stwbr 3,wrd2*/
        wrd1[br3.l / 4] = r4;                   /*stw   4,wrd1(3)*/
        wrd1 = 0;                               /*zmw   wrd1*/
        r4 = 0;                                 /*zr    4*/


COPYRIGHT 2012; reproduction prohibited without permission.  Revised 2009-09-11

XTRAN is a trademark of Pennington Systems Incorporated.

  Pennington Systems Incorporated
2820 N. Pinal Avenue, Suite 12
Casa Grande, Arizona 85122-7927
USA


  Phone:  +1(480)626-5503
Fax:  +1(480)626-7618
Email:  Info@Pennington.com
Web:  http://WWW.Pennington.com