Ho un breve pezzo di (x86) assemblaggio che sto cercando di capire cosa fa.Nell'assemblaggio x86, come è possibile impostare il flag di zero (ZF) senza eseguire un'operazione di confronto?
...
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
....
Sembra suo loop se fino alla "JNE" restituisce false, cioè il flag zero = 0. (possibilmente sua messa i numeri 1, 2, 3 ... nella pila ??)
Dalla mia breve indagine sull'assemblaggio (im nuovo a questo) è necessario impostare il flag di zero eseguendo un'operazione di confronto (CMP), ma non vedo un'operazione di confronto.
Quindi, in quali condizioni uscirà da questo ciclo?
Ok, questo ha senso. Grazie! – Robert
Penso di aver seguito tutto ciò tranne per "mov% cl, (% esp,% ecx, 1)". In inglese direi "sposta gli 8 bit più bassi di CX (CL) nella RAM all'indirizzo ESP + ECX", che ha senso, ma quale è l'operando '1'? Questo è veramente 'array [cl + 1] = cl' (stack overflow?) O forse' array [cl] = cl + 1'? Probabilmente mi manca qualche sfumatura dell'assemblaggio x86, ma sono curioso. – mpontillo
L'1 è in realtà una dimensione con cui ridimensionare l'offset. Quindi il suo vero array [cl * 1] = cl. –