148 lines
2.5 KiB
ArmAsm
148 lines
2.5 KiB
ArmAsm
.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 |