--------------------<<>>----------------------- ---------------------------------------------------------------------------- ----------------------------- Initialization ------------------------------- MV AC, $00 --> 0000 0000 - 000 000 00 --> 00 00 // AC = 0 ;| i: $0F ST [$0F], AC --> 0000 1111 - 110 000 10 --> 0F C2 // i = AC ;| i <- 0 / MV X, $00 --> 0000 0000 - 000 100 00 --> 00 10 // x = 0 ;| ST [X], $01 --> 0000 0001 - 110 001 00 --> 01 C4 // tab[x] = 1 ;| trem-0 <- 1 LD OUTxx, [Y,X] --> 0000 0000 - 000 111 01 --> 00 1D // out(tab[x++]) ;| ST [X], $01 --> 0000 0001 - 110 001 00 --> 01 C4 // tab[x] = 1 ;| trem-1 <- 1 ----------------------------- principal loop ------------------------------- while : |while:$06 INPUT AC --> 0000 0000 - 000 000 11 --> 00 03 // AC = IN ; | SUB AC, [$0F] --> 0000 1111 - 101 000 01 --> 0F A1 // AC = AC - i ; |while(IN > i) BLE $14 --> 0001 0100 - 111 110 00 --> 14 F8 // if (IN <= i) exit(0);|exit: $14 NOP --> 0000 0000 - 000 000 10 --> 00 02 // NOP ; |pipeline nop after every jmp LD X, [$0F] --> 0000 1111 - 000 100 01 --> 0F 11 // X = i ;| i index of term(i) LD AC, [X] --> 0000 0000 - 000 001 01 --> 00 05 // AC = tab[X] ;| CLR OUTxx --> 0000 0000 - 011 111 10 --> 00 7E // out(0), X++ ;| ADD AC, [X] --> 0000 0000 - 100 001 01 --> 00 85 // AC = AC+tab[X];| term(i+2)<-term(i+1)+term(i) MV OUTxx,AC --> 0000 0000 - 000 111 10 --> 00 1E // out(AC) ; X++ ;| display(term(i+2)) , x++ ST [X], AC --> 0000 0000 - 110 001 10 --> 00 C6 // tab[x] = AC ;| LD AC, [$0F] --> 0000 1111 - 000 000 01 --> 0F 01 // AC = i ;| ADD AC, $01 --> 0000 0001 - 100 000 00 --> 01 80 // AC++ ;| i++ ST [$0F], AC --> 0000 1111 - 110 000 10 --> 0F C2 // i = AC ;| B $06 --> 0000 0110 - 111 111 00 --> 06 FC // jmp while ;| while: $06 ------------------------------- end program -------------------------------- exit : NOP --> 0000 0000 - 000 000 10 --> 00 02 // exit(0) ;| exit: $14 ----------------------------------------------------------------------------