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