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

Wrong DPTR value

Dear Sirs,

The C code in my project is:

TaskStruct xdata * data pTask;
data unsigned char Task;
...
*pTask->ProcID=Task;

causes the assembly code

  MOV   A,pTask+1
  ADD   A,#06
  LCALL 4629
  MOV   DPL,A
  MOV   DPH,R6
  MOV   A,Task
  MOVX  @DPTR,A
  ...
4629:
  ADDC  A,pTask
  MOV   DPL,A
  CLR   A
  MOV   DPH,A
  MOVX  A,@DPTR
  MOV   R6,A
  INC   DPTR
  MOVX  A,@DPTR
  RET

I think the correct code must be

4629: 
  MOV   DPL,A
  CLR   A
  ADDC  A,pTask
  MOV   DPH,A
  MOVX  A,@DPTR
  MOV   R6,A
  INC   DPTR
  MOVX  A,@DPTR
  RET

Why this happens?

I'm using V8.18 C51 compiler and V4.39 LX51 linker.

The code optimization level is 11 (Reuse Common Exit Code) and Emphasis is Favor speed.

Thanks for any help,
Rudolf

0