This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

arrays and ptrs: what are C_CSTOPTR and C_ISTOPTR for

Dear all,

I have problems with string in C51, and confused about the array and ptr processing in C51 while investigating the assembly code generated.

What is C_CSTOPTR and C_ISTOPTR for in the code?

Please note C_CSTOPTR is in char* access code, and C_ISTOPTR is in int[] code.

  71   1         unsigned char *cp = (unsigned char *)malloc(5);
  72   1         unsigned char ca[5];
  73   1         unsigned int  *ia = (unsigned int *)malloc(10);
  74   1         unsigned int  ip[5];
  75   1      
  76   1         for (i=0; i<5; i++) {
  77   2            ca[i] = i;
  78   2            cp[i] = i;
  79   2            ia[i] = i;
  80   2            ip[i] = i;
  81   2         }

Below is generated for the above code:

                                           ; SOURCE LINE # 77
0034 AF00    R     MOV     R7,i+01H
0036 7400    R     MOV     A,#LOW ca
0038 2500    R     ADD     A,i+01H
003A F582          MOV     DPL,A
003C E500    R     MOV     A,i
003E 3400    R     ADDC    A,#HIGH ca
0040 F583          MOV     DPH,A
0042 EF            MOV     A,R7
0043 F0            MOVX    @DPTR,A
                                           ; SOURCE LINE # 78
0044 900000  R     MOV     DPTR,#cp
0047 E0            MOVX    A,@DPTR
0048 FB            MOV     R3,A
0049 A3            INC     DPTR
004A E0            MOVX    A,@DPTR
004B FA            MOV     R2,A
004C A3            INC     DPTR
004D E0            MOVX    A,@DPTR
004E F9            MOV     R1,A
004F 850082  R     MOV     DPL,i+01H
0052 850083  R     MOV     DPH,i
0055 EF            MOV     A,R7
0056 120000  E     LCALL   ?C_CSTOPTR
                                           ; SOURCE LINE # 79
0059 E500    R     MOV     A,i+01H
005B 25E0          ADD     A,ACC
005D FF            MOV     R7,A
005E E500    R     MOV     A,i
0060 33            RLC     A
0061 FE            MOV     R6,A
0062 900000  R     MOV     DPTR,#ia
0065 E0            MOVX    A,@DPTR
0066 FB            MOV     R3,A
0067 A3            INC     DPTR
0068 E0            MOVX    A,@DPTR
0069 FA            MOV     R2,A
006A A3            INC     DPTR
006B E0            MOVX    A,@DPTR
006C F9            MOV     R1,A
006D 8F82          MOV     DPL,R7
006F 8E83          MOV     DPH,R6
0071 E500    R     MOV     A,i
0073 8500F0  R     MOV     B,i+01H
0076 120000  E     LCALL   ?C_ISTOPTR
                                           ; SOURCE LINE # 80
0079 E500    R     MOV     A,i+01H
007B 25E0          ADD     A,ACC
007D FF            MOV     R7,A
007E E500    R     MOV     A,i
0080 33            RLC     A
0081 FE            MOV     R6,A
0082 7400    R     MOV     A,#LOW ip
0084 2F            ADD     A,R7
0085 F582          MOV     DPL,A
0087 EE            MOV     A,R6
0088 3400    R     ADDC    A,#HIGH ip
008A F583          MOV     DPH,A
008C E500    R     MOV     A,i
008E F0            MOVX    @DPTR,A
008F A3            INC     DPTR
0090 E500    R     MOV     A,i+01H
0092 F0            MOVX    @DPTR,A