; 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 r26, 'n' ; printf("n? ");
LDI r24, 3
LDI r31, 0x70
LDI r30, 0x00
ICALL
LDI r26, '?'
LDI r24, 3
LDI r31, 0x70
LDI r30, 0x00
ICALL
LDI r26, ' '
LDI r24, 3
LDI r31, 0x70
LDI r30, 0x00
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