Both the movsbl and the movzbl instruction serve to copy a byte and to set the remaining bits in the
destination. The movsbl instruction takes a single-byte source operand, performs a sign extension to 32
bits (i.e., it sets the high-order 24 bits to the most significant bit of the source byte), and copies this to a
double-word destination. Similarly, the movzbl instruction takes a single-byte source operand, expands it
to 32 bits by adding 24 leading zeros, and copies this to a double-word destination.
Aside: Comparing byte movement instructions.
Observe that the three byte movement instructions movb, movsbl, and movzbl differ from each other in subtle
ways. Here is an example:
In these examples, all set the low-order byte of register %eax to the second byte of %edx. The movb instruction
does not change the other three bytes. The movsbl instruction sets the other three bytes to either all ones or all
zeros depending on the high-order bit of the source byte. The movzbl instruction sets the other three bytes to all
zeros in any case. End Aside.