TITLE "collatz.a -- explore the Collatz conjecture with Hawk" ; Note: for motivation, see 'Collatz conjecture' in Wikipedia USE "hawk.h" USE "stdio.h" USE "ascii.h" INT MAIN S MAIN ARSIZE = 4 MAIN: STORES R1,R2 ADDI R2,R2,ARSIZE ; main() { ; === start user code LIS R8,27 ; i = 27 LOOP: CMPI R8,1 ; -- R8 ? 1 BEQ QUIT ; while (i != 1) { MOVE R3,R8 ; -- parameter, number to print LIS R4,1 ; -- parameter, field width LIL R1,PUTDEC JSRS R1,R1 ; putdec( i, 1 ) LIS R3,LF ; -- parameter, character to print LIL R1,PUTCHAR JSRS R1,R1 ; putchar( '\n' ) LIS R3,1 AND R3,R8 ; -- i & 1 BEQ ELSE ; if ((i & 1) != 0) { /* i is odd */ ADDSL R8,R8,1 ; -- i*3 ADDSI R8,1 ; i = i*3 + 1 BR ENDIF ELSE: ; } else { /* i is even */ SR R8,1 ; i = i / 2 ENDIF: ; } BR LOOP QUIT: ; } /* end of loop */ MOVE R3,R8 ; -- parameter, number to print LIS R4,1 ; -- parameter, field width LIL R1,PUTDEC JSRS R1,R1 ; putdec( i. 1 ) LIS R3,LF ; -- parameter, character to print LIL R1,PUTCHAR JSRS R1,R1 ; putchar( '\n' ) ; === end user code ADDI R2,R2,-ARSIZE LOADS R1,R2 JUMPS R1 ; return END ; }