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