Quellcode zusammengestellt:Die Regel der jne in Code von klirren
int main(int argc, const char * argv[]) {
do {
printf("heihei");
}while (1 < 2);
return 0;}
Zusammengestellt:
LBB0_1: ## =>This Inner Loop Header: Depth=1
leaq L_.str(%rip), %rdi
movb $0, %al
callq _printf
movl %eax, -20(%rbp) ## 4-byte Spill
movb $1, %al
testb $1, %al
jne LBB0_1
jmp LBB0_3
LBB0_3:
Offensichtlich ist dies do-while-Schleife ist unendlich. Meiner Meinung nach würde testb $ 1,% al ZF auf 1 setzen. Da jne nur springt, wenn ZF 0 ist (jne: Sprungoption: ~ ZF), wie kommt es, dass der Fluss zurück zu LBB0_1 springt?
Btw, haben Sie eine Empfehlung für Bücher zum Lernen Clang generiert Assembler-Code und alle anderen verwandten Inhalten? (Speziell von Objective-C-Code)
Welchen Unterschied macht der Compiler? Offensichtlich werden verschiedene Compiler (und Optionen) anderen Code erzeugen, aber am Ende des Tages ist es eine Frage des Verständnisses des Assemblers. – trojanfoe