2024-10-08

bevor, ich jetzt mit dem Teiler weiter mache und dem software div befehl, schreibe ich zunaechst ein Assembler Programm, fuer den AVR, was am LCD eine sortierte Zeichenkette ausgibt.

.include "m8def.inc"

ldi r16, HIGH (RAMEND)
out SPH, r16
ldi r16, LOW (RAMEND)
out SPL, r16

ldi r16, 0xff
out DDRD, r16

           rcall lcd_init     ;Display initialisieren
           rcall lcd_clear    ;Display löschen

ldi ZH, HIGH(sortstr)
ldi ZL, LOW(sortstr)

ldi r16, 0
ldi r17, 'a'
loop1:
st Z+, r17
inc r17
inc r16
cpi r16, 16
brlt loop1

ldi ZH, HIGH (sortstr)
ldi ZL, LOW (sortstr)

ldi r19, 0
loop2:
ld r16, Z+
rcall lcd_data
inc r19
cpi r19, 16
brlt loop2

.def temp1 = r16
.def temp2 = r17
.def temp3 = r18

.include "lcd-routines.asm"

.dseg

sortstr: .byte 16

so, das programm tut Bisher sind sie noch nicht sortiert und ich muss noch kurz aufräumen dann sortiere ich sie. Sie sind sortiert, weil ich sie so rauf gezählt eingegeben habe, aber ich sortier sie umgekehrt herum.

.include "m8def.inc"

ldi r16, HIGH (RAMEND)
out SPH, r16
ldi r16, LOW (RAMEND)
out SPL, r16

ldi r16, 0xff
out DDRD, r16

           rcall lcd_init     ;Display initialisieren
           rcall lcd_clear    ;Display löschen

ldi ZH, HIGH(sortstr)
ldi ZL, LOW(sortstr)

ldi r16, 0
ldi r17, 'a'
loop1:
st Z+, r17
inc r17
inc r16
cpi r16, 16
brlt loop1

ldi ZH, HIGH (sortstr)
ldi ZL, LOW (sortstr)
ldi r20, 0
loop3:
ldi r21, 0
mov YH, ZH
mov YL, ZL
loop4:
ld r16, Z
ld r17, Y
cp r16, r17
brge noexchange
ld r16, Z
ld r17, Y
st Z, r17
st Y, r16
noexchange:
ld r16, Y+
inc r21
cpi r21, 16
brlt loop4
ld r17, Z+
inc r20
cpi r20, 16
brlt loop3

ldi ZH, HIGH (sortstr)
ldi ZL, LOW (sortstr)

ldi r19, 0
loop2:
ld r16, Z+
rcall lcd_data
inc r19
cpi r19, 16
brlt loop2

.def temp1 = r16
.def temp2 = r17
.def temp3 = r18

.include "lcd-routines.asm"

.dseg

sortstr: .byte 16

Image IMG_3571

Image IMG_3573

Image IMG_3574

Image IMG_3575

Image IMG_3576

Image IMG_3577