; i in r16 ; r17 used for temporary values ; j in r18 ; array numbers starting at 0x100 LDI r16, 0 ; i = 0 L1: ; while (1) { LDI r24, 3 ; printf("n? "); LDI r31, 0x70 LDI r30, 0x00 LDI r26, 'n' ICALL LDI r26, '?' ICALL LDI r26, ' ' ICALL LDI r24, 4 ; scanf("%d", &numbers[i]); LDI r31, 0x70 LDI r30, 0x00 ICALL LDI r29, 1 MOV r28, r16 STD Y+0, r24 AND r24, r24 ; if (numbers[i] < 0) break; BRBS 2, BREAK LDI r17, 1 ADD r16, r17 ; i++ LDI r31, hi8(pm(L1)) LDI r30, lo8(pm(L1)) IJMP BREAK: LDI r18, 0 ; j = 0 L2: MOV r17, r18 ; while (j < i) SUB r17, r16 BRBC 2, exit LDI r24, 1 ; printf("%d\n", numbers[j]); LDI r29, 1 MOV r28, r18 LDD r26, Y+0 LDI r31, 0x70 LDI r30, 0x00 ICALL LDI r17, 1 ADD r18, r17 ; j++ LDI r31, hi8(pm(L2)) LDI r30, lo8(pm(L2)) IJMP exit: LDI r24, 0 ; exit LDI r31, 0x70 LDI r30, 0x00 ICALL