need help understanding the movzbl call in this function

20,158

A corresponding C function would be something like

char fn(char * string, int index)
{
    return string[index];
}

Specifically, the movzbl instruction fetches the byte stored at the sum of the two parameters, zero pads it, and stores it into eax. The movsbl instruction takes the lowest byte of eax, sign extends it, and stores the result back in eax.

Share:
20,158
Daniel Love Jr
Author by

Daniel Love Jr

Updated on July 09, 2022

Comments

  • Daniel Love Jr
    Daniel Love Jr almost 2 years

    So I'm trying to write some C code by looking at the assembly here:

    pushl   %ebp
    movl    %esp, %ebp
    movl    12(%ebp), %eax
    addl    8(%ebp), %eax
    movzbl  (%eax), %eax
    movsbl  %al,%eax
    popl    %ebp
    ret
    

    I see that I have two variables, and they are being added together, then I'm getting lost when looking when the function starts calling movzbl and movesbl. What's going on here?