Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Implementacja sortowania w asemblerze x51 - potrzebna pomoc

Arthas_m 13 Sty 2010 21:27 869 1
  • #1 13 Sty 2010 21:27
    Arthas_m
    Poziom 1  

    Czy moglby ktos zweryfikowac poprawnosc ponizszego kodu/poprawic go lub nakierowac mnie na rozwiazanie? Poniższy kod przedstawia probe zaimplementowania algorytmu sortowania przez WYBIERANIE. Niby znajduje najmniejsza wartosc w tablicy, zamienia w wpisuje na poczatek ale problem pojawia sie przy zapisywaniu na kolejnych indeksach tablicy po wybraniu kolejnej z minimalnych wartosci czyli ostatnie linijki w moim kodzie. W tablicy zadeklarowano 12 liczb zaczynajac od adresu 43H.

    Code:
    LOOP5:                     ;wyjsciowa petla - wykonuje przejscia
    
       MOV R5, #43H
        MOV R0, #43h         ;poczatek tablicy
       MOV A, R2               ;licznik dla R2
       MOV R1, A               ;ilosc liczb w tablicy
    LOOP7:   
         MOV A, @R5         ;pobranie liczby z tablicy, przeszukiwania
       MOV R3, A            ;i przechowuje w R3                     

    LOOP6:                  ;wewnetrzna petla - okresla przejscia
       

       INC R0            ;przejscie do nastepnej liczby
       MOV A, @R0         ;i wyslanie do akumulatora

       SUBB A, R3            ;odjecie pierwszej od drugiej

       JNC Continue3         ; jesli nie bylo przeniesienia to nie ma co przestawiac
                   ; druga wieksza od pierwszej
       MOV A, @R0            
       MOV R3,A         ;zapisuje mniejsza w aku
         MOV A, R0     ; zapisanie adresu mniejszej liczby
         MOV R1, A


    Continue3: DJNZ R2, LOOP6
         MOV A, @R5        ;zapisanie do akumulatora liczby na ktora wskazuje R0
         XCH A, R3         ;zamiana akumulatora i rejestru R3 w ktorym jest najmniejsza wartosc
        MOV @R5, A        ;wpisanie z akumulatora w miejsce w ktore wskazuje R5
       MOV A, R5         ;w R5 znajduje sie jakas wartosc ktora byla wczesniej w R5
         MOV @R1, A        ;wpisujemy ja w miejsce z ktorego pobralismy najmniejsza
         INC R5            ;przechodzimy do nastepnej
         DJNZ R2, LOOP7

    0 1
  • #2 13 Sty 2010 23:02
    Dr.Vee
    VIP Zasłużony dla elektroda

    I to Ci się kompiluje? Użycie R5 jako indeksu do RAM to dla mnie nowość... Tylko R0 i R1 mogą służyć do adresowania pośredniego.

    Użyj R0 jako wskaźnika na aktualny początek tablicy, R1 jako wskaźnika przebiegającego od R0 do końca tablicy i np. R2 jako wartości granicznej dla R0 i R1. Reszta to tylko 2 pętle i poszukiwanie minimum.

    Pozdrawiam,
    Dr.Vee

    0