Horse and saddle to that guy who find what is wrong in below code: unsigned int oct2int(const char* oct){ unsigned int ret = 0; int i,j=0,k,length = strlen(oct); for(i=length-1;i >= 0;i--){ if((k=(oct[i]-'0')) > 0) ret += 1<<(3*j) * k;//8 = 2^3 j++; } return ret; } Compiler doesn't report error. However code is not working as expected To my supprise the code disables interrupts for ever. So the example should look like: unsigned int oct2int(const char* oct){ unsigned int ret = 0; int i,j=0,k,length = strlen(oct); for(i=length-1;i >= 0;i--){ if((k=(oct[i]-'0')) > 0) ret += 1<<(3*j) * k;//8 = 2^3 j++; asm("eint"); }
return ret; } Who was so smart !!! Explanation below ( from assembly): unsigned int oct2int(const char* oct){ 8c42: 0b 12 push r11 ; 8c44: 0a 12 push r10 ; 8c46: 09 12 push r9 ; 8c48: 08 12 push r8 ; 8c4a: 0c 4f mov r15, r12 ; unsigned int ret = 0; 8c4c: 0b 43 clr r11 ; int i,j=0,k,length = strlen(oct); 8c4e: 0a 43 clr r10 ; 8c50: 1f 83 dec r15 ; 8c52: 1f 53 inc r15 ; 8c54: cf 93 00 00 cmp.b #0, 0(r15) ;r3 As==00 8c58: fc 23 jnz $-6 ;abs 0x8c52 8c5a: 09 4f mov r15, r9 ; 8c5c: 09 8c sub r12, r9 ; for(i=length-1;i >= 0;i--){ 8c5e: 0d 49 mov r9, r13 ; 8c60: 3d 53 add #-1, r13 ;r3 As==11 8c62: e7 38 jl $+464 ;abs 0x8e32 8c64: 18 43 mov #1, r8 ;r3 As==01 8c66: 0f 4d mov r13, r15 ; 8c68: 3f e3 inv r15 ; 8c6a: 0e 4f mov r15, r14 ; 8c6c: 3e f0 03 00 and #3, r14 ;#0x0003 8c70: 0f 49 mov r9, r15 ; 8c72: 2f 83 decd r15 ; 8c74: 42 38 jl $+134 ;abs 0x8cfa 8c76: 0e 93 cmp #0, r14 ;r3 As==00 8c78: 5f 24 jz $+192 ;abs 0x8d38 8c7a: 3e 90 03 00 cmp #3, r14 ;#0x0003 8c7e: 3d 34 jge $+124 ;abs 0x8cfa 8c80: 2e 93 cmp #2, r14 ;r3 As==10 8c82: 1d 34 jge $+60 ;abs 0x8cbe if((k=(oct[i]-'0')) > 0) ret += 1<<(3*j) * k;//8 = 2^3 8c84: 0f 4c mov r12, r15 ; 8c86: 0f 5d add r13, r15 ; 8c88: 6f 4f mov.b @r15, r15 ; 8c8a: 8f 11 sxt r15 ; 8c8c: 3f 50 d0 ff add #-48, r15 ;#0xffd0 8c90: 1f 93 cmp #1, r15 ;r3 As==01 8c92: 13 38 jl $+40 ;abs 0x8cba 8c94: 02 12 push r2 ; 8c96: 32 c2 dint 8c98: 03 43 nop 8c9a: 82 4b 32 01 mov r11, &0x0132 ; 8c9e: 82 4f 38 01 mov r15, &0x0138 ; 8ca2: 1e 42 3a 01 mov &0x013a,r14 ;0x013a 8ca6: 32 41 pop r2 ; 8ca8: 0f 4e mov r14, r15 ; 8caa: 0f 5f rla r15 ; 8cac: 0f 5e add r14, r15 ; 8cae: 0b 48 mov r8, r11 ; 8cb0: 0f 93 cmp #0, r15 ;r3 As==00 8cb2: 03 24 jz $+8 ;abs 0x8cba 8cb4: 0b 5b rla r11 ; 8cb6: 1f 83 dec r15 ; 8cb8: fd 23 jnz $-4 ;abs 0x8cb4 j++; 8cba: 1a 53 inc r10 ; 8cbc: 3d 53 add #-1, r13 ;r3 As==11 8cbe: 0f 4c mov r12, r15 ; 8cc0: 0f 5d add r13, r15 ; 8cc2: 6f 4f mov.b @r15, r15 ; 8cc4: 8f 11 sxt r15 ; 8cc6: 3f 50 d0 ff add #-48, r15 ;#0xffd0 8cca: 1f 93 cmp #1, r15 ;r3 As==01 8ccc: 14 38 jl $+42 ;abs 0x8cf6 8cce: 02 12 push r2 ; 8cd0: 32 c2 dint 8cd2: 03 43 nop 8cd4: 82 4a 32 01 mov r10, &0x0132 ; 8cd8: 82 4f 38 01 mov r15, &0x0138 ; 8cdc: 1f 42 3a 01 mov &0x013a,r15 ;0x013a 8ce0: 32 41 pop r2 ; 8ce2: 0e 4f mov r15, r14 ; 8ce4: 0e 5e rla r14 ; 8ce6: 0e 5f add r15, r14 ; 8ce8: 0f 48 mov r8, r15 ; 8cea: 0e 93 cmp #0, r14 ;r3 As==00 8cec: 03 24 jz $+8 ;abs 0x8cf4 8cee: 0f 5f rla r15 ; 8cf0: 1e 83 dec r14 ; 8cf2: fd 23 jnz $-4 ;abs 0x8cee 8cf4: 0b 5f add r15, r11 ; 8cf6: 1a 53 inc r10 ; 8cf8: 3d 53 add #-1, r13 ;r3 As==11 8cfa: 0f 4c mov r12, r15 ; 8cfc: 0f 5d add r13, r15 ; 8cfe: 6f 4f mov.b @r15, r15 ; 8d00: 8f 11 sxt r15 ; 8d02: 3f 50 d0 ff add #-48, r15 ;#0xffd0 8d06: 1f 93 cmp #1, r15 ;r3 As==01 8d08: 14 38 jl $+42 ;abs 0x8d32 8d0a: 02 12 push r2 ; 8d0c: 32 c2 dint 8d0e: 03 43 nop 8d10: 82 4a 32 01 mov r10, &0x0132 ; 8d14: 82 4f 38 01 mov r15, &0x0138 ; 8d18: 1f 42 3a 01 mov &0x013a,r15 ;0x013a 8d1c: 32 41 pop r2 ; 8d1e: 0e 4f mov r15, r14 ; 8d20: 0e 5e rla r14 ; 8d22: 0e 5f add r15, r14 ; 8d24: 0f 48 mov r8, r15 ; 8d26: 0e 93 cmp #0, r14 ;r3 As==00 8d28: 03 24 jz $+8 ;abs 0x8d30 8d2a: 0f 5f rla r15 ; 8d2c: 1e 83 dec r14 ; 8d2e: fd 23 jnz $-4 ;abs 0x8d2a 8d30: 0b 5f add r15, r11 ; 8d32: 1a 53 inc r10 ; 8d34: 3d 53 add #-1, r13 ;r3 As==11 8d36: 7d 38 jl $+252 ;abs 0x8e32 8d38: 0f 4c mov r12, r15 ; 8d3a: 0f 5d add r13, r15 ; 8d3c: 6f 4f mov.b @r15, r15 ; 8d3e: 8f 11 sxt r15 ; 8d40: 3f 50 d0 ff add #-48, r15 ;#0xffd0 8d44: 1f 93 cmp #1, r15 ;r3 As==01 8d46: 14 38 jl $+42 ;abs 0x8d70 8d48: 02 12 push r2 ; 8d4a: 32 c2 dint 8d4c: 03 43 nop 8d4e: 82 4a 32 01 mov r10, &0x0132 ; 8d52: 82 4f 38 01 mov r15, &0x0138 ; 8d56: 1f 42 3a 01 mov &0x013a,r15 ;0x013a 8d5a: 32 41 pop r2 ; 8d5c: 0e 4f mov r15, r14 ; 8d5e: 0e 5e rla r14 ; 8d60: 0e 5f add r15, r14 ; 8d62: 0f 48 mov r8, r15 ; 8d64: 0e 93 cmp #0, r14 ;r3 As==00 8d66: 03 24 jz $+8 ;abs 0x8d6e 8d68: 0f 5f rla r15 ; 8d6a: 1e 83 dec r14 ; 8d6c: fd 23 jnz $-4 ;abs 0x8d68 8d6e: 0b 5f add r15, r11 ; 8d70: 0e 4a mov r10, r14 ; 8d72: 1e 53 inc r14 ; 8d74: 0f 4d mov r13, r15 ; 8d76: 0f 5c add r12, r15 ; 8d78: 5f 4f ff ff mov.b -1(r15),r15 ; 8d7c: 8f 11 sxt r15 ; 8d7e: 3f 50 d0 ff add #-48, r15 ;#0xffd0 8d82: 1f 93 cmp #1, r15 ;r3 As==01 8d84: 14 38 jl $+42 ;abs 0x8dae 8d86: 02 12 push r2 ; 8d88: 32 c2 dint 8d8a: 03 43 nop 8d8c: 82 4e 32 01 mov r14, &0x0132 ; 8d90: 82 4f 38 01 mov r15, &0x0138 ; 8d94: 1f 42 3a 01 mov &0x013a,r15 ;0x013a 8d98: 32 41 pop r2 ; 8d9a: 0e 4f mov r15, r14 ; 8d9c: 0e 5e rla r14 ; 8d9e: 0e 5f add r15, r14 ; 8da0: 0f 48 mov r8, r15 ; 8da2: 0e 93 cmp #0, r14 ;r3 As==00 8da4: 03 24 jz $+8 ;abs 0x8dac 8da6: 0f 5f rla r15 ; 8da8: 1e 83 dec r14 ; 8daa: fd 23 jnz $-4 ;abs 0x8da6 8dac: 0b 5f add r15, r11 ; 8dae: 0e 4a mov r10, r14 ; 8db0: 2e 53 incd r14 ; 8db2: 0f 4d mov r13, r15 ; 8db4: 0f 5c add r12, r15 ; 8db6: 5f 4f fe ff mov.b -2(r15),r15 ; 8dba: 8f 11 sxt r15 ; 8dbc: 3f 50 d0 ff add #-48, r15 ;#0xffd0 8dc0: 1f 93 cmp #1, r15 ;r3 As==01 8dc2: 14 38 jl $+42 ;abs 0x8dec 8dc4: 02 12 push r2 ; 8dc6: 32 c2 dint 8dc8: 03 43 nop 8dca: 82 4e 32 01 mov r14, &0x0132 ; 8dce: 82 4f 38 01 mov r15, &0x0138 ; 8dd2: 1f 42 3a 01 mov &0x013a,r15 ;0x013a 8dd6: 32 41 pop r2 ; 8dd8: 0e 4f mov r15, r14 ; 8dda: 0e 5e rla r14 ; 8ddc: 0e 5f add r15, r14 ; 8dde: 0f 48 mov r8, r15 ; 8de0: 0e 93 cmp #0, r14 ;r3 As==00 8de2: 03 24 jz $+8 ;abs 0x8dea 8de4: 0f 5f rla r15 ; 8de6: 1e 83 dec r14 ; 8de8: fd 23 jnz $-4 ;abs 0x8de4 8dea: 0b 5f add r15, r11 ; 8dec: 0e 4a mov r10, r14 ; 8dee: 3e 50 03 00 add #3, r14 ;#0x0003 8df2: 0f 4d mov r13, r15 ; 8df4: 0f 5c add r12, r15 ; 8df6: 5f 4f fd ff mov.b -3(r15),r15 ; 8dfa: 8f 11 sxt r15 ; 8dfc: 3f 50 d0 ff add #-48, r15 ;#0xffd0 8e00: 1f 93 cmp #1, r15 ;r3 As==01 8e02: 14 38 jl $+42 ;abs 0x8e2c 8e04: 02 12 push r2 ; 8e06: 32 c2 dint 8e08: 03 43 nop 8e0a: 82 4e 32 01 mov r14, &0x0132 ; 8e0e: 82 4f 38 01 mov r15, &0x0138 ; 8e12: 1f 42 3a 01 mov &0x013a,r15 ;0x013a 8e16: 32 41 pop r2 ; 8e18: 0e 4f mov r15, r14 ; 8e1a: 0e 5e rla r14 ; 8e1c: 0e 5f add r15, r14 ; 8e1e: 0f 48 mov r8, r15 ; 8e20: 0e 93 cmp #0, r14 ;r3 As==00 8e22: 03 24 jz $+8 ;abs 0x8e2a 8e24: 0f 5f rla r15 ; 8e26: 1e 83 dec r14 ; 8e28: fd 23 jnz $-4 ;abs 0x8e24 8e2a: 0b 5f add r15, r11 ; 8e2c: 2a 52 add #4, r10 ;r2 As==10 8e2e: 2d 82 sub #4, r13 ;r2 As==10 8e30: 83 37 jge $-248 ;abs 0x8d38 } return ret; } 8e32: 0f 4b mov r11, r15 ; 8e34: 38 41 pop r8 ; 8e36: 39 41 pop r9 ; 8e38: 3a 41 pop r10 ; 8e3a: 3b 41 pop r11 ; 8e3c: 30 41 ret -- ------------------------ Jeszcze lepsza oferta AlphaNet - nowe serwery wirtualne - nowy sklep internetowy - nowy wirtualny administrator Sprawdz www.alpha.pl ------------------------