.TITLE SWPBYT .GLOBL SWPBYT,WRDSWP ;SWAP BYTES - SWPBYT ;CALL SWPBYT(ADDR, NBYTES) ; ;SWAP WORD PAIRS - WRDSWP ;CALL WRDSWP(ADDR, NBYTES) SWPBYT: MOV R0,-(SP) MOV R1,-(SP) ;SAVE REGS USED MOV 2(R5),R0 ;GET ADDR BEQ 1$ ;0 ILLEGAL BIT #1,R0 BNE 1$ ;ALSO ODD ILLEGAL MOV @4(R5),R1 ;GET NBYTES BEQ 1$ ;ZERO ILLEGAL ASR R1 ;DIVIDE BY 2 TST R1 BLE 1$ ;MUST BE POSITIVE 2$: SWAB (R0)+ ;MUNG STUFF DEC R1 BGT 2$ ;DO ALL WE MUST 1$: MOV (SP)+,R1 MOV (SP)+,R0 RTS PC WRDSWP: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) ;SWAP WRD PAIRS MOV 2(R5),R0 ;GET ADDR BEQ 1$ ;0 ILLEGAL BIT #1,R0 BNE 1$ ;ALSO ODD ILLEGAL MOV @4(R5),R1 ;GET NBYTES BEQ 1$ ;ZERO ILLEGAL ASR R1 ;DIVIDE BY 2 ASR R1 ;DIVIDE BY 2 TST R1 BLE 1$ ;MUST BE POSITIVE 2$: MOV (R0)+,R2 ;SAVE 1ST WORD MOV @R0,-2(R0) ;COPY DOWN MOV R2,(R0)+ ;THEN COPY UP DEC R1 ;COUNT LOOP DOWN BGT 2$ 1$: MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RTS PC .END