Page 20 - Enterpress Magazin - 2020. 3-6.
P. 20

20. oldal                                                                       2020. május – december



                         IS-FORTH - 3. rész




                                    Intelligent Software - 1985


                   rendszerbővítő, FORTH programozási nyelv






        1.6. Gyorsműveletek                                   OVER   ( a b - - - - a b a ) a második elemről készít egy

                                                              másolatot a verem tetején;
        A legtöbb számítógépnek gyorsan működő gépi utasítása  2OVER  ( a b c d - - - - a b c d a b ) a harmadik,
        van arra, hogy valamit 1-gyel növeljen vagy csökkentsen,  negyedik (vagy a második dupla pontosságú) elemről
        2-vel szorozzon vagy osszon, megvizsgálja az előjelét.  készít másolatot a verem tetején;
        Ehhez képest az a sorozat, hogy 1 + (tegyél a veremre  ROT    ( a b c - - - - b c a ) a harmadik elemet
        1-et, hívd a + szót) lassú és nehézkes. Az ún. „gyorsmű-   kiszedi alulról, és feldobja a tetőre;
        veletek” levágják a felesleges kanyarokat, és körülményes-  2ROT   (a b c d e f - - - - c d e f a b) az ötödik,
        kedés  nélkül  elindítják  a  megfelelő  gépi  utasításokat. A  hatodik (vagy a 3. dupla pontosságú) elemet kiszedi
        gyorsműveletek:                                       alulról, és feldobja a verem tetejére;
                                                              -ROT ( a b c - - - - c a b) a ROT-al ellenkező irányba
        1+      ( n - - - - n1 )    eggyel növeli n értékét;  forgatja a verem legfelső három elemét.
        1-      ( n - - - - n1 )    eggyel csökkenti n értékét;  -2ROT   a két első elemet berakja az ötödik,
        2+      ( n - - - - n1 )    kettővel növeli n értékét;  hatodik helyre
        2-      ( n - - - - n1 )    kettővel csökkenti n értékét;  DROP   ( a - - - - ) eltávolítja a legfelső elemet;
        2*      ( n - - - - n1 )    megduplázza n értékét;    2DROP ( a b - - - - ) eltávolítja a két (vagy egy dupla
        2/      ( n - - - - n1 )    megfelezi n értékét;      pontosságú) legfelső elemet.
        0=      ( n - - - - f )    f akkor igaz, ha n = 0;    NOT   ( - - - - 0 ) logikai hamis, azaz 0 értéket tesz
        D0=   (nn - - - - f)    A 0= dupla pontosságú alakja;  a verembe
        0<      ( n - - - - f )    f akkor igaz, ha n < 0;
        0>      ( n - - - - f )    f akkor igaz, ha n > 0;    Írjunk például egy olyan szót, amelynek hatása a veremre:
                                                              ( X Y - - - - Z ), ahol Z = X * Y - (X + Y)
        Láthatóan a gyorsműveleteket végző szavak hasonlóan
        néznek ki, mint az ugyanúgy működő lépésenkénti paran-  Nem kezdhetjük a dolgot aritmetikai művelettel, hiszen
        csok, csak egy szóba írjuk az operandust a műveleti jellel;  akkor elveszítenénk az x-et meg az y-t a veremről. Va-
        az 1+ szó ugyanazt a műveletet végzi, mint az 1 + sorozat,  lamilyen módon konzerválnunk kell őket. Jó fogás erre
        csak gyorsabban.                                      az OVER kétszeri alkalmazása. Az egyes lépések mellett
                                                              feltüntettük, hogy a lépés után mi lesz a veremben; ez
        1.7. A verem átrendezése                              a felírási mód igen hasznos, amíg nem válunk a verem
                                                              rutinos bűvészévé. (Senkit ne zavarjon, hogy a definíciót
        A FORTH szavak elvárják, hogy a vermen a megfelelő  több sorba írtuk!)
        sorrendben kapják a működésükhöz szükséges paramé-
        tereket. Ez nem mindig egyszerű. Időnként a paraméterek  : XY
        a veremben rossz sorrendben keletkeznek, lehet köztük  OVER
        felesleges, de az is előfordulhat, hogy valamelyikre még  OVER
        egyszer szükség lenne. Az ilyen gondok megoldására  *
        szolgálnak a következő szavak:                        ROT
                                                              ROT
        SWAP   ( a b - - - - b a )  megcseréli a két felső elemet;  +
        2SWAP  ( a b c d - - - - c d a b )   párban megcseréli a  -    ( X Y ) (ez van a legelején a veremben)
         négy (vagy két dupla pontosságú) legfelső elemet     ( X Y X )
        DUP   ( a - - - - a a )   megduplázza a legfelső elemet;  ( X Y X Y )
        2DUP   ( a b - - - - a b a b )    megduplázza a két (vagy  ( X Y szorzat )
        egy dupla pontosságú) legfelső elemet;                ( X szorzat Y )
        ?DUP   ( a - - - - a a )   megduplázza  a  legfelső  elemet,  ( szorzat X Y )
        ha az nem nulla.                                      ( szorzat összeg )
                                                              ( Z )
   15   16   17   18   19   20   21   22   23   24   25