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

Is this a BUG?

In C51 v8.01 Compiler
void Fnc(BYTE * pT, WORD Dat, BYTE x, BYTE y)
{
BYTE Asc[6];
BYTE * pSource = Asc + 5 - (x + y);
.....
}

I got wrong "pSource", but it is OK in v7.50
I changed it to

BYTE * pSource = &Asc + 5 - (x + y);

It is OK, WHY?

Parents Reply Children
  • In v8.01, the compiler results:

    void Func(BYTE *pT, WORD Dat, BYTE x,BYTE y)
    C:0x08BD 8B30 MOV 0x30,R3
    C:0x08BF 8A31 MOV 0x31,R2
    C:0x08C1 8932 MOV 0x32,R1
    C:0x08C3 8C33 MOV 0x33,R4
    C:0x08C5 8D34 MOV 0x34,R5
    {
    BYTE Asc[6];
    BYTE * pSource = Asc + 5 - (x + y);

    C:0x08C7 C3 CLR C
    C:0x08C8 E9 MOV A,R1
    C:0x08C9 953D SUBB A,0x3D
    C:0x08CB F9 MOV R1,A
    C:0x08CC EA MOV A,R2
    C:0x08CD 953C SUBB A,0x3C
    C:0x08CF 8B3D MOV 0x3D,R3
    C:0x08D1 F53E MOV 0x3E,A
    C:0x08D3 893F MOV 0x3F,R1

    and in v7.50, the result is:

    void Func(BYTE *pT, WORD Dat, BYTE x,BYTE y)
    C:0x08BD 8B30 MOV 0x30,R3
    C:0x08BF 8A31 MOV 0x31,R2
    C:0x08C1 8932 MOV 0x32,R1
    C:0x08C3 8C33 MOV 0x33,R4
    C:0x08C5 8D34 MOV 0x34,R5
    {
    BYTE Asc[6];
    BYTE * pSource = Asc + 5 - (x + y);

    C:0x08C7 E535 MOV A,0x35
    C:0x08C9 2536 ADD A,0x36
    C:0x08CB FF MOV R7,A
    C:0x08CC C3 CLR C
    C:0x08CD 743C MOV A,#0x3C
    C:0x08CF 9F SUBB A,R7
    C:0x08D0 F9 MOV R1,A
    C:0x08D1 7400 MOV A,#0x00
    C:0x08D3 9400 SUBB A,#0x00
    C:0x08D5 753D00 MOV 0x3D,#0x00
    C:0x08D8 F53E MOV 0x3E,A
    C:0x08DA 893F MOV 0x3F,R1

  • Hmmm,

    That does look strange. I think it best that you contact Technical Support about this problem. That's not at all the results that I get from your code snippet.

    Jon