besoin d'aide pour comprendre le movzbl appel à cette fonction
Donc je suis en train d'écrire du code C en regardant l'assemblée ici:
pushl %ebp
movl %esp, %ebp
movl 12(%ebp), %eax
addl 8(%ebp), %eax
movzbl (%eax), %eax
movsbl %al,%eax
popl %ebp
ret
Je vois que j'ai deux variables, et ils sont additionnés, puis je suis perdu lors de la recherche lorsque la fonction commence à appeler movzbl et movesbl. Ce qui se passe ici?
double possible de Ce qui ne l'MOVZBL instruction n'en IA-32 AT&T syntaxe?
OriginalL'auteur Daniel Love Jr | 2014-06-16
Vous devez vous connecter pour publier un commentaire.
Un correspondant de la fonction C serait quelque chose comme
Plus précisément, le
movzbl
instruction récupère l'octet stocké à la somme des deux paramètres à zéro, les plaquettes, et les stocke danseax
. Lemovsbl
l'instruction prend le plus faible de l'octet de eax, signe l'étend, et stocke le résultat dans eax.En assembleur, en général, vous ne savez pas ce jusqu'à ce que vous voyez la façon dont le résultat est utilisé. Ici, vous voyez qu'il y est un moyen indirect de la charge de la suite, si elle doit avoir été un pointeur, donc l'un des deux paramètre doit avoir été un pointeur, et de l'autre un nombre entier de la même taille (il est impossible de dire à partir de cet extrait de code qui est qui).
Oui, le
addl
combine le pointeur et l'index.Ah ok, donc, ce qu'il essaie de faire quelque chose comme ce que vous avez écrit, qu'il tente d'obtenir un caractère particulier dans une chaîne de caractères?
Techniquement, il n'est pas nécessairement un caractère, tout ce que nous savons, c'est qu'il a été signé 8 bits, mais sur de nombreux systèmes, un personnage pourrait correspondre à ce profil.
OriginalL'auteur microtherion