All pastes #262463 Raw Edit

Untitled

public text v1 · immutable
#262463 ·published 2006-11-30 15:40 UTC
rendered paste body
; 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