Tengo una pieza corta de ensamblaje (x86) que estoy tratando de descubrir qué hace.En el ensamblaje x86, ¿cómo se puede establecer el indicador de cero (ZF) sin realizar una operación de comparación?
...
6: 81 ec 00 01 00 00 sub $0x100, %esp
c: 31 c9 xor %ecx , %ecx
e: 88 0c 0c mov %cl , (%esp, %ecx, 1)
11: fe c1 inc %cl
13: 75 f9 jne 0xe
....
Parece que su bucle aunque hasta que el "JNE" se evalúa como falsa, es decir, la bandera cero = 0. (posiblemente su puesta los números 1, 2, 3 ... en la pila ??)
De mi breve investigación sobre el ensamblaje (estoy de nuevo en esto), seam establece el indicador de cero haciendo una operación de comparación (CMP), pero no veo una operación de comparación.
Entonces, ¿bajo qué condiciones saldrá de este circuito?
Ok, esto tiene sentido. ¡Gracias! – Robert
Creo que seguí todo eso excepto 'mov% cl, (% esp,% ecx, 1)'. En inglés diría "mueva los 8 bits inferiores de CX (CL) a la RAM en la dirección en ESP + ECX", lo cual tiene sentido, pero ¿cuál es el operando '1'? ¿Es esto realmente 'array [cl + 1] = cl' (stack overflow?) O quizás' array [cl] = cl + 1'? Probablemente me faltan algunos matices de ensamblaje x86, pero tengo curiosidad. – mpontillo
El 1 es realmente un tamaño por el cual escalar el desplazamiento. Entonces es realmente una matriz [cl * 1] = cl. –