;******************** ;* Main program * ;******************** `ORG 0 LOADL R7, 10000 ;inicijalizacija stoga LOADL R1, #LO BLOCK ;ucitaj adresu bloka LOADH R1, #HI BLOCK ; -||- LOAD R4, (LIMIT) ;ucitaj granicu bloka CLEAR R2 CLEAR R3 LOOP LOAD R0, (R1) ;ucitaj podatak CMP R0, R4 ;da li je kraj? JR_EQ END MOVE R0, R5 ;sacuvaj originalni podatak CALL MIRR1 ;pozovi potprogram SUB R0, R5, R0 ;oduzmi broj i zrcalnu kopiju JR_NN NOTN ;skoci ako nije negativan NEG R0 ;apsolutna vrijednost NOTN ADD R0, R2, R2 ;dodaj u sumu ADC 0, R3, R3 ;dodja carry ako ga je bilo INC R1 ;povecaj memorijski pokazivac JR LOOP END HALT ;********************* ;* Subroutine Mirror * ;********************* `ORG 50 MIRR1 PUSH R1 ;R1 treba za privremeni rezultat CLEAR R1 PUSH R2 ;R2 - brojac LOADL R2, %D 32 ;brojac broja operacija MIRLOOP ROTR 1, R0, R0 ;rotiraj udesno R0, 0-bit u carry ROTLnc 1, R1, R1 ;rotiraj ulijevo R1, carry na 0-bit ADC 0, R1, R1 ;dovuci carry u R1 DEC R2 ;smanji brojac JR_NZ MIRLOOP POP R2 MOVE R1, R0 ;kopiraj rezultat u R0 POP R1 RET `ORG 100 BLOCK `DW 0A00A0A0, 01111110, 0, 000FF000, 99999999 LIMIT `DW 99999999 `END