# collatz fuer amd64 UNIX # cc -o collatz collatz.s .set limit,10000 .text .globl main .type main,@function main: push %rbx mov $1,%ebx # ebx: i 0: mov %ebx,%ecx # ecx: j mov $-1,%edx # edx: k 1: inc %edx lea 1(%rcx,%rcx,2),%edi # edi = 3 * j + 1 shr %ecx # ecx = j /= 2; cmovc %edi,%ecx # j = j & 1 ? edi : ecx; jnz 1b # if (ecx != 0) goto 1; .section .rodata msg: .string "Fuer %d wurden %d Iterationen benoetigt.\n" .size msg,.-msg .text xor %eax,%eax mov $msg,%edi mov %ebx,%esi call printf # printf(msg, i, k); inc %ebx # i++ cmp $limit,%ebx jb 0b # if (i < sum) goto 0; xor %eax,%eax pop %rbx ret .size main,.-main