logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak w asemblerze rozbić liczbę 3-cyfrową na setki, dziesiątki i jednostki?

tadeko9 28 Lis 2024 10:57 456 17
REKLAMA
  • #1 21323278
    tadeko9
    Poziom 10  
    Posty: 26
    Witam!
    Proszę o informację, jak w asemblerze rozbić liczbę 3-cyfrową na:
    - liczba setek
    - liczba dziesiątek
    - liczba jednostek
    Na przykład liczba 125 powinna dać setki=1, dziesiątki=2 i jednostki=5.
    Z góry dziękuję za pomoc.
    tadeko9
  • REKLAMA
  • #2 21323298
    kulmar
    Poziom 33  
    Posty: 1900
    Pomógł: 184
    Ocena: 371
    Ja to robiłem tak: sumowałem setki począwszy od stu: 100-200-300 itd. i sprawdzałem, czy suma nie jest większa od liczby. Jeśli jest, zapisywałem ilość setek (suma - 1). Po odjęciu od liczby setek zostawały dziesiątki i jedności - algorytm taki sam jak dla setek.

    Dodano po 6 [minuty]:

    Dla jedności nie potrzeba sumowania - po odjęciu od liczby setek i dziesiątek zostają jedności.
  • REKLAMA
  • #3 21323320
    oscil1
    Poziom 24  
    Posty: 622
    Pomógł: 49
    Ocena: 171
    A gdzie chcesz przechować te liczby?
  • #4 21323556
    excray
    Poziom 41  
    Posty: 5500
    Pomógł: 739
    Ocena: 656
    Musisz dzielić przez 10 i resztę z dzielenia traktować po kolei jako jednostki, dziesiątki, setki, itd. Myślę, że podstawowe pytanie, to to, co to za asembler i jakie rozkazy zawiera.
  • #5 21323921
    tadeko9
    Poziom 10  
    Posty: 26
    >>21323556
    Proszę o przykład podziału liczby 125 na jednostki, dziesiątki i setki.
    tadeko9
  • #6 21323936
    excray
    Poziom 41  
    Posty: 5500
    Pomógł: 739
    Ocena: 656
    125/10 = 12 i 5 reszty
    12/10 = 1 i 2 reszty
    1/10 = 0 i 1 reszty
  • #7 21324022
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1460
    1. nawet kolega @tadeko9 nie napisał wyraźnie, czy wejściowa "liczba" to naprawdę liczba, czy napis (string)
    Liczb jako liczb, to tak naprawdę we współczesnym komputerze trzycyfrowych nie ma.

    @excray
    2. słusznie pytasz o assembler

    tadeko9 napisał:
    - liczba setek
    - liczba dziesiątek
    - liczba jednostek


    3. Liczba czy cyfra.
    Co ma być wynikiem
  • #8 21324145
    oscil1
    Poziom 24  
    Posty: 622
    Pomógł: 49
    Ocena: 171
    1. Napisz to sobie w C (łątwiej),
    2. Użyj godbolt i sobie zobacz jak to siętłąmaczy na asembler na Twój mikrokontroler.

    Tu masz przykład dla Cortex-M4, avr, x66, mips i RISC-V 32 bit https://godbolt.org/z/PxvPfz85s
  • #9 21324163
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1460
    @oscil1 @excray

    Sądzicie że podpowiedzi mu coś pomogą ?


    Zerknijcie w historię (jak ja teraz).
    To kolega od zamiany Bascoma na ASCII
  • REKLAMA
  • #10 21324186
    michal.zd
    Poziom 31  
    Posty: 1651
    Pomógł: 83
    Ocena: 271
    excray napisał:
    Musisz dzielić przez 10 i

    Nie znam wielu procesorów z rozkazem dzielenia, więc do tego trzeba napisać program dzielenia w asm. Jeśli ktoś napisze taką procedurę, to automatycznie wie jak wyłuskać kolejne cyfry z liczby.
    Jest prostszy sposób, ale trzeba znać również ile bitów ma owa liczba.
    Ale kolega @tadeko9
    JacekCz napisał:
    od zamiany Bascoma na ASCII

    w tamtym wątku nic nie odpowiedział, poległ na najprostszym rozwiązaniu, a temat problemu wygląda na taki sam.
    Prawdopodobnie, bo tego też nie podał, chodzi o wyświetlacz.
    Otóż przejście na asm wymaga znacznie więcej wiedzy, znacznie więcej. Prościej Tadkowi wrócić do bascoma i opisać poprawnie jaki ma problem w tamtym wątku. Podejrzewam że baskom ma jedną, jak to się tam nazywa, komendę? do zamiany int na string, może być 'print' jak w zwykłym basicu. Ale to nie ten wątek.
  • REKLAMA
  • #11 21324423
    oscil1
    Poziom 24  
    Posty: 622
    Pomógł: 49
    Ocena: 171
    michal.zd napisał:
    Otóż przejście na asm wymaga znacznie więcej wiedzy, znacznie więcej.


    Pisanie w asm nie wymaga prawie żadnej wiedzy - tylko benedyktyńskiej cierpliwości i zacięcia masochistycznego.
  • #12 21324433
    michal.zd
    Poziom 31  
    Posty: 1651
    Pomógł: 83
    Ocena: 271
    oscil1 napisał:
    Pisanie w asm nie wymaga prawie żadnej wiedzy

    Oczywiście, wszak wystarczy znać jedną instrukcje np 'mov eax, 123', lub 'nop' i wielokrotnie ją powtarzać. Jest program? Jest.
    Jednak to nieco za mało.
    Z ciagu przypadkowo umieszczonych mnemoników wynik działania takiego 'programu' jest również mocno przypadkowy.
  • #14 21324730
    excray
    Poziom 41  
    Posty: 5500
    Pomógł: 739
    Ocena: 656
    bart-projects napisał:
    14: Jednosci = Liczba Mod 10
    000000A4: 9100 LDS R16, $0103 Load Direct from Data Space
    000000A8: E04A LDI R20, $0A Load Immediate
    000000AA: 940E CALL $00FA Long Call to a Subroutine
    000000AE: E0A0 LDI R26, $00 Load Immediate
    000000B0: E0B1 LDI R27, $01 Load Immediate
    000000B2: 938C ST X, R24 Store Indirect From Register to Data Space using Index X
    15: Liczba = Liczba / 10
    000000B4: E0A3 LDI R26, $03 Load Immediate
    000000B6: E0B1 LDI R27, $01 Load Immediate
    000000B8: 910C LD R16, X Load Indirect from Data Space to Register using Index X
    000000BA: E04A LDI R20, $0A Load Immediate
    000000BC: 940E CALL $00FA Long Call to a Subroutine
    000000C0: 930C ST X, R16 Store Indirect From Register to Data Space using Index X
    16: Dziesiatki = Liczba Mod 10

    🤣🤣🤣
    Da się nawet prościej:
    Kod: AVR assembler
    Zaloguj się, aby zobaczyć kod
  • #15 21324926
    bart-projects
    Poziom 30  
    Posty: 834
    Pomógł: 198
    Ocena: 258
    Przeczytałem cały wątek pobieżnie i nie chcę się wdawać w dyskusję :D
    Oczywiscie Bascom ma funkcję która zamienia String (to łańcuch znaków) na tablicę bajtów. Nazywa się STR2DIGITS. Nikt, nawet Autor watku, nie napisał że to miał być łańcuch znaków, ale proszę, tak to robi Bascom. Lubię sobie popatrzeć na disassembler :D

    Kod: VB.net
    Zaloguj się, aby zobaczyć kod


    (Może coś za dużo przekleiłem bo widze tam więcej RET)
    Kod: AVR assembler
    Zaloguj się, aby zobaczyć kod
  • #16 21325190
    robiw
    Poziom 26  
    Posty: 2030
    Pomógł: 25
    Ocena: 133
    Panowie prośba o luz i rozsądek. Koleś napisał coś, zapewne kompletnie nie mając pojęcia czego chce i dlaczego a Wy robicie doktorat z problemu w 10 językach. Masakra jakaś. On nawet nie bierze już udziału w dyskusji, bo pewnie zapomniał, co chciał zrobić. I dlaczego. I w ogóle czy ma komputer czy mikrokontroler 🤣
  • #17 21325223
    bart-projects
    Poziom 30  
    Posty: 834
    Pomógł: 198
    Ocena: 258
    Dlatego moje odpowiedzi maja sens merytoryczny bo DOKŁADNIE pokazują jak można rozwiązać ten problem w ASM. Post który nawiązuje do poprzednich niemerytorycznych wypowiedzi nie powinien być łaczony. Ja tylko pokazuje jak to robi kompilator..

Podsumowanie tematu

✨ W dyskusji poruszono sposób rozbicia liczby 3-cyfrowej na setki, dziesiątki i jednostki w asemblerze. Uczestnicy sugerowali różne metody, w tym sumowanie setek oraz dzielenie przez 10, aby uzyskać reszty, które odpowiadają jednostkom, dziesiątkom i setkom. Podano przykład dla liczby 125, gdzie 125/10 daje 12 reszty 5, a następnie 12/10 daje 1 reszty 2. Wskazano również na potrzebę określenia, czy liczba jest w formie liczbowej, czy tekstowej (string). Niektórzy uczestnicy sugerowali użycie języka C jako prostszego rozwiązania, a także narzędzi takich jak godbolt do analizy kodu asemblera. Wskazano na różnice w podejściu do programowania w asemblerze w zależności od architektury procesora.
Wygenerowane przez model językowy.
REKLAMA