Así que tengo el siguiente código de lenguaje ensamblador que necesito convertir a C. Estoy confundido en algunas líneas del código.Lenguaje ensamblador a C
Entiendo que este es un bucle for
. He agregado mis comentarios en cada línea.
creo que el bucle for
es la siguiente
for (int i = 1; i > 0; i << what?) {
//Calculate result
}
¿Cuál es la condición de prueba? ¿Y cómo lo cambio?
Mirando el código de ensamblaje, ¿qué hace la variable 'n'?
Este es Intel x86 por lo que el formato es fuente movl =, 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 comprueba si edx es 0. y luego jne - jump if not zero. –
¿Qué líneas te confunden? En C, un bucle for es para (;;) {} –
¿Por qué está convirtiendo el ASM heredado en C? –