TITLE 'RE-ENTRANT  FROM 1BYTE(8BITS) TO 8-BYTES OF ZEROS/ONES'
*---------------------------------------------------------------------*
*        CALL  FROM1TO8,(8BITS,8BYTES)
*---------------------------------------------------------------------*
         SPACE  2
FROM1TO8 CSECT ,                   RE-ENTRANT                 1999ESOTO
         STM   14,12,12(13)        SAVE CALLER REGISTERS.
         BALR  15,0                ESTABLISH ADDRESSABILITY.
         USING *,15
         LM    1,2,0(1)            LOAD CALLER INPUT/OUTPUT PARMS.
         IC    1,0(,1)             R1 NOW HAS 8 BITS TO EXPLODE.
         LA    2,7(,2)             R2 POINTS TO LAST OUTPUT BYTE.
         LA    3,8                 NEEDED TO LOOP 8 TIMES.
         BALR  4,0                 R4 NOW POINTS TO NEXT INSTR.
*
         STC   1,0(,2)             MOVE LOW-ORDER BIT TO OUTPUT.
         SRL   1,1                 R1 NOW HAS NEW LOW ORDER BIT.
         BCTR  2,0                 R2 NOW POINTS NEXT OUTPUT BYTE.
         BCTR  3,4                 LOOP UNTIL ALL 8 BITS MOVED.
*
         NC    1(8,2),=8X'01'      KEEP OUTPUT LOW ORDER BITS.
         OC    1(8,2),=8X'F0'      OUTPUT NOW ZEROS/ONES.
         LM    14,12,12(13)        RESTORE CALLER REGISTERS.
         BR    14                  RETURN TO CALLER CONTROL.
*
         END




         TITLE 'RE-ENTRANT   8 BYTES(ZEROS/ONES) TO 8 BITS(ZEROS/ONES)'
*---------------------------------------------------------------------*
*        CALL FROM8TO1,(8BYTES,8BITS)
*---------------------------------------------------------------------*
         SPACE 2
FROM8TO1 CSECT ,                   RE-ENTRANT                 1999ESOTO
         STM   14,12,12(13)        SAVE CALLER REGISTERS.
         BALR  15,0                ESTABLISH ADDRESSABILITY.
         USING *,15
         LM    2,3,0(1)            LOAD CALLER INPUT/OUTPUT PARMS
         LA    2,7(,2)             POINT TO LAST INPUT BYTE.
         LA    4,8                 NUMBER OF BYTES TO PROCESS.
         BALR  5,0                 R5 POINTS TO NEXT INSTR.
*
         IC    0,0(,2)             MOVE 1 BYTE TO LOW ORDER BYTE.
         SRDL  0,1                 MOVE 1 BIT TO R1 HIGH BIT.
         BCTR  2,0                 POINT TO NEXT INPUT BYTE.
         BCTR  4,5                 PROCESS NEXT INPUT BYTE.
*
         STCM  1,B'1000',0(3)      MOVE DESIRED OUTPUT(8BITS).
         LM    14,12,12(13)        RESTORE CALLER REGSITERS.
         BR    14                  RETURN TO CALLER CONTROL.
*
         END

© Copyright Edward Soto & IT Doctors.co.uk. 2003