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 }
; 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