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

Asembler - zapisywanie liczby trzycyfrowej

05 Paź 2007 15:30 1916 23
  • Poziom 20  
    Potrezbuje napisać program w asemblerze zapisujacy liczbe trzycyfrowa Mam zapisać liczbe 172
    R0 - od 0 do 256
    R1 - jednosci 2
    R2 - dziesiatki 7
    R3 - setki 1

    Moze zna ktos stronke gdzie jest napisane krok po kroku jak pisac taki program w asemblerze
  • Pomocny dla użytkowników
    To znaczy masz zrobić konwersję binarną na BCD ?

    R0 - od 0 do 256
    R1 - jednosci 2
    R2 - dziesiatki 7
    R3 - setki 1

    Algorytm 1:

    Code:
    start:
    

    R0:=liczba
    R1:=0
    R2:=0
    R3:=0

    while R0>=100 do

      R0:=R0-100
      Inc R3

    end

    while R0>=10 do

      R0:=R0-10
      Inc R2

    end

    R1:=R0




    Algorytm 2

    Code:


    DIV - dzielenie całkowite
    MOD - reszta z dzielenia (łatwiej dostępna w 8051 niż się wydaje)


    R0:=liczba

    R3:=R0 DIV 100
    R0:=R0 MOD 100

    R2:=R0 DIV 10
    R1:=R0 MOD 10

  • Poziom 20  
    Nie mam zapisać liczbe trzycyfrowa za pomoca programu asemblera 172

    Program ma byc typu tylko on co inne robi

    LJMP START
    ORG 100H
    START:
    CPL P1.7
    MOV R2,#8
    LOP3:
    MOV R1,#250
    LOP2:
    MOV R0,#250
    LOP:
    DJNZ R0,LOP
    DJNZ R1,LOP2
    DJNZ R2,LOP3
    LJMP START

    Prosze napisac mi program mikrokoktroletra 8051 pomocy
  • Pomocny dla użytkowników
    Cytat:
    Potrezbuje napisać program w asemblerze zapisujacy liczbe trzycyfrowa Mam zapisać liczbe 172

    R0 - od 0 do 256
    R1 - jednosci 2
    R2 - dziesiatki 7
    R3 - setki 1


    Na tak sformułowane zadanie może być tylko taka odpowiedź :D
    (przemyśl jeszcze treść tego zadania)

    Code:


    START:
       MOV SP,#6F                      ; Ustawienie wskaźnika stosu

       MOV R0,#172                    ; załadowanie do R0 liczby do rozpisania
       CALL Konwersja                ; wywołanie procedury Konwersja
       
    koniec: sjmp koniec              ; pusta pętla by prcesor stanął w tym miejscu


    Konwersja:
       PUSH A      ; zapisanie rejestru ACC  na stosie
       PUSH B      ; zapisanie rejestru B na stosie

       MOV A,R0
       MOV B,#100
       DIV AB
       MOV R3,A
       MOV A,B
       MOV B,#10
       DIV AB
       MOV R2,A
       MOV R1,B

       POP B        ; odtworzenie B ze stosu
       POP A        ; odtworzenie ACC ze stosu
       RET
  • Poziom 20  
    To ma być program wpisujacy do rejestry R0 liczbe 172 gdzies jednosci sa w Rejestrez R1 dziesiatki sa w rejestrze R2 a setki w rejestrze R3 po prostu program zapisuajcy licbze 172
  • Poziom 20  
    Mam napisac program w asemblerze ktory ma wpisywać do osobnych rejestrow jednosci , dziesietki i setki danej liczby czyli do R1 - dziesiatki R2 - dziesitki R3 - setki jak to zrobic prosze o pomoc
  • Poziom 34  
    Jakoś strasznie niejednoznacznie piszesz!
    Czy chodzi o to, żeby aktualną liczbę w R0 (0..255) przepisywać do do trzech rejestrów w postaci R1 (0..9), R2 (0..9) i R3 (0..2) ?
  • Pomocny dla użytkowników
    Napisałem mu wyżej rozwiązanie, jak już go sprecyzował w innym poście (chyba skasowanym)
  • Poziom 20  
    Paweł Es. napisał:
    Cytat:
    Potrezbuje napisać program w asemblerze zapisujacy liczbe trzycyfrowa Mam zapisać liczbe 172

    R0 - od 0 do 256
    R1 - jednosci 2
    R2 - dziesiatki 7
    R3 - setki 1


    Na tak sformułowane zadanie może być tylko taka odpowiedź :D
    (przemyśl jeszcze treść tego zadania)

    Code:


    START:
       MOV SP,#6F                      ; Ustawienie wskaźnika stosu

       MOV R0,#172                    ; załadowanie do R0 liczby do rozpisania
       CALL Konwersja                ; wywołanie procedury Konwersja
       
    koniec: sjmp koniec              ; pusta pętla by prcesor stanął w tym miejscu


    Konwersja:
       PUSH A      ; zapisanie rejestru ACC  na stosie
       PUSH B      ; zapisanie rejestru B na stosie

       MOV A,R0
       MOV B,#100
       DIV AB
       MOV R3,A
       MOV A,B
       MOV B,#10
       DIV AB
       MOV R2,A
       MOV R1,B

       POP B        ; odtworzenie B ze stosu
       POP A        ; odtworzenie ACC ze stosu
       RET


    Czyli to jest program zapisujacy w osobnych rejestrach jednosci , dziesitki , setki to z R0 jest zle ten program ma po prostuw pisywac jednsoci , dziesiatki , setki do osobnych rejestrow prosze o pomoc w napisaniu tego programu napewno to jest dobrze

    Dodano po 1 [minuty]:

    ale to nie ma byc liczby 172 tylko dowolnej liczby jak to rzobic dla dowolnej liczby

    Dodano po 1 [godziny] 30 [minuty]:

    Ten program napewno jest dobry prosze jeszcze o napisanie do neigo algorytmu
  • Pomocny dla użytkowników
    Sądząc z twojej chęci do myślenia i czytania to pewnie jeszcze trzeba by pójść i zaliczyć za ciebie ten projekt :( :(

    Algorytm był już podany w tym temacie (dla ułatwienia podam, że był zatytułowany algorytm 2. Rozpisz go sobie w formie jakiej od ciebie wymagają.

    Inne liczby wpisujesz do R0 przed wywołaniem konwersja.


    Błagam nie zostawaj serwisantem ani projektantem samolotów, okrętów, reaktorów jądrowych ani urządzeń medycznych !!!!!!!!!!!!! :(( bo tam jest wymagana nie tylko umiejętność czytania (wraz z chęcią) ale także zrozumienie tego co się czyta.


    Instrukcja DIV AB

    mov A, dzielna ; A:=dzielna
    mov B, dzielnik ; B:=dzielnik
    DIV AB ; A div B

    po operacji masz:

    A - iloraz (część całkowita z dzielenia A przez B
    B - reszta z dzielenia A przez B

    Podstawy programowania 8051

    http://www.lodd.p.lodz.pl/kwbd/mikrokontroler.htm
    http://mikrokontrolery.net/8051.htm
    http://www.zmitac.iinf.polsl.gliwice.pl/ui/instrukcje/Lista_rozk_8051.pdf
  • Poziom 20  
    Dobra ale nie potrezbuje programu ktory dzieli chcem program ktory wpisuje w osobne rejestry jednostki , dziesitaki i setki danej liczby i algorytm tego programu

    Dodano po 5 [godziny] 20 [minuty]:

    Ma to być program ktory dowolna liczbe o d0 do 256 wpisuje do poszcegolnych rejestrow jednosci , dzisiatki i setki albo wpisujacy liczbe 172 do posczegolnych rejestrow Jak napisac ten program
  • Pomocny dla użytkowników
    Niejasno piszesz. Zacznij może od podstaw, bo mam wrażenie, że nie rozumiesz zadania, które rozwiązujesz i, że rozwiązanie to już zostało podane wraz z algorytmem w poprzednich postach.

    Co ten program ma właściwie robić ? Wpisać po prostu liczby do rejestrów ?

    MOV R1,#2
    MOV R2,#7
    MOV R3,#1

    O to ci chodzi ?

    Jeżeli liczba wejściowa jest w rejestrze R0 to ma ona postać binarną:

    od 0000000 (0d) do 11111111 (255dziesiętnie) by ją zapisać w rejestrach R1, R2, R3 (setki, dziesiątki i jedności) musisz ją przekształcić, np. właśnie przez dzielenie, kolejno przez 100 i 10 by wyznaczyć ile jest setek a ile dziesiątek w liczbie wejściowej, reszta to jednostki.

    Z tego co piszesz, to wynika, że masz zrobić program konwersji liczby binarnej od 0 do 255 na postać trzech cyfr BCD.
  • Poziom 34  
    Paweł Es. napisał:
    ... Z tego co piszesz, to wynika, że masz zrobić program konwersji liczby binarnej od 0 do 255 na postać trzech cyfr BCD.

    Rozumiem to dokładnie tak samo z tym, że dla zapisania jednej liczby 0..9 w kodzie BCD nie jest potrzebny cały 8-bitowy rejestr, a tylko jego połowa, czyli nibel, a wiec w sumie 3 nible, czyli półtora rejestru.
  • Pomocny dla użytkowników
    No tak, ale on ma wyraźnie polecenie by rozrzucić te cyfry po trzech rejestrach.
  • Poziom 20  
    Tak mam wlasnie to zrobic z liczbe w rejestrze R0 zrzucić do osobnych rejestrow jednostki , dziesitaki i setki mam napisany do liczby 172 a jak napisać ten program dla dowonej liczby od 0 do 172 Prosze o pomoc jak to napisac
  • Poziom 15  
    czlowieku mam wrazenie ze jestes upośledzony jak czytam co tu piszesz rozwiazanie pojawiło sie już dwa razy!!!! Sorry ale chyba to forum sie dla ciebie nie nadaje:/
  • Poziom 20  
    START:
    MOV SP,#6F ; Ustawienie wskaźnika stosu

    MOV R0,#172 ; załadowanie do R0 liczby do rozpisania
    CALL Konwersja ; wywołanie procedury Konwersja

    koniec: sjmp koniec ; pusta pętla by prcesor stanął w tym miejscu


    Konwersja:
    PUSH A ; zapisanie rejestru ACC na stosie
    PUSH B ; zapisanie rejestru B na stosie

    MOV A,R0
    MOV B,#100
    DIV AB
    MOV R3,A
    MOV A,B
    MOV B,#10
    DIV AB
    MOV R2,A
    MOV R1,B

    POP B ; odtworzenie B ze stosu
    POP A ; odtworzenie ACC ze stosu
    RET



    Chodzi Ci o to rozwiazanie ale tu jest napisane dla konkrentnej liczby a ja potrzebuje dla dowolnej liczby od 0 do 255
  • Pomocny dla użytkowników
    To zmień tę linię:

    Code:
    MOV R0,#172 ; załadowanie do R0 liczby do rozpisania 


    na

    Code:
    MOV R0,#n    ; n - dowolna liczba od 0 do 255



    Nie podałeś tylko jaką metodą ma być wprowadza na ta liczba, na jakim sprzęcie będzie wykonywany ten program (tylko nie pisz, że na 8051, bo to juz wiemy)
  • Poziom 20  
    to bedzie robione na DSM - 51 napewno ten program jest dobrze prosze o sprawdzenie

    Dodano po 3 [godziny] 37 [minuty]:

    Czyli jak zamiast 172 wpisze n to bedzie dobrze i bedzie to dla kazdej liczby od 0 do 256 i do osobnych rejestrwo beda wpisywane jednsoci , dziesiatki , setki jest to robione na DSm-51 Prosez o sprwdzenie tego programu

    Dodano po 16 [minuty]:

    LJMP START
    ORG 100H
    START:

    MOV SP,#6F
    MOV R0,#n
    CALL Konwersja

    koniec: sjmp koniec

    Konwersja:

    PUSH A
    PUSH B


    MOV A,R0
    MOV B,#100
    DIV AB
    MOV R3,A
    MOV A,B
    MOV B,#10
    DIV AB
    MOV R2,A
    MOV R1,B


    POP B
    POP A
    RET

    STOP :
    LJMP STOP


    Napisalem ten program ktory ma liczbe zapisana w rejestrze R0 od 0 do 256 zapisywac do osobnych rejestrow jednsotki , dziesiatki , setki prosze o sprwdzenie i w razie bładów poprawienie ich
  • Poziom 20  
    Prosze o sprawdzenie tego co oznacza zapis MOV B,#100
  • Pomocny dla użytkowników
    Załamka :crazyeyes:


    Chłopie, czy ty żartujesz czy tylko masz okresowe zaćmienia ?

    Zajrzałeś do jakichkolwiek książek ? Bo ja mam wrażenie, że chcesz napisać epopeję po chińsku nie znając ani znaków ani języka :shocked!:


    MOV B, #100 oznacza bezpośrednie wpisanie liczby 100 do rejestru B


    to n to jest przykładowa liczba od 0 do 255 ALE NIE OZNACZA, ŻE PROCESOR WPISZE JE SAM.

    Podaj dokładnie treść zadania, co masz zrobić, w jakiej formie, jak mają być wprowadzane dane (czyli ta liczba, która zostanie wpisana do R0)
    i jak mają być wyprowadzane czy wyświetlane z R1,R2 i R3.
  • Poziom 20  
    Mam napisane tak , że w rejestrze R0 jest liczba od 0 do 255 i w rejestrze R1 są jednsoci R2 dziesitaki R3 setki tylko sam nie wiem czy maja być wpisane czy wyswietlone ale wydaje mi sie ze wyswitelone ale chyb na to samo wychodzi ja robie to w DSM-51 Prosze o sprwdzenie programu ktorej napisalme post wczesniej pomocy
  • Poziom 34  
    Paweł, kolejne ukłony dla Twej cierpliwości... ;)
    W asemblerze RISC dla AVRów bym pomógł, ale tego starszego nie znam nic a nic, a sam algorytm Elektronikopo nic nie daje... :(
  • Poziom 20  
    Dobra spoko prosze o sprawdzenie tego programu

    LJMP START
    ORG 100H
    START:

    MOV SP,#6F
    MOV R0,#n
    CALL Konwersja

    koniec: sjmp koniec

    Konwersja:

    PUSH A
    PUSH B


    MOV A,R0
    MOV B,#100
    DIV AB
    MOV R3,A
    MOV A,B
    MOV B,#10
    DIV AB
    MOV R2,A
    MOV R1,B


    POP B
    POP A
    RET

    STOP :
    LJMP STOP

    i napisanie linika po linice jak on działa

    Dodano po 2 [godziny] 59 [minuty]:

    prosze o pomoc w tym temacie mam to na jutro