I have a string_length function that has the following assembly code
0x08048e90 <+0>: push %ebp
0x08048e91 <+1>: mov %esp,%ebp
0x08048e93 <+3>: mov 0x8(%ebp),%edx // assign whatever I declared into edx
0x08048e96 <+6>: mov $0x0,%eax // assign eax = 0
0x08048e9b <+11>: cmpb $0x0,(%edx) // compare edx to byte of 0 (null..?)
0x08048e9e <+14>: je 0x8048ea9 <string_length+25> // if equal, jump to +25
0x08048ea0 <+16>: add $0x1,%eax // else, add 1 to eax
0x08048ea3 <+19>: cmpb $0x0,(%edx,%eax,1) // compare byte 1*eax+edx with 0,
0x08048ea7 <+23>: jne 0x8048ea0 <string_length+16> // if not equal, back to +16
0x08048ea9 <+25>: pop %ebp // pop ebp
0x08048eaa <+26>: ret
Since the function name is string_length, I assume that it will return the number of characters in the string.
I am confused by the fact that
cmpb $0x0,(%edx)
is this a comparison of what is specified in edx for byte 0 and 0 in ASCII is null ..?
and
cmpb $0x0,(%edx,%eax,1)
compares in bytes 1 * eax + edx. If edx is a string, does this mean that edx first converts its ascii value and then performs the calculation?
source
share