Assemblersprache nach C

8

Also habe ich den folgenden Assembler-Code, den ich in C konvertieren muss. Ich bin in einigen Zeilen des Codes verwirrt.

Ich verstehe, dass dies eine for -Schleife ist. Ich habe meine Kommentare zu jeder Zeile hinzugefügt.

Ich denke, die for -Schleife geht so

%Vor%

Was ist die Testbedingung? Und wie ändere ich es?

Was macht die Variable 'n' im Assemblercode?

Dies ist Intel x86, also ist das Format movl = source, dest

%Vor%     
Catie 24.10.2010, 12:17
quelle

1 Antwort

14

sall %cl, %edx verschiebt% edx links von %cl bits. ( %cl , als Referenz, ist das Low-Byte von %ecx .) Das folgende testl testet, ob diese Verschiebung% edx. auf Null gesetzt hat.

Das jne heißt so, weil es oft im Kontext von Vergleichen verwendet wird, die in ASM oft nur Subtraktionen sind. Die Flags würden basierend auf dem Unterschied gesetzt werden; ZF würde gesetzt werden, wenn die Items gleich sind (seit x - x == 0). In der Intel-Syntax wird es auch jnz genannt. Ich bin mir nicht sicher, ob GNU das auch erlaubt.

Insgesamt werden die drei Anweisungen in i <<= n; if (i != 0) goto L2; übersetzt. Das und die Beschriftung scheinen eine for-Schleife zu bilden.

%Vor%

Oder, richtiger (aber das gleiche Ziel erreichend), eine do ... while-Schleife.

%Vor%     
cHao 24.10.2010, 12:37
quelle

Tags und Links