Langage d'assemblage pour C

Donc, j'ai l'assemblage suivant le code de langue qui j'ai besoin de convertir en C. je suis confus sur quelques lignes de code.

Je comprends que c'est un for boucle. J'ai ajouté mes commentaires sur chaque ligne.

Je pense que le for boucle va comme ceci

for (int i = 1; i > 0; i << what?) {
    //Calculate result
}

Ce qui est la condition de test? Et comment puis-je le changer?

Regarder le code assembleur, ce que la variable 'n'?

C'est Intel x86 de sorte que le format movl = source, dest

  movl 8(%ebp), %esi     //Get x
  movl 12(%ebp), %ebx    //Get n
  movl $-1, %edi         //This should be result
  movl $1, %edx          //The i of the loop
.L2:
  movl %edx, %eax
  andl %esi, %eax
  xorl %eax, %edi        //result = result ^ (i & x)
  movl %ebx, %ecx        //Why do we do this? As we never use $%ebx or %ecx again
  sall %cl, %edx         //Where did %cl come from?
  testl %edx, %edx       //Tests if i != what? - condition of the for loop
  jne .L2                //Loop again
  movl %edi, %eax        //Otherwise return result.
testl %edx, %edx vérifie si edx est de 0. et puis jne - saut si pas de zéro.
Les lignes qui êtes-vous confus? En C, une boucle for for(;;) {}
Pourquoi êtes-vous convertissez asm en C?
Pourquoi traduire à intel de la syntaxe?
Mais ce n'est pas illisible, tout est essentiellement le même, à l'exception de la commande...

OriginalL'auteur Catie | 2010-10-24