We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
This ex. will not work
char data test; char TestF(void); char TestF(void) { if (test == 0x8A) { //... return(1); } } //Take a look at the Assambly code ; FUNCTION TestF (BEGIN) ; SOURCE LINE # 5 ; SOURCE LINE # 6 ; SOURCE LINE # 7 R MOV R7,test MOV A,R7 RLC A SUBB A,ACC MOV R6,A MOV A,R7 XRL A,#08AH ORL A,R6 R xJNZ ?C0002 ; SOURCE LINE # 8 ; SOURCE LINE # 10 MOV R7,#01H ; SOURCE LINE # 11 ; SOURCE LINE # 12 ?C0002: RET
char data test; char TestF(void); char TestF(void) { if (test == (char)0x8A) { //... return(1); } } //Take a look at the Assambly code ; FUNCTION TestF (BEGIN) ; SOURCE LINE # 5 ; SOURCE LINE # 6 ; SOURCE LINE # 7 R MOV A,test R xJNE A,#08AH,?C0002 ; SOURCE LINE # 8 ; SOURCE LINE # 10 MOV R7,#01H ; SOURCE LINE # 11 ; SOURCE LINE # 12 ?C0002: RET
Hi, look more careful at the next two lines:
char data test; if (test == 0x8A)
Ok I can understand that but if I write this
1 char data test; 2 3 char TestF(void); 4 5 char TestF(void) 6 { 7 1 if (test == -118) 8 1 { 9 2 //... 10 2 return(1); 11 2 } 12 1 } 13 14 CX51 COMPILER V7.09 TEST 03/04/2004 11:59:16 PAGE 2 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION TestF (BEGIN) ; SOURCE LINE # 5 ; SOURCE LINE # 6 ; SOURCE LINE # 7 R MOV A,test R xJNE A,#08AH,?C0002 ; SOURCE LINE # 8 ; SOURCE LINE # 10 MOV R7,#01H ; SOURCE LINE # 11 ; SOURCE LINE # 12 ?C0002: RET
hi, And we can see that -118 = 0x8a. Soo why can't i compare a signed char to an nagative hex value? Ofcourse you may! But then type: if (test == -0x76) Just indicate to compiler that value is negative!! Regards, Oleg
Thanks Now I'm satisfied /Ingo
...and another way: if you for some reason need to compare signed value as not signed one then you may use something like: if ((unsigned char)test == 0x8A) So, my previous post shows you how compare signed variable with signed (here: negative) number, this example above shows how to compare signed variable as unsigned one. In any case, it is your work to say to compiler about types conversion. Regards, Oleg