Wyniki: W1 – 60h, W2- 61h, W3 – 62h, W4 – 63h A1 – 20h, A2 – 21h B1 – 22h, B2 -22h Start: MOV 20h, #0fdh ;A1 MOV 21h, #0ffh ;A2 MOV 22h, #0fdh ;B1 MOV 23h, #offh ;B2 ;mnożenie ;A1*B1 MOV A, 20h MOV B, 22h MUL AB MOV 80h, A ;A1*B1 L MOV 50h, B ;A1*B1 H ;A2*B2 MOV A, 21h MOV B, 23h MUL AB MOV A 41h, A ;A2*B2 L MOV B...
dokladnie. wiem ze powinno byc na koncu: program ENDS END start ale wtedy sypie duzo bledow. bez tego sa 2: *Warning* pr4.ASM(199) Open segment: PROGRAM **Fatal** pr4.ASM(199) Unexpected end of file encountered co poradzicie?
dobra a wiec od nowa pisze co i jak, dostałem od nauczyciela trzy pytania dotyczace asemblera, ja osobiscie jeszcze nic w nim nie robilem nie mialem stycznosci i troche go nie kumam.... 1. Inkrementacja jest to..., natomiast dekrementacja jest to ... w języku programowania ASEMBLER 2. Napisz prosty program w ASEMBLERZE dla układu 8051 realizujący funkcje...
pan B dodaje od lewej do prawej strony, na kartce też tak sie robi..Wywody o kodzie binarnym nie są mi potrzebne i nic nie wnoszą na postawione pytanie. W lewo w prawo to wiem, przecież nie robie tego w systemie trójkowym i skoro asembler to wiadome jest ze w AVRStudio.
Ok więc jak rozumiem chcesz zamienić to na napięcie... mnożenie floatów w ASMie to poroniony pomysł, wiesz o tym? Anyway, pomyśl jak to zrobić w całkowitych liczbach (te 12bit to nei problem - znajdź biblioteki mnożące 16x16) lub mysl sam jakt o w flotach zrobić (ale będzie to sadystycznie wolne).
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...
Witam. a i x są liczbami 16 bitowymi. wykonałem mnożenie liczby 16bitowej przez 16 bitową i teraz mam problem bo nie mogę zrobić dodawania(+b). wynik mnożenia liczba 32bitowa, chciałem dodać jakąś liczbę 8bitowa. moje pytanie jak zrobić w asemblerze dodawanie liczby 8b do 32b?
Czytać i zapisywać możesz. Ale jak wygląda mnożenie dwóch 8-bitowych zmiennych? Raczje trzeba najpierw znormalizować wartość w rejestrze. Nie wiem, czy jest w asemblerze instrukcja typu pobierz 8-bitową wartość z rozszerzeniem na 32-bity dla wartości signed lub unsigned. A od kiedy dane RGB są signed? LDRSB, STRSB czyta i zapisuje bajty ze znakiem....
- brak możliwości bezpośredniego dodania stałej do rejestru A nieprawda. Można odjąć stałą. Można odjąć wartość ujemną... Dodatkowo, organizacja pamięci programu w słowa... bllee, komplikuje to trochę odczyt danych z pamięci programu... w 51 jest 16 bitowy DPTR i jest pięknie, a tu... A tu masz aż trzy rejestry których możesz użyć jako szesnastobitowych...
Witam. Jeśli można to bym prosił kolegę asembler o jeszcze trochę dokładniejsze opisanie tego sposobu pomiaru napięcia bo bardzo mnie to zaciekawiło. 1.22 V to stałe napięcie odniesienia wytwarzane przez procesor , na jego podstawie przez wbudowane wzmacniacze operacyjne wytwarza on napięcie 2,56 V . To rozumiem. Jeśli napięcie zasilania podamy również...
w katalogu z AVRStudio gdzes masz katalog appnotes i tam biblioteki z funkcjami matematycznymi robiacymi dokladnie to czego potrzebujesz. A jezeli chodzi o C to jestem zdania ze i tak czlowiek potrafi zrobic program lepiej niz jakis tam kompilator... ;] zatem moja rada jest taka: poznawaj dalej asembler...
Witam Czy posiada ktoś kod do asemblera, wykonujący mnożenie liczb szesnastkowych?? Proszę o szybką odpowiedź.
Wskaźnik często lepszy, ale ostatecznej odpowiedzi udzieli tylko test. Wcześniej wspominałem już o tym, że być może fragment: (sin_180[k]* (long) ofset) kompilator przetworzy na mnożenie 32*32 bitów, odrobina asemblera (mnożenie 16*16 z 32 bitowym wynikiem) poprawi sprawę dwukrotnie! Sprawdź jak to jest u Ciebie.
mirekk36-znowu masz 100% racji-to zaczyna być nudne- może się w końcu pomylisz... Ale jak ktoś chce zacząć programować w asemblerze- to po co Mu mnożyć trudności. Będzie miał ich dość. Wiemy że można taniej lub prościej-ale po co na początek mnożyć byty ponad potrzeby. Dodano po 10 "A czy kupić jakąś płytę evaluacyjną, bo jeśli tak to jaką i czy do...
Co do problemu to chwilowo nic nie dodam. Zauważyłem jednak że nie zwalniasz zaalokowanej pamięci a w C++ to poważny błąd. Każdy new powinien być w parze z delete, a ponieważa alokujesz tablice powinieneś użyć delete[].
Ja mam takie zdanie że rzekoma "prostota" assemblera PICów wcale prostotą nie jest. Raz że instrukcji jest mało i żeby zrobić byle co to trzeba to poskładać ze 100 innych instrukcji (choćby mnożenie), to jeszcze jest wąskie gardło w postaci chyba tylko jednego pełnosprytnego rejestru (taki akumulator). Na AVR masz bogaty zestaw instrukcji (np. jest...
No to w takim układzie zerujesz sobie zmienną i w pętli dla każdej cyfry od lewej do prawej wykonujesz: mnożenie przez 10, dodawanie wartości cyfry... Jedyne czego w takim układzie potrzebujesz, to funkcji do mnożenia i dodawania liczb dowolnej długości.. do konwersji w przeciwną stronę liczbę dzieli się przez 10(lub przez inną podstawę) i resztę dopisuje...
Pamięć jest zorganizowana w komórki 16-bitowe, objawia się to np tym że wskaźnik programu wskazuje na słowo (2 bajty) a nie na bajt. Wszystkie instrukcje muszą być więc wyrównane do granicy dwóch bajtów. Jakkolwiek z poziomu samego programu pamięć flash jest zorganizowana bajtami, więc spokojnie można w niej umieszczać tablice bajtów bez utraty pamięci....
Żadnych floatów, same operacje na typach uint8_t oraz C-stringach. Dużo danych w pamięci programu...r Wystarczą operacje na wskaźnikach a już okazuje się, że w asemblerze jest mnożenie. Jak już wspomniał (at)trol.six trzeba porównać listingi asemblerowe.
Witam, mam problem z dwoma zadaniami na tablicach w asemblerze, mianowicie: 1) ustawić bit zerowy na wartość drugiego bitu każdej liczby w tablicy 2) każda liczbę tablicy pomnożyć przez następna, występująca po niej. mam już "ramy" programu- funkcje zmieniające typ wprowadzanych liczb, pobieranie liczb do tablicy z klawiatury, potrzebuje tylko kilka...
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 obliczający...
Witam. Mam mały problem z projektem. Muszę napisać algorytm równania, a wygląda to tak: wszystkie stałe mają być 8-bitowe i zapisane w kodzie U2, mnożenie wykonać metodą booth, piszę w asemblerze. Teraz pytanie jak pomnożyć np: -1/2 * 3,25. Wszędzie w necie są przykłady jak mnożyć same ułamki bez cześci całkowitych. Proszę o pomoc.
Nie ma najmniejszego problemu, choć oczywiście to wydłuży obliczenia. W sumie to Ty decydujesz o tym, co chowasz w rejestrach :] Moim zdaniem, mimo, że to strasznie wygląda, jest to rozwiązanie dość proste i skuteczne. Mantysę bowiem zapisujesz jako liczbę całkowitą. Pozdrawiam :)
Zacznij zatem od porzucenia Bascoma i przesiadki na C, skoro zależy Ci na wydajności. Przy okazji możesz wziąć procesor tańszy od AVR i z 10 razy szybszy, np. jakiegoś Cortexa. Zacznij zatem od sensownego udzielenia odpowiedzi na jego pytanie. Może jeszcze ARM i frytki do tego? Nie wiesz, nie pisz. Dawid88: Zagadnienie bardzo interesujące, bo sam wiem...
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...
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...
Witam. Gdzie znajdę gotowe procedury w asemblerze dla pic 16f84 np. mnożenie,dzielenie liczb 32-bitowych itp.
Przykładów mnoży elektroda: trudno uszkodzić czujnik podłaczając parasite a przy 3 przewodach lamenty co drugi post w tej sprawie Druga sprawa to trzy druty to już tłok przynajmniej dla mnie nawet RS puszczam po 2 drutach. Trzeci przykład przy dwóch drutach mamy dodatkowy switch w każdym punkcie pomiaru temp więc nie trudno sobie wyobrazić zastosowan...
Podejrzyj kod asemblera i zobacz czy na pewno wykonują się zmiennoprzecinkowe instrukcje. U mnie dodatkowo trzeba było włączyć optymalizację oraz podlinkować libm i libg z katalogu fpu kompilatora i tak zauważyłem, że sporo zależy właśnie od wersji kompilatora. Mnożenie wykonuje od razu sprzętowo ale do pierwiastkowania trzeba go zmusić. A pozwolę też...
Swoją drogą zastanawiam się po co w filtrze IIR stosuje się arytmetykę stałoprzecinkową, skoro zarówno argument (próbka z ADC) jak i skalowane współczynniki (B1, B2, B3, A2, A3) są typu całkowitego (int)....w związku z czym wystarczyłoby zwyczajne mnożenie typów całkowitych...robiw
A możesz do tego użyć FPU? wtedy problem byłby banalny - ładujesz mu na stos liczby w formacie BCD (przy okazji samo skonwertuje się na rzeczywiste), robisz mnożenie i wywalasz zawartość ztosu do pamięci, też w formacie BCD - w sumie trzy polecenia.
Upanie: Myślisz o potęgowaniu? Czy proponujesz może: np. 123'456'789 ** 987'654'321 (mod 7'654'321) __ (unsigned) fmod( powl(123456789, 987654321), 7654321); To by miało być szybsze? A ile poprawnych cyfr będzie miał wynik i z jakim prawdopodobieństwem? ----------------------------------------... W potęgowaniu...
Może skorzystaj z rozwinięcia logarytmu w szereg potęgowy? Np. jeśli 0<x<=2 to ln x = suma(od 0 do niesk) z (-1)^(n+1) ((x-1)^n)/n Oczywiście nie liczysz do nieskończoności tylko np. 5 pierwszych składników sumy... wtedy przy sprytnym podejściu będzie działać dość szybko, wystarczy mnożenie i dodawanie ;-) Dla wszystkich x>0 trochę gorzej......
Mnożenie przez dwa to to samo co przesunięcie o 1 w lewo - patrz kod który dołączyłem.
Ściągnij sobie rozkazy asemblera http://www.edw.com.pl/index.php?module=C... Asembler- język maszynowy... i spróbuj napisać jeszcze raz bo jak narazie to nie widać tu twojej pracy własnej.
Masz wykonać 1 mnożenie, które Twój sprzęt umie zrobić, bo ma taki rozkaz. Zamiast tego robisz jakieś cuda. Po co? Przeanalizuj jeszcze raz w czym problem. Napisz dobry algorytm (wystarczy słowami, ale ma robić to co chcesz zawsze i przy pomocy tego co potrafi 51). Potem pójdzie jak z płatka Albert
Autor się pyta, czy to możliwe, gdy tak naprawdę najwięcej zależy od niego. To, że jeden człowiek da radę, nie znaczy, że inny też może, każdy ma inne możliwości. Życie to nie telewizja, gdzie wystarczy tylko chcieć, żeby się udało. Możliwości umysłowe, finansowe, umiejętność pozyskiwania materiałów i narzędzi, przestrzeń na warsztat, czas, wytrwałość:...
ż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,...
Nie bardzo rozumiem co miałbym uzyskać przez mnożenie razy 2.W tej chwili robię to tak: MOV DPTR,#TABLICA MOVC A,(at)A+DPTR .. .. .. TABLICA: DB 0,1,2,3,4,5 DB 6,7,8,9,10,11 A interesuje mnie jak odczytać z tablicy coś co będzie po DW??
P=U*I*cos fi cos fi=P/(U*I) Za mało podałeś szczegółów, żeby wygenerować kod, ale na oko widać co trzeba zrobić (jedno mnożenie i jedno dzielenie). A swoją drogą... gdzie tutaj jest pytanie? Kolega podzielił się z nami swoimi potrzebami i tyle... pozostało nam sie domyślać wielu rzeczy (co to jest ten blokowy woltomierzi itd, co to jest za monitor?...
Tak masz rację, nie orientuję się w asemblerze, ładnych parę lat pisałem jakieś proste programiki na zajęciach i tyle... Potrzebne mi to tylko po to, żeby pokazać, że język drabinkowy może być uproszczeniem takiego programu w asemblerze i szczerze mówiąc tylko po to mi potrzebny ten program... nie chcę się uczyć asemblera, moje zadanie dotyczy czego...
SHL to mnożenie ale *2 czyli 3 x SHL x = x*2*2*2 czyli MOV AX, wejscie MOV BX, AX - AX=BX = wejście SHL BX, 4 - BX = wejście *16 (2*2*2*2) MOV CX, AX - CX=AX=wejście SHL CX, 2 - CX=wejście *4 SUB BX, CX - BX-CX czyli (wejście *16)-(wejście*4)=wejście *12=BX MOV wyjscie, BX -wyjście =BX kod jest poprawny
SHR, czyli Shift Right, binarnie przesuwa bity o podaną liczbę miejsc w prawo, z tego co pamiętam, nadpisując zerami, czyli zakładamy cx = 0000000000101011 teraz, po wykonaniu np.: shr cx,3 otrzymamy cx = 0000000000000101 | 011 jeżeli zatem wykonamy shr cx,16 , wszystkie bity powinny zostać przesunięte "poza rejestr" i nadpisane zerami (oczywiście mowa...
Zaprojektować układ mnożący dowolną liczbę binarną przez liczbę stałą 3. Liczba wejściowa ma być podawana z rejestru R1, a wynik zapisywany do rejestru R2. Rejestry 8-bitowe. AI: Czy układ ma być zrealizowany sprzętowo (np. w postaci schematu logicznego, VHDL/Verilog) czy programowo (np. kod w asemblerze lub C na mikrokontroler)? Schemat logiczny, tablice...
Witam. Mam taki problem z asemblerem. Chciałem przemnożyć rejestr ecx przez liczbę 5 z wynikiem w ecx. Czy istnieje taki rozkaz, który to realizuje a jeżeli tak to jak się go definiuje. Zaznaczam, że używam masma'a. Pozdrawiam.
Skorzystanie z rozwinięcia w szereg Taylora jest jednym ze sposobów. Chociaż wydawało mi się, że przybliża się rozwinięciem jakieś bardziej skomplikowane wyrażenia, gdzie stosunek dokładność/czas wykonania będzie korzystny. Assemblera znam z programowania na PC. W AVR używam C, na razie asm nie jest mi potrzebny. Z ciekawości zajrzałem do datasheeta...
h-doc ma rację. Dołączasz math.h i masz kalkulator z głowy. Mnożysz, dzielisz co chcesz. Tyloko uważaj żeby Ci nie zabrakło pamięci w procku. Bo w asemblerze to trochę roboty.
witaj Nie wiem co to za enkoder który ma zakres 576 imp/obrót ale nawet taki wynik w niczym nie przeszkadza. Przy zadawaniu kąta musisz zrobić tak jak napisał kolega: przemnożyć przez stała. I wcale nie musi być to operacja 32bitowa, jeśli nie potrzebujesz tak dużej dokładności :) Tak czy siak nie otrzymasz prawie nigdy pełnego stopnia, więc nie ma...
Ćwiczenia odbywaja sie na tym: http://www.micromade.pl/dsm51.htm Kod dokładnie wyglada tak: MOV B,#>1000;mnożenie przez 1000 aby wynik dzielenia MOV A,#<1000;otrzymać z 3 miejscami po przecinku LCALL MUL_2_2 Z boku jest komentarz ale i tak nie wiem jak działa to polecenie, poza działaniem MUL_2_2, ktore rozumiem. Znalazłem jeszcze opis ktory też...
Zgadza się. Moje przeoczenie. Mam jeszcze jedno pytanie. Docelowo wynik z ADC będzie dosuwany do lewej czyli do ADCH. Interesuje mnie wynik w formie 8 bitowej czyli pozostałe 2 bity w ADCL ignoruję. Aby otrzymać wartość w woltach przy napięciu referencyjnym 5V muszę 8bitową liczbę z ADCH pomnożyć przez ok 0.0195. Nie znalazłem nigdzie w sieci jak mnożyć...
mnożenie liczb asembler mnożenie liczba asembler algorytm mnożenie
wieże philips impulsowy zasilacz ledów zmywarka pompa myjąca siemens
Jak podłączyć stabilizator napięcia LM317? Maksymalna temperatura agregatu lodówki - wartości i przykłady