-
- $NOMOD51
-
- NAME INTASCPUSH
-
- SP DATA 081H
- DPL DATA 082H
- DPH DATA 083H
-
- ACC DATA 0E0H
- B DATA 0F0H
- PSW DATA 0D0H
- F0 BIT 0D0H.5
-
- ?PR?_INTASCPUSH?INTASCPUSH SEGMENT CODE
- PUBLIC _IntAscPush
- ;
- ; char IntAscPush(unsigned int x)
-
- RSEG ?PR?_INTASCPUSH?INTASCPUSH
- _IntAscPush:
- ; { in x; // x(R6,R7)
- ; unsigned char i,j,len; // i(R6), j(R5), len(R4)
- ; unsigned char data *p; // p(R1)
- ; out; // R1(SP缓冲区首址),len(R7)
- ;
- POP DPH
- MOV R1,SP
- POP DPL
- ; j = (x>>8<<6 | (unsigned char)x>>2); // j(R5)
- MOV A,R6
- SWAP A
- RLC A
- RLC A
- ANL A,#0C0H
- MOV R5,A
- MOV A,R7
- RRC A
- RRC A
- ANL A,#03FH
- ORL A,R5
- MOV R5,A
- ; i = x>>10; // i(R6), i = (b15,b14,b13,b12,b11,b10)>>10
- MOV A,R6
- RRC A
- RRC A
- ANL A,#03FH
- MOV R6,A
- ; if (i > 41) i++;
- SETB C
- SUBB A,#41
- JC $+3
- INC R6
- ; j += (i+i+i)*2; // j(R5), j = i*6 + ((b9,b8,b7,b6,b5,b4,b3,b2)>>2)
- MOV A,R6
- ADD A,R6
- ADD A,R6
- ADD A,ACC
- ADD A,R5
- MOV R5,A
- ; if (CY == 1) {i++; j += 6;}
- JNC $+6
- INC R6
- ADD A,#6
- MOV R5,A
- ; if (j > 249) {i++; j += 6;}
- MOV A,R5
- SETB C
- SUBB A,#249
- JC $+7
- INC R6
- MOV A,#6
- ADD A,R5
- MOV R5,A
- ; len=0, // len(R4)
- MOV R4,#0
- MOV A,R6
- MOV B,#10
- DIV AB
- MOV @R1,A
- ; *p = i / 10; //万位
- ; if(*p!=0) {p++; len++;}
- JZ INTASCPUSH_1
- ADD A,#'0'
- PUSH ACC
- INC R1
- INC R4
- INTASCPUSH_1:
- ; *p = B; //千位
- MOV A,B
- MOV @R1,A
- ; if(len || (*p!=0)) { p++; len++;}
- ORL A,R4
- JZ INTASCPUSH_2
- MOV A,@R1
- ADD A,#'0'
- PUSH ACC
- INC R1
- INC R4
- INTASCPUSH_2:
- ; *p = j / 25; //百位
- MOV A,R5
- MOV B,#25
- DIV AB
- MOV @R1,A
- ; if(len || (*p!='0')) { p++; len++;}
- JZ INTASCPUSH_3
- MOV A,@R1
- ADD A,#'0'
- PUSH ACC
- INC R1
- INC R4
- INTASCPUSH_3:
- ; *p = (B*4 | (unsigned char)x%4) / 10; //十位
- MOV A,R7
- ANL A,#03H
- MOV R7,A
- MOV A,B
- ADD A,ACC
- ADD A,ACC
- ORL A,R7
- MOV B,#10
- DIV AB
- MOV @R1,A
- ; if(len || (*p!='0')) { p++; len++;}
- JZ INTASCPUSH_4
- MOV A,@R1
- ADD A,#'0'
- PUSH ACC
- INC R1
- INC R4
- INTASCPUSH_4:
- ; *p = B; //个位
- MOV A,B
- ADD A,#'0'
- PUSH ACC
- ; p++; len++;
- INC R1
- INC R4
- CLR A
- PUSH ACC
- ; return len;
- MOV A,R1
- CLR C
- SUBB A,R4
- MOV R1,A
- MOV A,R4
- MOV R7,A
- ; }
- PUSH DPL
- PUSH DPH
- RET
- ; END OF _IntAscPush
-
- END
复制代码
|