🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.lang.asm370
Article #704

Re: memo on my structure assembler macros

#704
From: news
Date: Thu, 18 Apr 1991 18:52
116 lines
5960 bytes
icking@gmdzi.gmd.de (Werner Icking) writes:

[text deleted]

You have taken a simple example:

>R0        EQU   0
>HWORD     DS    H
>          LH    R0,HWORD
>          $IF   ZERO
>          LTR   R0,R0
>          $THEN

And coded it using another method:

>R0       #EQUR  0
>HWORD    DS     H
>         IF     HWORD,EQ,0,THEN

Try THIS one, which is slightly more difficult:

           $IF   NOT-EQUAL           if does not begin with
             CLI   0(R2),X'40'         a blank
           $AND  NOT-EQUAL           nor
             CLI   0(R2),X'05'         a tab
           $AND  POS                 and
             MVI   PROCESS,0           (header start so clear flag)
             BAL   R14,TESTHDR         this is a header we process
           $THEN ,                   then
             MVI   PROCESS,1           process this header
           $END  ,

Then this one which is more difficult yet:

           $IF   ON                  if
             TM    PROCESS,1           this header is being processed
           $AND  HIGH                and
             STM   R2,R3,ORIGREC       save original address and length
             BAL   R14,FIXIT           processing causes
             CL    R3,=F'80'           an overflow
           $AND  HIGH                and
             BAL   R14,SQUEEZE         squeezing will not fix
             CL    R3,=F'80'           the overflow
           $THEN ,                   then
             LM    R2,R3,ORIGREC       restore original
           $END  ,

And then this one which is starting to really get hard:

         $IF   POS                 if (the following test is positive)
                                                                 SPACE
           $IF   ZERO                if
             TM    8(R5),B'10000000'   upper-right value is positive
           $THEN ,                   then
             LCDR  FPR2,FPR4           test lower-left for negative
           $ELSE ,                   else
             LTDR  FPR2,FPR4           test lower-left for positive
           $END  ,
                                                                 SPACE
         $OR   POS                 or (the following test is positive)
                                                                 SPACE
           $IF   ZERO                if
             TM    0(R5),B'10000000'   upper-left value is positive
           $THEN ,                   then
             LCDR  FPR2,FPR0           test lower-right for negative
           $ELSE ,                   else
             LTDR  FPR2,FPR0           test lower-right for positive
           $END  ,
                                                                 SPACE
         $THEN ,                   then
           EX    *-*,PLOTOI(R7)      OI 0(R6),B'one bit'
         $END  ,

And finally this one which also looks rather hard:

         $IF   EQUAL               if
           CLI   0(R10),X'FF'        there are no arguments
         $OR   NOT-CC0             or
           $IF   EQUAL               ( if                             )
             CLI   8(R10),X'FF'      (   there was just one argument  )
           $OR   ZERO                ( or                             )
             LM    R2,R3,8(R10)      (   (get position argument)      )
             LTR   R2,R2             (   the pos argument was omitted )
           $OR   NOT-CC0             ( or                             )
             DECINT ,                (   >>> the number cannot convert)
           $THEN ,                   ( then                           )
             LA    R1,1              (   assume position to be 1      )
           $END  ,                   ( endif                          )
           LM    R2,R3,0(R10)        ( get address, length of list    )
           BAL   R14,FINDELEM        >>> the element cannot be found
         $THEN ,                   then
           SLR   R3,R3               use a null element
         $END  ,                   endif

>We started this type of programming in the late 60-th -- and stopped it
>some years ago. If anybody is interested I will look for a description
>and the corresponding macro-library.

I'd like to see the description.  I'd suggest posting it.

What is the difference between these methods?  Well obviously a lot of
detail difference.  I don't know for sure what Werner's method really is,
but it looks syntactically like one I read about in an assembler text.
Unfortunately the one in that text had limitations that restricted the
scope of what kinds of conditions could be tested, and had an even more
primitive looping macro setup that required things be expressed in terms
of BXH/BXLE conditions only.  I did not include any loops in the examples
above, but I can include them.  BTW, the "DECINT" in example 4 above is a
macro that calls a subroutine that is generated elsewhere by the same macro,
OR generates inline code in place, depending on the setting of a global
variable by one of yet other macros (INLINE, INTORG, EXTABS, etc.).
--
 /***************************************************************************\
/ Phil Howard -- KA9WGN -- phil@ux1.cso.uiuc.edu   |  Guns don't aim guns at  \
\ Lietuva laisva -- Brivu Latviju -- Eesti vabaks  |  people; CRIMINALS do!!  /
 \***************************************************************************/
Technical Details
Message-ID: <9104190054.AA29724@ucbvax.Berkeley.EDU>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!uwm.edu!bionet!agate!ucbvax!ucf1vm.BITNET!news

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!uwm.edu!bionet!agate!ucbvax!ucf1vm.BITNET!news
From: news@ucf1vm.BITNET
Newsgroups: comp.lang.asm370
Subject: Re: memo on my structure assembler macros
Message-ID: <9104190054.AA29724@ucbvax.Berkeley.EDU>
Date: 18 Apr 91 18:52:03 GMT
Sender: daemon@ucbvax.BERKELEY.EDU
Reply-To: IBM 370 Assembly Programming Discussion List
              <ASM370@OHSTVMA.BITNET>
Distribution: inet
Organization: The Internet
Lines: 116