.text .org 0x20 izvorna_koda: .asciz " \n\n stev1: .var 0xf123 @ komentar 1\n @prazna vrstica \n stev2: .var 15 \nstev3: .var 128\n_start:\n mov r1, #5 @v r1 premakni 5\nmov r2, #1\nukaz3: add r1, #1\nb _start" .align buffer: .byte .align izvorna_koda_pocisceno: .space 120 .align tabela_oznak: .space 100 .align .global _start _start: @ vas program napisite tu! @ pocistimo registre, ker jih cpulator ne mov r0, #0 mov r1, #0 mov r2, #0 mov r3, #0 ADR R0, izvorna_koda ADR R2, izvorna_koda_pocisceno SUB R0, R0, #1 @ da lahko pri iteraciji cez adreso zacnemo pri nicli SUB R2, R2, #1 @ tukaj bomo vrgli ven \n, whitespace dokler ne dosezemo prvega "proper" znaka PRECISTI_ZACETEK: LDRB R1, [R0, #1]! CMP R1, #32 @ presledek BEQ PRECISTI_ZACETEK CMP R1, #10 @ \n BEQ PRECISTI_ZACETEK CMP R1, #13 @ cr BEQ PRECISTI_ZACETEK SUB R0, R0, #1 PRECISCEVANJE: LDRB R1, [R0, #1]! CMP R1, #0 BEQ PREPISI_KODO @ pogledamo za presledek CMP R1, #32 @ presledek BEQ PRESLEDEK_KOMENTAR @ pogledamo za @ CMP R1, #64 BEQ KOMENTAR @ pogledamo za novo vrstico CMP R1, #10 BEQ NEWLINE_PRVIC CMP R1, #13 BEQ NEWLINE_PRVIC B POSODOBI_PRECISCENO PRESLEDEK_KOMENTAR: @ ce je naslednji znak @ ga ne zapisi LDRB R3, [R0, #1] @ pogledamo za @ CMP R3, #64 BEQ PRECISCEVANJE STRB R1, [R2, #1]! B PRECISCEVANJE KOMENTAR: @ iteracija do \n znaka da vidimo in prepisemo komentar z nulami LDRB R1, [R0, #1]! @ preverimo ali je nova vrstica CMP R1, #10 @ verjetno treba posodobiti, da ne bo neposrednih onelinerjev BEQ KOMENTAR_EOL @ isto ampak za cr CMP R1, #13 BEQ KOMENTAR_EOL B KOMENTAR KOMENTAR_EOL: LDRB R3, [R2] @ ce je prejsnji znak \n potem ne bomo vstavili se enega CMP R3, #10 @ pogledamo za novo vrstico BEQ NEWLINE CMP R3, #13 @ pogledamo za cr BEQ NEWLINE STRB R1, [R2, #1]! B NEWLINE NEWLINE_PRVIC: LDRB R3, [R2] @ ce je prejsnji znak \n potem ne bomo vstavili se enega CMP R3, #10 @ pogledamo za novo vrstico BEQ NEWLINE CMP R3, #13 @ pogledamo za cr BEQ NEWLINE @ prvi newline char prepisemo preostale pobrisemo STRB R1, [R2, #1]! NEWLINE: @ ko dobimo \n pocisti vse whitespacee @ mislim da tukaj ne pocisti LDRB R1, [R0, #1]! CMP R1, #32 @ presledek BEQ NEWLINE SUB R0, R0, #1 B PRECISCEVANJE POSODOBI_PRECISCENO: STRB R1, [R2, #1]! B PRECISCEVANJE PREPISI_KODO: ADR R0, izvorna_koda ADR R2, izvorna_koda_pocisceno SUB R0, R0, #1 SUB R2, R2, #1 ZANKA_PREPIS: LDRB R3, [R2, #1]! CMP R3, #0 BEQ ZAKLJUCEK STRB R3, [R0, #1]! B ZANKA_PREPIS ZAKLJUCEK: MOV R3, #0 STRB R3, [R0, #1]! _end: b _end