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.

sortowanie liczb w asemblerze

sledziownik 15 Sty 2010 22:09 1824 8
  • #1 15 Sty 2010 22:09
    sledziownik
    Poziom 8  

    Witam mam do napisania w assemblerze program, który ma realizować następujące funkcje:
    - wprowadzenie przy pomocy terminala 6 liczb 3-cyfrowych z zakresu 0-255
    - znalezienie wartości maksymalnej i minimalnej
    - prezentacja otrzymanych wartości na ekranie

    muszę także ustawić prędkość transmisji szeregowej, ale z tym nie będzie kłopotu. Nie wiem jak zrealizować algorytm znajdywania wartości największej i najmniejszej. Proszę o pomoc

    0 8
  • #3 16 Sty 2010 18:01
    sledziownik
    Poziom 8  

    Dżyszla napisał:
    zmienna pomocnicza min=255 i max=0; jeśli wprowadzona wartość mniejsza od min - ustaw min na wprowadzoną wartość. Jeśli większa od max - ustaw max na wprowadzoną wartość.


    Czy można sprecyzować to troszeczke jaśniej. Może jakiś przykład? Wybitnym asem z programowania niestety nie jestem.

    0
  • #4 16 Sty 2010 18:59
    Dżyszla
    Poziom 42  

    chyba jaśniej się już nie da. :(

    max=max(a1,a2...an)=max(a1,max(a2,max(...,an)));

    czyli ideologia jest taka, że porównujesz wartość wprowadzoną z dotychczasową maksymalną (minimalną) i jeśli to konieczne - poprawiasz.

    0
  • #5 19 Sty 2010 18:36
    sledziownik
    Poziom 8  

    mam mały problem. muszę napisać program wczytujący z klawiatury 6 liczb 3 cyfrowych z zakresu 0 - 255 i wyświetleniu wartości najwiekszej i najmniejszej na terminalu. W swoim programie zatrzymałem się na wprowadzaniu i odbieraniu znaków z terminala natomiast pojęcia nie mam jak posortować liczby i wyświetlić na ekranie wartość największą i namniejszą. Znalazlem jakieś algorytmy sortowania ale niestety niewiele one mi mówią. Czy ma ktoś jakieś przykładowe programy w asemblerze realizujące powyższe zadanie?

    0
  • #7 19 Sty 2010 19:42
    sledziownik
    Poziom 8  

    no a mógłbyś podać jakiś przykład na wyświetlenie tej wartości maxymalnej i minimalnej? ale koniecznie na liczbie 3 cyfrowej. Nie umiem sobie z tym poradzić a nie znalazł się jeszcze taki mistrz ,co by mi wytłumaczył to na chłopski rozum a wykładowcy na uczelni przeprowadzają zajęcia w taki sposób jakbyśmy naprawdę dużo umieli.

    0
  • #9 19 Sty 2010 21:09
    sledziownik
    Poziom 8  

    Może zróbmy coś takiego. Poniżej zamieszczam program, który w nieskończonej pętli wysyła znaki na terminal. To jest narazie wszystko co udało mi się napisać z pomocą książek. Na samej górze tego programu zadeklarowałem tablicę, w której będę chciał przechować te 6 trzycyfrowych liczb. Czy pomółbyś mi rozbudować ten program w oparciu o Twój pomysł?

    $NOBUILTIN ;do not list predefined symbols (SFR)
    $NOMOD51 ;disable predefined 8051 registers
    $NOLIST ;listing off
    $INCLUDE(8052.MCU) ;include MCU definition file (e.g. 8052)
    $LIST ;listing on
    ;---------------------------------------------------------------------------------
    $TITLE(projekt) ;page header title
    ;---------------------------------------------------------------------------------


    ;---------------------------------------------------------------------------------
    DSEG AT 30H ;bit addressable absolute segment

    TABLICA: DS 6 ;TABLICA PRZECHOWUJĄCA LICZBY


    CSEG AT 0000H

    PORT SZEREGOWY:

    MOV SCON,#01010010B ;inicjalizacja portu szeregowego
    MOV TMOD,#00100000B ;TRYB 16 BITOWY
    MOV TH1,#0230D ;PRĘDKOŚĆ TRANSMISJI 2400 BODÓW
    MOV TL1,#0230D
    MOV TCON,#01000000B ;URUCHOMIENIE LICZNIKA T1

    MOV R1,#30H ;INDEKS TABLICY


    PETLA: LCALL ODBIERZ ;odbierz znak z klaw
    LCALL NADAJ
    SJMP PETLA
    NADAJ:

    JNB TI,$
    CLR TI
    MOV SBUF,R7
    RET

    ODBIERZ:

    JNB RI,$
    CLR RI
    MOV R7,SBUF
    RET


    END

    0