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
------------------------