.TITLE MR01.. STRING PROCEDURES IN MACRO .IDENT /MR01../ ; .SBTTL . BINARY TO DECIMAL STRING CONVERSIONS ; R$BDEC:: ;CONVERT BINARY TO DECIMAL ASCII ; ENTRY CONDITIONS ; R0 = BINARY VALUE ; ; EXIT CONDITIONS ; R0 -> CONVERTED STRING ; ; SAVE R1,R2,R3,R4 ;SAVE R1 TO R4 MOV #55$,R4 ;HOLD ADDRESS OF DATA AREA MOV #6,50$ ;PRESET STRING LENGTH MOVB #'+,60$ TST R0 ;IS INPUT VALUE -VE BGE 10$ ;J IF VALUE +VE OR ZERO MOVB #'-,60$ ;LOAD -VE SIGN NEG R0 ;MAKE -VE VALUE +VE 10$: MOV #5,R3 ;LOOP COUNTER 15$: MOV R0,R1 ;HOLD LOW PART OF DOUBLE LENGTH WORD CLR R0 ;NO HIGH PART " " " " DIV #10.,R0 ;R0 HOLDS DIVIDED VALUE ;R1 HOLDS REMAINDER ADD #'0,R1 ;CONVERT VALUE TO ASCII MOVB R1,(R4)+ SOB R3,15$ ;REPEAT SEQUENCE 5 TIMES ; MOV #50$,R0 ;HOLD STRING ADDRESS CALL R$REVERSE ;PUT CHARACTER INTO CORRECT ORDER UNSAVE R1,R2,R3,R4 ;RESTORE SAVED REGISTERS RETURN ;RETURN TO CALLING PROGRAM ; ; .PAGE .SBTTL DATA AREA FOR DECIMAL CONVERT ROUTINE ; ; .WORD 10. ;MAX NUMBER OF CHARACTERS ALLOWED 50$: .WORD 6 ;ACTUAL NUMBER OF CHARACTERS IN STRING 55$: .BYTE 0,0,0,0,0 60$: .BYTE 0 ;ADDRESS OF SIGN LOAD POSITION .BLKW 4 .EVEN ;SET TO EVEN BOUNDRY ; .END ;