comprendre cmpb et boucles en langage d'assemblage

J'ai une fonction string_length qui a la séance suivante 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

Depuis le nom de la fonction est string_length, je suis en supposant qu'il sera de retour la façon dont beaucoup de caractères dans la chaîne.

ce que je suis confus au sujet de qui est le

cmpb   $0x0,(%edx)

est-ce comparaison de tout ce qui est souligné edx à l'octet de 0, et 0 en ASCII est nul..?

et

cmpb   $0x0,(%edx,%eax,1)

est de comparer, en octets, 1*eax+edx. Si edx est une chaîne de caractères, est-ce à dire edx va d'abord être converti sa valeur ascii, puis effectuer le calcul?

OriginalL'auteur user3277633 | 2014-04-02