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

[Assembler] Sortowanie danych.

08 Maj 2004 15:46 2598 3
  • Poziom 10  
    Jestem początkujący i mam pewnien proble a miianowicie nie wiem jak zrobić aby od adresu ds 100 do ds 400 posortować wartości w kolejności rosnącej. jak narazie to tylko umiem to zrobić sposobem kopiowania ale to za długo trwa. :(

    Zamykam. - arnoldziq
  • Poziom 27  
    proponuję metodą bąbelkową - szybko, łatwo i przyjemnie. Procedurka w C:

    for(k=0; k<sort_range; k++)
    for(l=0; l<sort_range; l++)
    if (buffer[l]>buffer[l+1]) {
    tmp = buffer[l];
    buffer[l] = buffer[l+1];
    buffer[l+1] = tmp;
    }

    Proponuję skompilować i podglądnąć okienko Deassembly. A jeśli chodzi Ci o prędkość działania, to należałoby zastosoawać inny algorytm oraz wspomożenie się instrukcjami SSE, które w tym przypadku mogą znacznie przyspieszyć sortowanie.
  • Poziom 14  
    Cytat:
    jak narazie to tylko umiem to zrobić sposobem kopiowania ale to za długo trwa
    Nie wiem czy istnieje sposób sortowania sposobem kopiowaniem. Sortować można same komórki lub w przypadku sortowania łańcuchów wskaźniki na te łańcuchy.
    Załączam materiały o sposobach sortowania.
  • Poziom 10  
    Gavian napisał:
    Cytat:
    jak narazie to tylko umiem to zrobić sposobem kopiowania ale to za długo trwa
    Nie wiem czy istnieje sposób sortowania sposobem kopiowaniem. Sortować można same komórki lub w przypadku sortowania łańcuchów wskaźniki na te łańcuchy.
    Załączam materiały o sposobach sortowania.

    Żle się wyraziłem chodzi o to że ustawiam wartości np w adresie ds 0001 i je przekopiowuje. Ewentualnie umiem także sortować na różne sposoby, coś poprzestawiać tylko akurat tego zadania nie mogę pojać.

    mam nawet coś takiego
    RUN START

    A: DAT 10 ;element 1 ;tablica elementów do posortowania
    DAT 5 ;element 2
    DAT 3 ;element 3
    DAT 2 ;element 4
    DAT 8 ;element 5
    DAT 9 ;element 6
    DAT 6 ;element 7
    DAT 7 ;element 8
    DAT 4 ;element 9
    DAT 1 ;element 10

    T: DAT 0 ;używane przy wymianie zawartości
    P: DAT 0 ;znacznik posortowania zbioru
    I: DAT 0 ;zmienne licznikowe pętli
    J: DAT 0

    DPTR: DAT 0 ;wskazanie tablicy

    START: LDA #1 ;ustawiamy znacznik p na 1
    STA P
    LDA #9 ;obliczamy liczbę obiegów pętli wew.
    SUB I
    STA J
    LDA #A ;ustawiamy wskazanie na pierwszy element
    STA DPTR
    L1: LDA (DPTR++) ;pobieramy element J-ty
    STA T ;zapamiętujemy go chwilowo
    LDA (DPTR++) ;pobieramy element (J+1)-szy
    SUB T ;sprawdzamy, czy a[j] > a[j+1]
    JMI #EXCH ;zamiana, jeśli tak
    L2: LDA (--DPTR) ;cofamy wskazanie
    LDA J ;sprawdzamy, czy pętla wykonana
    SUB #1 ;zadaną liczbę razy
    STA J
    JZR #L3
    JMP #L1
    L3: INC I
    LDA P ;jeśli zbiór nie jest posortowany, to
    JZR #START ;kontynuujemy
    JMP #0 ;inaczej kończymy
    EXCH: LDA (--DPTR) ;wymieniamy a[j] z a[j+1]
    STA P
    LDA (--DPTR)
    LDA P
    STA (DPTR++)
    LDA T
    STA (DPTR++)
    LDA #0 ;zerujemy znacznik posortowania
    STA P
    JMP #L2