# collatz fuer arm64 UNIX # cc -o collatz collatz.s .set limit,10000 .text .globl main main: stp x19,x30,[sp,#-16]! mov x19,#1 // i = 1; 0: mov x0,x19 // j = i; mov x2,#-1 // k = -1; 1: add x2,x2,#1 // k++; asr x1,x0,#1 // x1 = j >> 1; add x0,x0,x0,LSL #1 // x0 = 3 * j; tst x0,#1 // if (x0 & 1) csinc x0,x1,x0,ne // j = x0 + 1; else j = x1; cbnz x1,1b // if (x1 != 0) goto 1; ldr x0,=msg mov x1,x19 bl printf // printf(msg, i, k); add x19,x19,#1 // i++ mov x0,#limit cmp x19,x0 // if (x19 < limit) bcc 0b // goto 0b; mov x0,#0 ldp x19,x30,[sp],#16 br x30 .size main,.-main .section .rodata msg: .string "Fuer %d wurden %d Iterationen benoetigt.\n" .size msg,.-msg .text .size main,.-main