Fellows,
in the code below:
unsigned char test1, test2, test3, dummy; if (test1 != (test2 + 1)) dummy = 0; if (test1 != (unsigned char)(test2 + 1)) dummy = 0; if (test1 != (test2 + test3)) dummy = 0; if (test1 != (unsigned char)(test2 + test3)) dummy = 0;
why is it necessary to use the "unsigned char" cast to get operations only with 8 bits?
Please take a look at the disassembly window output below. I'm using C51 V9.03, optimization level 1. Starting at level 3, the code changes (I've not posted the code).
Thank you in advance, Vitor.
29: unsigned char test1, test2, test3, dummy; 30: 31: if (test1 != (test2 + 1)) C:0x528E 900B04 MOV DPTR,#0x0B04 C:0x5291 E0 MOVX A,@DPTR C:0x5292 FF MOV R7,A C:0x5293 7E00 MOV R6,#0x00 C:0x5295 EF MOV A,R7 C:0x5296 2401 ADD A,#0x01 C:0x5298 FF MOV R7,A C:0x5299 EE MOV A,R6 C:0x529A 3400 ADDC A,#0x00 C:0x529C FE MOV R6,A C:0x529D 900B03 MOV DPTR,#0x0B03 C:0x52A0 E0 MOVX A,@DPTR C:0x52A1 FD MOV R5,A C:0x52A2 7C00 MOV R4,#0x00 C:0x52A4 ED MOV A,R5 C:0x52A5 6F XRL A,R7 C:0x52A6 7002 JNZ C:52AA C:0x52A8 EC MOV A,R4 C:0x52A9 6E XRL A,R6 C:0x52AA 6005 JZ C:52B1 32: dummy = 0; C:0x52AC 900B06 MOV DPTR,#0x0B06 C:0x52AF E4 CLR A C:0x52B0 F0 MOVX @DPTR,A 33: if (test1 != (unsigned char)(test2 + 1)) C:0x52B1 900B04 MOV DPTR,#0x0B04 C:0x52B4 E0 MOVX A,@DPTR C:0x52B5 FF MOV R7,A C:0x52B6 EF MOV A,R7 C:0x52B7 04 INC A C:0x52B8 FF MOV R7,A C:0x52B9 900B03 MOV DPTR,#0x0B03 C:0x52BC E0 MOVX A,@DPTR C:0x52BD FE MOV R6,A C:0x52BE EF MOV A,R7 C:0x52BF 6E XRL A,R6 C:0x52C0 6005 JZ C:52C7 34: dummy = 0; C:0x52C2 900B06 MOV DPTR,#0x0B06 C:0x52C5 E4 CLR A C:0x52C6 F0 MOVX @DPTR,A 35: if (test1 != (test2 + test3)) C:0x52C7 900B05 MOV DPTR,#0x0B05 C:0x52CA E0 MOVX A,@DPTR C:0x52CB FF MOV R7,A C:0x52CC 7E00 MOV R6,#0x00 C:0x52CE 900B04 MOV DPTR,#0x0B04 C:0x52D1 E0 MOVX A,@DPTR C:0x52D2 FD MOV R5,A C:0x52D3 7C00 MOV R4,#0x00 C:0x52D5 ED MOV A,R5 C:0x52D6 2F ADD A,R7 C:0x52D7 FF MOV R7,A C:0x52D8 EC MOV A,R4 C:0x52D9 3E ADDC A,R6 C:0x52DA FE MOV R6,A C:0x52DB 900B03 MOV DPTR,#0x0B03 C:0x52DE E0 MOVX A,@DPTR C:0x52DF FD MOV R5,A C:0x52E0 7C00 MOV R4,#0x00 C:0x52E2 ED MOV A,R5 C:0x52E3 6F XRL A,R7 C:0x52E4 7002 JNZ C:52E8 C:0x52E6 EC MOV A,R4 C:0x52E7 6E XRL A,R6 C:0x52E8 6005 JZ C:52EF 36: dummy = 0; C:0x52EA 900B06 MOV DPTR,#0x0B06 C:0x52ED E4 CLR A C:0x52EE F0 MOVX @DPTR,A 37: if (test1 != (unsigned char)(test2 + test3)) C:0x52EF 900B05 MOV DPTR,#0x0B05 C:0x52F2 E0 MOVX A,@DPTR C:0x52F3 FF MOV R7,A C:0x52F4 900B04 MOV DPTR,#0x0B04 C:0x52F7 E0 MOVX A,@DPTR C:0x52F8 FE MOV R6,A C:0x52F9 EE MOV A,R6 C:0x52FA 2F ADD A,R7 C:0x52FB FF MOV R7,A C:0x52FC 900B03 MOV DPTR,#0x0B03 C:0x52FF E0 MOVX A,@DPTR C:0x5300 FE MOV R6,A C:0x5301 EF MOV A,R7 C:0x5302 6E XRL A,R6 C:0x5303 6005 JZ C:530A 38: dummy = 0; 39: C:0x5305 900B06 MOV DPTR,#0x0B06 C:0x5308 E4 CLR A C:0x5309 F0 MOVX @DPTR,A