Code: Select all
int conv_binary(const char *str, const char *end)
{
int result = 0;
while (str < end {
result *= 2;
if (*str == '1')
result++;
str++;
}
return result;
}
Code: Select all
int conv_binary(const char *str, const char *end)
{
int result;
while (str < end) {
if (*str++ == '1')
result++;
}
}
Assembly code generated on an i486
Code: Select all
_conv_binary:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl $0, -4(%ebp)
L3:
movl 8(%ebp), %eax
cmpl 12(%ebp), %eax
jae L4
movl -4(%ebp), %eax
addl %eax, %eax
movl %eax, -4(%ebp)
movl 8(%ebp), %eax
cmpb $49, (%eax)
jne L5
leal -4(%ebp), %eax
incl (%eax)
L5:
incl 8(%ebp)
jmp L3
L4:
movl -4(%ebp), %eax
leave
ret
Code: Select all
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl $0, -4(%ebp)
L3:
movl 8(%ebp), %eax
cmpl 12(%ebp), %eax
jae L4
movl -4(%ebp), %eax
addl %eax, %eax
movl %eax, -4(%ebp)
movl 8(%ebp), %eax
incl 8(%ebp)
cmpb $49, (%eax)
jne L3
leal -4(%ebp), %eax
incl (%eax)
jmp L3
L4:
movl -4(%ebp), %eax
leave
ret