Pennington / Example

XTRAN Demonstration:  Translating 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 2008; reproduction prohibited without permission.  Revised 2006-11-27

XTRAN is a trademark of Pennington Systems Incorporated.

Pennington Systems Incorporated
8655 East Via de Ventura, Suite G200
Scottsdale, Arizona 85258-3321

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

[home] Home