; Area Definition and Entry Point ; AREA SW, CODE, READONLY ARM EXPORT __main IMPORT serial_init IMPORT serial_get IMPORT serial_put IMPORT mjono __main ; alusta sarjaportti bl serial_init ldr r7, =mjono ; haetaan merkkijonon osoite rekisteriin r7 mov r5, #0 ; alustetaan laskuri (indeksi) mov r6, #0 ; alustetaan nolla entterille tallen bl serial_get ; haetaa merkin r0:aan strb r0, [r7, r5] ; tallennetaan r0 + laskuri cmp r0, #0x0D ; vertaillaan r0 vs 0 strbeq r6, [r7, r5] ; nolla enterin tilalle viimeiseksi merkiksi beq done ; jos tulee enter -> pois cmp r5, #80 ; verrataan r5 vs 80 bge done ; jos r5 <=80 -> pois add r5, r5, #1 ; kasvatetaan indeksiä yhdellä bne tallen ; jos eivät olleet yhtäsuuret palataan alkuun done mov r10, r5 ; tallenetaan viimeisen merkin indeksi mov r5, #0 ; alustetaan laskuri (indeksi) mov r8, #65 ; ladataan iso A mov r9, #90 ; ladataan iso Z mov r4, #32 ; tarvittavan siirron koko pienestä isoon tulos ldrb r0, [r7, r5] ; lataa merkin r7:n + laskurin muistipaikka sub r5, r5, #32 ; vähennetään laskurista 32 (ison ja pienen kirjaimen ero 32 desimaalia) cmp r0, r8 ; verrataan alarajaa blt jep ; jos on alle ison A:n niin tulostaa suoraan addge r6, r0, r4 ; muutetaan isoksi ja tallennetaan r6:seen cmp r0, r9 ; verrataan ylärajaan movle r0, r6 ; jos pienempi tai yhtäsuuri kuin Z niin muunnettu pieni kirjain r0:n paikalle jep bl serial_put ; tulostus cmp r5, r10 ; ollaanko lopussa beq done2 ; lopussa -> pois b tulos ; ei lopussa -> alkuun done2 ; ohjelman suoritus päättyi forever b forever END