Z pewnością sposobów jest mnóstwo. Przypomniałem sobie troszkę asembler mcs51. Mam nadzieję, że program w asemblerze wyjaśni wątpliwości (albo pogłębi ;-) ). Skorzystanie z "tabliczki dzielenia" lub "tabliczki mnożenia" na liczbach o podstawie 2^8 przedstawia poniższy program. Tabelę rozbiłem na 3x256 bajtów. Obliczenie realizowane wg zależności x=256*a+b...
Ja mam algorytm i zrobiony podprogram wykonujący takie dzielenie, ale jest napisany na inny procesor. Dziwię się że ktoś jeszcze zajmuje się takimi procesorami. Z czystej ciekawości jestem ciekawy co cię zmusiło do stosowania takich uP?. Natomiast jeśli chodzi o dzielenie to łap mnie na GG, to jest sporo tlumaczenia zwłaszcza, że nie będę mógł ci pomóć...
Dziękuję za podpowiedzi. Mało precyzyjnie się wyraziłem, ale i tak wiedzieliście o co mi chodzi. Wprowadziłem małą poprawkę w swoim początkowym pytaniu. Tak chodzi o przedstawienie tych działań na liczbach stałoprzecinkowych w kodach znak-moduł (ZM) oraz uzupełnienie do dwóch (U2).Oczywiście oddzielne działania wykonuje dla ZM jak i dla U2 nie łącze...
zapisze to matematycznie w postaci "bajtowej" gdzie jedna wielka litera to jeden bajt a 0 to jeden bajt tylko że równy zero X,Y / Z,A = 0W (wynik) + 0R (reszta) teraz reszta mnozona razy 256 czyli 0R * 256 = R0 R0 / Z,A = 0V i ostateczny wynik to W,V teraz lepiej to zapisałem ??? hehe
sorka zapomniałem napisac, chodzi o AVRy...
a czy jest wogule w asemblerze dzielenie przez inne liczby niż 2 i jej wielokrotności bo znalazłem min. ldi r16,30/3 ale tylko tą komenda
Tak to jest 8051 ale jak to zrobić, nie mam pojęcia, jeśli jest tu jakis spec od programowania to prosze o pomoc
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.
Witam. Od 2 semestru rozpoczęło się u mnie programowanie w asemblerze. Jestem kompletnie zielony, a muszę obliczyć takie równanie: X = (a+b)/c * (a-b)/d, gdzie a,b,c,d to dowolne liczby, a X jest różne od 0. Mój kompilator to TASM. Generalnie mam problem z tym, że gdy np. dzielę jakąś liczbę to wyskakują mi jakieś serduszka, strzałki itp. Napisałem...
Tu są procedury matematyczne dla '51: http://www.8052.com/codelib/math8051.asm Dzielenie 32 bitowych przez 16 bitowe bez znaku, to procedura UDIV32, a ze znakiem DIV32. Pozdrawiam.
przekształciłem wzory do postaci w których występują liczby 2 do n-tej - czyli w asemblerze bez problemu (przesuwam w prawo lub w lewo i to mi dzieli lub mnoży x2). nie wiem jak mi to jeszcze wyjdzie (bo ze wzoru mam tam liczby 2do20) bo symulacje sobie przeprowadze jutro-kiedyś już coś podobnego robiłem i chodziło (tyle że na dużo mniejszych liczbach)...
Witam Na czwartek muszę przygotować listingi programów napisanych w asemblerze które wykonają poniższe działania: 1. Dane są liczby: A=0F1h, B=00011111b. Obliczyć binarnie A+B, A-B, B-A. Podać wynik w postaci binarnej i szesnastkowej. 2. Napisać program mnożenia x4 liczby umieszczonej w rejestrze R7 bez użycia instrukcji mul ab. 3. Napisać program...
Czasem musimy podzielić wartość zmiennej przez stałą, która NIE JEST całkowitą potęgą dwójki. Można chytrze wykorzystać wbudowaną w procesor mnożarkę. A nawet bez mnożarki sposób jest dobry, bo dzielenie jest przynajmniej dwa razy dłuższe i wolniejsze od mnożenia. Przyjmijmy, że chcemy dzielić bajt X przez stałą D. Znajdźmy „k”, największą...
Witam. Jestem bardzo wcześnie początkującym użytkownikiem assemblera i mam problem, już na samym starcie ;) Potrzebuję dodać do siebie dwie liczby i podzielić je przez trzecią, wcześniej zdefiniowane na szczęście (dla mnie :> ) . Równanie takie: (a+b)/c i wyświetlić wynik na ekranie. Ogólnie zadanie mam trochę bardziej rozbudowane, ale to powinno mi...
Witam Szukam procedury dzielenia dużych liczb w asemblerze z wykorzystaniem przesunięć i obrotów. Ma ona tę cenna właściwość, że dzielnik może być większy niż w tradycyjnym dzieleniu poleceniem div. Na którejś grupie news podana była taka procedura, ale dawno i nie mogę znaleźć w archiwach. Z góry dziękuję za pomoc i pozdrawiam forumowiczów.
Witam Muszę napisać w assemblerze 8086 program który podzieli 2 liczby double. Wiem że muszę odjąć cechy i to już zrobiłem. Problem jest z dzieleniem mantys, nie mam pojęcia jak to zrobić. Jedna mantysa ma 52 bit, więc muszę użyć przynajmniej 2 rejestrów. Podobno najlepiej zastosować metodę wielokrotnego odejmowania, ale jak to wykonać w praktyce? Byłbym...
Witam. Kto ma lub napisze procedurkę dzielenia dwóch liczb dwubajtowych - wynik u mnie będzie zawsze jeden bajt więc starszy bajt wyniku można pominąć... z góry dzięki. ps. ja znalazłem tylko dzielenie 6-cio bajtowych, 4, 3 itp..... a 2 niema :-(
:?:Witam wszystkich! Mam problem nie wiem jak podzielić liczbę stałoprzecinkową trzybajtową przez trzybajtową w kodzie ZM czyli znak-moduł w ASM '51. Jak to dzielić w przypadku gdy dzielna jest ujemna a dzielnik jest dodatni i odwrotnie lub gdy obie liczby są ujęmne lub dodanie.Ilu bajtowy jest wtedy wynik. Jeżeli ktoś by miał taką procedure dzielenia...
Tutaj jest kod na dzielenie 2-óch liczb 8-bitowych dla AVR: ;* "div8u" - 8/8 Bit Unsigned Division ;* ;* This subroutine divides the two register variables "dd8u" (dividend) and ;* "dv8u" (divisor). The result is placed in "dres8u" and the remainder in ;* "drem8u". ;* ;* Number of words...
Witam wszystkich jestem studentem drugiego roku informatyki i Pan prof. zadał mi pytanie przewyższający moją zdolność rozumowania :D . Oto kod programu: [syntax=asm].686 extern _ExitProcess(at)4: near public _main _DATA SEGMENTdword public 'DATA' use32 Divisor1 DD 21 Divisor2 DD 2 Result DD 0 RemainderDD 0 _DATA ENDS _TEXT SEGMENTdword public 'CODE'...
Witam Jako, że mam do napisania program w ASM dla µC 8051 pobierający dwie liczby dwucyfrowe z klawiatury i dzielący je przez siebie oraz wyświetlający wynik zaokrąglony do dwóch liczb po przecinku na terminalu, napotkałem drobny problem z którym nie mogę dać sobie rady, a dokładniej: jeżeli np. µC będzie miał podzielić 99/98=1,0102 to w A...
Witam potrzebuje pomocy z zadanie. Program ma dzielić 2 liczby z a i b. Nie mam pomysłu jak to zrocić by nie podawać wartości c [syntax=assembler] POB a pętla: SOM koniec POB c ŁAD b ODE c POB a DOD Jeden ŁAD a SOZ pętla koniec: POB c STP a: RST 12 b: RST 24 c: RST 2 Jeden: RST 1[/syntax][/code]
Witam !! zaczołem właśnie uczyć się programować w asemblerze i podcza pisania napotkałem na problem i nie umię go rozwiązać ?? pisałem programik dzielący 2 liczby wpisane 16 i wynik tez jest podawany szesnastkowo (nie można użyć .386) i program sie kompiluje nie ma błedów ale niestety cos nie działa ????? bardzo prosze o pomoc kompiluje za pomocą "tasm"...
Witam. W poniższym algorytmie jest gdzieś błąd. Polega on na tym że niektóre liczy źle się dzielą. Chodzi o algorytm 32-bit/16-bit = 32-bit i reszta 32-bit Np. liczba 450221 podzielona przez 20 daje prawidłowy wynik. Natomiast ta sama liczba podzielona przez 60 już nie :( Musi istnieć jakiś niewielki błąd w algorytmie. Na dzień dzisiejszy niestety go...
Witam muszę wykonać poniższe dzielenie w asemblerze a/(b*c) i nie wie jak to zrobić. Dla (b*c)/a wyglądałoby to tak: mov ax,b mov bx,c mul bx mov bx,a div bx Ale jak to będzie wyglądało dla a/(b*c) ?
potrzebuje w asm 51' podzielic dwie jednobajtowe liczby, ale z dokładnoscią do 1 miejsca po przecinku!. jak to zrobić?. programowe polecenie DIV AB daje mi cześć całkowitą i RESZTE z dzielenia, myślałem żeby napisać program, który by dzielił w "słupku", ale może on niekiedy zajmować dużo czasu... i w ogóle mi sie nie podoba :P czy nie da sie odrazu...
najpierw muszę zaprojektować analogowy filtr wedłóg schematu 1 w pdf kolegi następnie muszę wyliczyć alfa , beta i gama które są stałe dla każdego filtru a następnie muszę postępować według algorytmu z rysunku 9a Dokładnie tak :!: , ale musi być jakieś ale :D . Podane zostały jedynie uproszczone wzory na alfa, beta i gamma, wykorzystujące SAA (Small...
Kto szuka http://www.piclist.com/techref/microchip...
Nie, nie jest. DIV, to dzielenie liczb bez znaku, IDIV to dzielenie liczb ze znakiem.
Możesz pomnożyć resztę przez 1000 a następnie znowu podzielić to przez dzielnik. 1 x 1000 = 1000 1000/16 = 62.5 Czyli otrzymasz 62 i 8 reszty. Można by pomnożyć przez 10000 uzyskując na koniec wynik 625 ale wtedy dzielenie przez większe liczby nie będzie działało bo reszta będzie duża i pomnożona przez 10000 nie zmieści się w 16-tu bitach.
to może niech ktoś pomoże rozwiązać mój problem :D chodzi mi o odejmowanie struktur typu czas HH:MM:SS zapisanych w spakowanym BCD w przypadku minut poprawki są banalne ale nad poprawianiem godzin siedzę już chyba z dwie godziny :cry:
Rozumiem, że przez "obliczyć %" masz na myśli policzenie 100 * x/15360. Żeby było prościej liczysz x/153 - błąd nieduży - przy niskich wartościach niweluje potrzebę korekty zaokrąglania, przy bliskich 100% błąd jest największy i dochodzi do 0.5%. Możesz sobie ręcznie zoptymalizować procedurę dzielenia dla znanego dzielnika - 153 to 0x99 binarnie, a...
Sposób który pierwszy narzuca się aby liczbę przedstawić w postaci tekstu to znaleźć ilość jednostek, dziesiątek, setek, tysięcy, itd... w danej liczbie (dzieląc przez 1000,100,10). Następnie te znaki pozostaje już tylko "przesunąć" do znaków ASCII, a wiec dodać 0x30. Dla przykładu mamy liczbę 123, liczba setek: 1, liczba dziesiątek 2, liczba jednostek...
Witam, powoli kończę modernizację swojej nawijarki do cewek i transformatorów, licznik liczby zwojów postanowiłem wykonać na mikrokontrolerze jak w tytule PIC16F877A. Właściwie wszystko sprzętowo działa, za to utknąłem na końcu programu, otóż licznik może zliczać do 65535 zwojów, wszystko wyświetlam na wyświetlaczu 2x16. Mój problem związany jest z...
Witam. Gdzie znajdę gotowe procedury w asemblerze dla pic 16f84 np. mnożenie,dzielenie liczb 32-bitowych itp.
Przygotować Ci gotową procedurę zamieniającą liczbę 16bit na ciąg tekstowy, gotowy do pobrania przez Twój program czy chcesz "pobawić się" z tym sam ? Napisałem wyżej, że posiadam procedurę dzielącą liczbę 16bit przez liczbę 8bit.
Dzielenie przez 8 to nic innego jak przesunięcie o 8 bitów w prawo, czyli w przypadku 8-bitowych procesorów wywalenie najmłodszego bajta wyniku. Dzielenie prze 8 to nie przesunięcie o 8 bitów w prawo, tylko o 3 bity. Do autora: dzielnie wlaczysz, tracisz czas, a na końcu koledzy podsyłają ci funkcje arytmetyczne zaimplementowane w C. Jaki jest więc...
Jest sposób aby wykonać ta procedurkę w asemblerze , ale nie wiem ile ona potrwa- a tobie zależy na szybkim wykonaniu obliczenia. Poniżej opisałem jak według mnie mogłoby to działać: Np. A=256 ; B=64 Deklarujemy tablice w której będą procentowe podzialy liczby (25%,50%,75%,100% itd) 1) porównanie liczb A=B, A>b, A<B 2) A>B (inkrementujemy odpowiednio...
Witam, Nie twierdzę że mój sposób sprawdzi się w Bascomie, dużo lepiej sprawdzi się asemblerze. Napisałem w Bascomie tak dla przykładu, myślę że tak jest przejrzyście, a chodzi po prostu o zasadę - sposób. AVR - serii Atmega to 8bitowce, więc tutaj w grę wchodziłoby tylko 8bit/8bit. Natomiast co ciekawe, AVR32 też nie ma dzielenia sprzętowego. Całkiem...
Witaj Nie wiem w czym widzisz problem, mnozysz czy dodajesz rownie dobrze liczby 32bitowe takze w asemblerze. Troszke wiecej problemy jest gdy je dzielisz, ale to tez do przeskoczenia (zamiana na ułamki i mnożenie) Duza liczba bitopw jest potrzebna gdy mnożysz liczby z granic przedziałów, czy ułamki, a tak to wystarczy ci najstarsze 8bitów z wyników...
Zwykłe binarne dzielenie nierestytucyjne przy 10 bitach będzie prawdopodobnie prostsze, niż każda z tych kombinowanych metod - to w końcu tylko 8 obiegów pętli z porównaniem, przesunięciem i warunkowym odejmowaniem, tyle że te trzy operacje trzeba zrobić na 10 (czyli w praktyce 16) bitach. Gdyby toto miało przynajmniej 8-bitowe dzielenie, jak stary...
Z jakiego zakresu masz tam liczby? Ja też pisze w asemblerze i jak mam wyświetlać liczby to jeśli mam np. zakres 0-999 to dzielę sobie tą liczbę najpierw przez 100 i mam liczbę setek. Resztę z tego dzielenia dzielę przez 10 i mam dziesiątki a reszta z tego dzielenia to jedności. Z tego co pamiętam to trzeba do tego wyniku dodać 48 i wysłać na wyświetlacz....
Witam. Mam następujący problem, potrzebuję cały listing programu (komendy w programie typu MOV AH,BX itd) który wykonuje następującą czynność. Dzieli zdanie które składa się z max 80 znaków na pojedyncze wyrazy które umieszczane są poniżej a obok nich wyświetlana jest liczba znaków tworząca ten wyraz. Przykład: Ala ma kota. Ala 3 ma 2 kota 4 To wszystko,...
Strasznie się zapętliłeś z adresowaniem. MOV A,4 oznacza prześlij do akumulatora zawartość komórki o adresie 4 (czyli to samo co MOV A,R4) natomiast MOV A,#4 oznacza wpisz do akumulatora wartość 4 Proponuję zacząć używać symulatora (np. AVSIM'a) Moja propozycja kodu: MOV R1,#4 ;LICZBA ELEMENTÓW MOV R2,#0 ;ZEROWANIE BUFORA SUMY PETLA: MOV DPTR, #Tablica...
Hmm... widzę, że temat jest stary, ale może komuś to się przyda. Dzielenie przez 4096, jako że ta liczba jest potęgą dwójki (2^12) to zwykłe przesunięcie w prawo właśnie o te 12 bitów. Jeżeli XL:XH zawiera zliczone impulsy to podzielić to przez 4096 można tak: mov XL, XH ; skrócone podzielenie przez 256 ;) ldi XH, 0x00 ; wynik w XH zawsze będzie właśnie...
Zakladam ze liczby sa w formacie X * 10^Y gdzie X to jest wartosc a Y to jest potegi dziesiatki Mnozenie: -mnozysz pierw liczby -dodajesz potegi dziesiatki Dzielenie: -wyrownujesz potegi dziesiatki do tej mniejszej -potem je jedynkujesz -dzielisz normalnie te liczby -dzielisz Dodawanie: -wyrownujesz potegi dziesiatki do tej mniejszej -dodajesz liczby...
Tylko że jak pomnożę całość przez 10 to już nie zrobię tego na 8 bitach. Czy jak dziele 2 liczby inie dzielą się całkowicie to ustawiany jest jakiś bit lub kilka ? Poza tym nie mam zielonego pojęcia jak wyświetlić pojedynczą cyfrę na wyświetlaczy z jakiejś 3 cyfrowej liczby zapisanej w końcu w postaci hex. Zakres liczb przy podanym przeze mnie wzorze...
Szkoda, że nikt (ze studentów) nie wpadł na to, że wystarczy jedna funkcja, by przedstawić wczytaną wartość w dowolnym systemie pozycyjnym. Chodziło tu o uzmysłowienie sobie ("odkrycie"), że wartość liczby nie jest trwale związana z jej reprezentacją i nie ma znaczenia to, jak liczba jest fizycznie reprezentowana w pamięci komputera. Dlatego było tak...
Najprostszym sposobem konwersji dowolnie długiej liczby binarnej do pisemnej postaci jest ciągłe dzielenie jej przez 2 ... Dzięki za odpowiedź. Przenalizuję sobie kodzik i zobaczę, czy będę umiał go wykorzystać. Na pierwszy rzut oka wydaje mi się, że nie o to chodzi. Mnie nie chodziło o konwersję liczby binarnej do postaci pisemnej, jeśli rozumiem...
Okey, tak zrobię. A swoją drogą Debbuger mówi mi, że gdzieś w moim programie występuje dzielenie przez zero, ale nie jestem w stanie określić kiedy to może się dziać. Byłbyś w stanie pomóc z tym?
Witam. Czy ktoś z kolegów natknął się na procedury dzielenia dla AVR. Konkretnie chodzi mi o dzielenie liczby 24bit przez 16bit lub 32bit przez 16bit wynik liczba całkowita może być bez reszty no i warunek procedura nie może przekraczać 450cykli. Serdeczne dzięki za pomoc. Pozdrawiam Marek D.
żadne, wszystko zależy od tego jak wygląda Twój program i czy umiesz posługiwac się asemblerem. Przy dobrym wietrze koło 30% używaj szukaj I tu bym się niezgodził. Zanim zacząłem programować mikroprocesory jednoukładowe w C moje największe programy napisane mieściły się w 2kb pamięci i też wykonywały obliczenia matematyczne typu dzielenie i mnożenie,...
Sumę liczb pierwszych mniejszych od 2^64 można (abstrahując od faktu, że wyznaczenie ich wszystkich przekracza możliwości łatwo dostępnych komputerów) wyliczyć dysponując zmiennymi uint64_t: [syntax=c]uint64_t s0=0, s1=0, p; ... if ((s0+=p) < p) s1++; ...[/syntax] i s1,s0 w sumie utworzą 128-bitową liczbę będącą sumą wszystkich p. Gorzej z wykonaniem...
Witam Mam uklad na ATmega8 , z wyswietlaczem LCD itd. i wykorzystuje wejscia ADC kontrolera do pomiaru napiecia (przynajmniej na wejsciu ADC). Co wazne, pisze w asemblerze, a trafilem na problem -byc moze banalny ale juz troche sie mecze, tez troche szukalem i ... Czy ktos moze wyjasnic w jakis sposob liczbe binarna w Asemblerze !! zamienic na 3 liczby...
Problem staje się prosty gdy możemy się posłużyć określeniem ogólnym "czas", jednak gdy mamy osobno minuty i godziny - jest inaczej. Procki nie operują na pojęciach ogólnych , tylko na liczbach i zapewniam Cię , że porównywanie liczb(nawet wielobajtowych) jest prostrze niż np. ich dzielenie. Więc może skupmy się jedynie na sposobie porównania dwóch...
Trochę dawno pisałem w asm i nie wiem czy jest gotowe przerwanie do wypisywania liczb ale możesz zrobić np. tak: 123 :10 = 12 reszta 3 12 : 10 = 1 reszta 2 1 : 10 = 0 reszta 1 Dzielisz liczbę przez 10 i wrzucasz reszty z dzielenia na stos dopóki wynik z dzielenia różny od 0. Później ściągasz ze stosu dodajesz 48 i wypisujesz.
Przy dzielenie przez dwa tracisz jeden bit znaczący stąd taki sam wynik otrzymasz przy liczbei x parzystej i niepraszystej na przykład dla x=10 i x=9 (10-3)/2=3 (9-3)/2=3
a w jakim języku programujesz ? Bo np.: w Bascomie jest gotowa funkcja. Programuje w asemblerze. Teraz mi się przypomniało, że 6 się dodaje po dodaniu dwóch liczb bcd. Najpierw do mniej znaczącej liczby. Jesli nie nastąpi przepełnienie półbajtu to się tą 6 spowrotem odejmuje, jak nastąpi to się zostawia i robi to samo ze starszym półbajtem. ... Więc...
8 tysięcy przerwań na sekundę z nietrywialną obsługą na AVR niekoniecznie musi się udać. Co do reszty - albo C i uint64 odpowiednio przeskalowany (czyli liczymy nie w jednościach, a w tysiącznych), albo AVR, asembler i własny typ dokładnie taki jak trzeba np. 45-bitowy, i też liczymy w tysiącznych. Mnożenie i dzielenie uint64 może AVR zarżnąć. Z ARM...
Dziekuje za szybką odpowiedź. Proszę mi uwierzyć, że zadałem sobie sporo trudu i rozumiem na jakiej zasadzie wzór działa i jak fajnie można uniknąć kalkulacji floating point w asemblerze za jego pomocą. Użyłem go w też w swoim projekcie. Jedynie czego nie mogę zrozumieć to w jaki sposób wyliczyć ilość wymaganych przesunięć w prawo. Autor projektu aby...
Jak kolega napisał musisz zamienić liczbę na odpowiednie znaki ASCII i wydrukować te znaki. Możesz napisać uniwersalną procedurę zamiany, działającą na zasadzie: dzielenie i resztą z dzielenia indeksowanie tablicy cyfr szesnastkowych (dla 10 i 2 wykorzysta mniej cyfr). Możesz też napisać oddzielne procedury i wykorzystać fakt, że na 2 i 16 konwertuje...
ten przedział (0,1) można zrobić w ten sposób: short a/short b, gdzie a<b i nie dzielić tego bo według mojej wiedzy (może być bardzo wybrakowana [wiedza]) wyjdzie 0 więc zamiast dzielenia ten mniejszy short mnożę sobie przez kolejna liczbę i wynik mam na dwóch shortach, a później dzielę przez tego większego shorta i znów wracam rozmiarem do pojedynczego...
dzielenie liczb mnożenie liczb asemblerze dzielenie liczb ujemnych
bezpiecznik zasilać wtryskowy skuteczna antena ściemniacz żarówek ledowych
maciej333 student maciej333 student
Napięcie hydrostatu w pralce Amica - szczegóły Jak rozkręcić odkurzacz Electrolux Silence ProSystem?