# collatz fuer arm UNIX # cc -o collatz collatz.s .syntax unified .set limit,10000 .text .globl main main: push {r4,lr} movs r4,#1 // i 0: movs r0,r4 // j movs r2,#-1 // k 1: adds r2,r2,#1 // k++ movs r1,r0,LSR #1 // r1 = j / 2 ite cc movcc r0,r1 // if (j & 1 == 0) j = j / 2 adccs r0,r0,r0,LSL #1 // else j = 3 * j + 1 bne 1b // if (r1 != 0) goto 1; ldr r0,=msg movs r1,r4 bl printf // printf(msg, i, j); adds r4,r4,#1 ldr r0,=limit cmp r4,r0 bcc 0b movs r0,#0 pop {r4,pc} .size main,.-main .section .rodata msg: .string "Fuer %d wurden %d Iterationen benoetigt.\n" .size msg,.-msg .text .size main,.-main