The textbook's assembly code for problem 3.63 is indirect and potentially confusing. Below is IA32 assembly code generated for the same C code with a different version of GCC, using two optimization levels. [ -O1 ] movl 8(%ebp), %eax leal (%eax,%eax), %edx leal (%edx,%eax), %ecx leal 1(%edx), %eax movl $0, %esi testl %eax, %eax jle L4 leal 0(,%ecx,4), %ebx movl 16(%ebp), %eax movl 12(%ebp), %esi leal (%esi,%eax,4), %ecx movl $0, %eax movl $0, %esi incl %edx L5: addl (%ecx), %esi incl %eax addl %ebx, %ecx cmpl %edx, %eax jne L5 L4: movl %esi, %eax [ -O2 ] movl 8(%ebp), %edx leal (%edx,%edx), %eax leal 1(%eax), %esi xorl %ebx, %ebx testl %esi, %esi jle L4 addl %edx, %eax sall $2, %eax movl 16(%ebp), %ecx movl 12(%ebp), %edi leal (%edi,%ecx,4), %edx xorl %ecx, %ecx L5: addl (%edx), %ebx incl %ecx addl %eax, %edx cmpl %esi, %ecx jne L5 L4: movl %ebx, %eax