[Sort] Getallen sorteren in Assembly

Status
Niet open voor verdere reacties.

knetters

Nieuwe gebruiker
Lid geworden
27 okt 2011
Berichten
1
Hallo luitjes,

Ik ben bezig met een opdracht voor school. Nu denk je vast weer die dropt effe zijn vraag er op en dan is hij weg. Maar dat is dus niet de bedoeling. Ik heb zelf al research gedaan in meerdere sorteer algoritmes en deze proberen toe te passen in assembler. Maar ik krijg dit niet voor elkaar. Terwijl ik in de taal C het wel voor elkaar krijg.

Ook heb bij de bubble sort gebruikt gemaakt van een voorbeeld van AVR. Dit is ook de hardware waar ik mee ga werken. Ik heb dit voorbeeld uit elkaar gepluisd maar ik snap het nog steeds niet. Ook heb ik een C-Code geschreven en deze vervolgens laten debuggen om te kijken wat de output in assembler is. Maar ook dit werd mij niet goed duidelijk.
Is er iemand die ooit met sorteer algoritmes heeft gewerkt op dit forum. En zou deze misschien willen toe lichten hoe deze in zijn werk gaat.

Alvast bedankt.

Link:
Algoritmes:
http://nl.wikipedia.org/wiki/Sorteeralgoritme
Bubble sort AVR:
http://www.gaw.ru/pdf/Atmel/app/avr/AVR220.pdf
Bijbehorende voorbeeld:
http://avr.15.forumer.com/a/how-to-bubble-sort-avr-asm_post1128.html
 
Ik heb zelf al research gedaan in meerdere sorteer algoritmes en deze proberen toe te passen in assembler. Maar ik krijg dit niet voor elkaar. Terwijl ik in de taal C het wel voor elkaar krijg.

Ook heb bij de bubble sort gebruikt gemaakt van een voorbeeld van AVR. Dit is ook de hardware waar ik mee ga werken. Ik heb dit voorbeeld uit elkaar gepluisd maar ik snap het nog steeds niet. Ook heb ik een C-Code geschreven en deze vervolgens laten debuggen om te kijken wat de output in assembler is. Maar ook dit werd mij niet goed duidelijk.

[cpp]
bubble:
mov ZL,endL
mov ZH,endH ;init Z pointer
mov cnt2,cnt1;counter2 <- counter1
i_loop:
ld A,Z ;get first byte, A (n)
ld B,-Z ;decrement Z and get second byte, B (n-1)
cp A,B ;compare A with B
brlo L1 ;if A not lower
st Z,A ; store swapped
std Z+1,B
L1:
dec cnt2
brne i_loop ;end inner loop
dec cnt1
brne bubble ;end outer loop
ret
[/cpp]

Maar wat begrijp je dan niet precies aan het voorbeeld? Ik heb zelf geen ervaring met AVR assembly, maar het voorbeeld dat je post lijkt me vrij duidelijk. Aangezien je C wel begrijpt is hier mijn interpretatie in C:

[cpp]
void bubblesort(int *arr, int length)
{
int bubble, i_loop;
for (bubble = length; bubble; --bubble)
{
int *p = &arr[length-1];

for (i_loop = bubble; i_loop; --i_loop)
{
int a = *p;
int b = *--p;

if (a >= b) continue;

*p = a;
*(p + 1) = b;
}
}
}
[/cpp]
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan