Witam, mam prośbę do kogoś kto zajmuje się assemblerem o wyjaśnienie mi pewnego problemu. A mianowicie muszę wykonać dzielenie binarne, znalazłam w książce w sumie to co mnie interesuje lecz nie bardzo rozumiem dlaczego to działa. W załączniku znajduje się ten fragment wraz z kodem którego nie rozumiem. 1. Który bajt jest bardziej znaczący a który mniej?...
Witam Chciałem się dowiedzieć jaki jest rozkaz w assemblerze AVR do attiny2313, żeby podzielić 2 liczby przez siebie? I czy można rejestry czy trzeba a i b? Wiem, że jest rozkaz DIV, ale do AVR nigdzie go nie widziałem. Z góry dziękuję za odpowiedź :) Pozdrawiam
A co do patentu to jeśli zmniejszysz interwał czasu w którym następuje zliczanie i późniejsze zerowanie licznika to te 8 bitów także wystarczy bo będzie to swoiste dzielenie. Niestety koledze zależy - jak mniemam - by liczył impulsy 1:1, zatem dzielenie ich nie wchodzi w rachubę.
Witam, mam problem z programem w języku assembler. Oto jego treść: Program, który czyta z pliku tekstowego dane i wyświetla co M-ty znak z co N-tej linii. Nazwa pliku, M, N (1 lub 2 cyfrowe) są podawane w linii komend jako parametry wywołania programu. Pisząc program nie używać IO.MAC program ten ma działać na procesorach 32bit i kompilować się w NASM...
Przyznam się bez bicia, że z Assemblera jestem noga:( a mam do napisania na zaliczenie program na ProEmulator2beta5c w mickroprocesorze 8051, a nie potrafię go nawet ruszyć:( Bardzo proszę o pomoc!!! Oto treść zadania: Prezentacja liczby 4-cyfrowej na wyświetlaczu LED. Kody odpowiadające poszczególnym cyfrom należy umieścić w czterech kolejnych komórkach...
najpierw odpal bascoma i napisz $regfile = "attiny2313.dat" $crystal = 8000000 $baud = 2400 Do Print "Dlaczego nie chcesz dzialac " Waitms 500 Loop i jak to pójdzie to się baw w asemblerze. a mam jakiś schemat z tuta z ektrody, w dp9 pin 5 na mase i 2 i 3 nadawanie/odbiór, poszukaj jak to bedzie na forum, reszta pinó sobie wisi. proponuje fuzy bitw...
Ah, maszyna W ;] Pokręciłeś z algorytmem. Musisz zrobić odejmowanie w pętli. Przed pętlą ustawiasz C na zero. Od A odejmujesz B. Sprawdzasz, czy w akumulatorze wartość większa od zera. Jeśli większa, to zwiększasz C o jeden i wykonujesz ponownie pętlę. Jak w końcu będzie mniejsza od zera, to kończysz pętlę, a wynik z dzielenia masz w C.
Dzień dobry, mój problem jest następujący: Napisałem task scheduler z wywłaszczaniem, zaprogramowałem na urządzenie (arduino uno programowane bezpośrednio przez isp(bez bootloadera). I dziwne rzeczy zaczynają się dziać gdy próbuję podzielić dwie zmienne typu uint32 (4 bajty). Program (dzielenie) napisany jest w c, natomiast przerwanie w assemblerze....
Dostaje dane o wilgotności z tego czujnika (12 bitów) i mam je zapisane w dwóch rejestrach. Poszukuje wszelkich materiałów dotyczących tego jak przeliczyć tą 12-bitową liczbę na wartość w % RH. Podobnie z temperaturą. Wogóle poszukuję przystępnych materiałów zawierających opisy procedur do mnożenia, dzielenia itp. liczb całkowitych i ułamkowych w assemblerze.
:arrow: slawek55 możesz też zanegować bity, dodać '1', zrobić przesunięcie w prawo o jeden bit a następnie powrócić do zapisu ujemnego (lub pozostawić jak jest). Całe 3 instrukcje assemblera....
Witam. Pierwszy raz mi nie powiodła się przesiadka z asm'51 na asm'avr - ze względu właśnie różnorodności poleceń itp. Teraz podjąłem się drugi raz i nie jest tak źle - piszę po kolei swoje odrębne procedurki - tak jak piszesz muszą zajmować niestety więcej pamięci ale za to atmegi mają jej sporo w porównaniu do '51. Jeśli ty jesteś "skrzywiony" to...
tutaj mam kod programu (co prawda dużo bardziej skomplikowany) sam program napisany w builder c++ z procedurami assemblerowymi. mam nadzieje ze sie przyda :)
bez urazy, kolego olekewaagata, zanim zaczniesz kogoś pouczać przeczytaj tekst ze zrozumieniem! ;)) Autor wątku miał problem z propagowaniem przeniesienia - moja odpowiedź dotyczy DOKŁADNIE zalecenia, jaką instrukcją uwzględnia się przeniesienie. A podany przeze mnie przykład dotyczy sumowania, z jakim ma problem autor - czyli dokładnie liczby _16bit_...
Witajcie. Postanowiłem napisać ten temat z jednego powodu: Siedzę już dłuższy czas na próbie programowania w Assemblerze i wciąż nie mogę dojść do tego co mam zamierzone... Chcę zrobić prosty kalkulator do obliczania podstawowych obliczeń (dodawanie, odejmowanie, mnożenie i dzielenie). Do tej pory mam coś takiego jak zamieściłem poniżej. I teraz pytanie...
Przede wszystim, jesli oczekujesz pomocy, musisz podac na jaki procek ten assembler. Po komendach widze ze nie jest to x86, czyli PCet. Byc moze chodzi o jakis mikrokontroler. Nie wiem czy wiesz, ale assembler nie ejst przenoscym jezykiem i nie ma jakies jego standardu - w przeciwienstwie do Ansi C czy pascala. Dalej nie wiem czy wiesz, ze nawet jesli...
Pierwsze pytanie to w jakim zakresie może być wartość input? Cały uint32 czy może mniej np. 10, 15, 20, 25 bitów? 1. 125e6 możesz przecież skrócić do 125 bez jakiejkolwiek straty dokładności. Wtedy przód zmienia się w 2^32/1000000=4294,97 co dosyć dobrze można zaokrąglić do 4295. Ostatecznie formuła będzie 4295*input/125 i będzie działała o ile input...
System liczbowy jak każdy inny - zamiast marnować bajt pamięci na jedną cyfrę mógłbyś w nim przechowywać znacznie więcej. Ale to już akademicka zabawa. Co do dzielenia - możesz zrobić tak, jak dzielenie pod kreską ;) Gdzieś miałem algorytm rozrysowany, ale zapodziałem :( Jak znasz assemblera, to moze wyczaisz - jest to w 3J wykonane: Edit: znalazłem...
Witam, ... Czy to dzielenie będzie wykonane jako 1 operacja, czy zostanie rozbite na ileś tam poleceń asm. I czy przerwanie nie nastąpi w trakcie wykonywania się tej funkcji i czy przez to nie mogą pojawić się błedy? W AVR na wszelki wypadek wyłaczałem przerwania na czas wykonywania tego typu działań. ... 1) Nie do konca rozumiem pierwsze pytanie, tak...
Tu: jest procedura dzielenia liczby 4 bajtowej przez 2 bajtową, trzeba tylko zwiększyć dzielną do 6 bajtów i liczbę obiegów pętli z 32 to 48. PS zakładam że jeśli bawisz się assemblerem to wiesz o co chodzi
Witam Mam napisać w assemblerze dla układów 8051 program wykonujący dzielenie w kodzie u1. Moze i jest to proste, ale ja z tym programem ma styczność pierwszy raz i zupełnie nie wiem jak się za to zabrać. Proszę o pomoc (np. schemat co w jakiej kolejności mam co wykonać, moze być też kod tego programu :-P) Pozdrawiam
Witajcie. Napotkałem ostatnio na pewien problem, którego nie mogę przeskoczyć, (nie za bardzo rozumiem komunikat kompilatora) :/ Programuję w WinAVR. Procesorek to ATtiny2313. Funkcja w której występuje błąd: void skalowanie(void) { unsigned char i=0,j=0; unsigned int pomiary=5; unsigned int srednia=0; unsigned int obroty; unsigned int...
dzielenie int/int lub long/int (signed/unsigned) zajmuje w tych prockach 18 cykli i realizowane jest za pomoca assemblerowego mnemonika REPEAT #17. procesor wykonuje wtedy 18 powtorzen nastepnej instrukcji (DIV ...), dlatego twoj wskaznik programu 'wisi'. dzielenie long/long jest dluzsze, bo musi byc robione na raty. a tak w ogole to zamiast filozofować,...
Hej, próbuję napisać w assemblerze (Intel 8086 z dostępem do rejestrów 32 bitowych) program wykonujący szybkie podnoszenie modularne. Niestety coś tutaj robię źle. Najprawdopodobniej namieszałem bardzo w dzieleniu i mnożeniu, ale nie wiem, jak to naprawić. Byłbym bardzo wdzięcznym za pomoc. Poniżej zamieszczam mój kod: [syntax=asm].MODEL FLAT, C .STACK...
>Przeczytaj kolego tamtem swój post i objasnij co miałeś na myśli, bo to jest jeden wielki chaos, z którego nie wynika żadna w sumie użytaczna myśl - no może poza jedną: liczby od cyfry nie odróżniasz. Nie do konca rozumiem co miales na mysli - nigdzie nie robilem roznicy pomiedzy cyframi i liczbami - wiec zwroc uwage na to co komentujesz. Nie wiem...
Witam wszystkich! Mam taki problem, mam napisac projekt (pewnie prosty dla wiekszosci) w assemblerze badz w C, temat " Dzielenie liczb 16 bitowych ze znakiem w kodzie U2" i dlatego zwracam sie z prosba czy ktos ma moze napisany (przez przypadek) taki program, albo pomoze mi w jakikolwiek sposob go zrealizowac. Program ma dzialac na procesorze 8051,...
Witam. Jak programowałem '51 (zresztą dalej programuję) to natrafiłem kiedyś na "kopalnię" procedurek jak mnożenie/dzielenie liczb wielobajtowych, różne konwersje itp... prawie zawsze piszę swoje procedurki ale zdarzyło mi się już, że szybko i jednorazowo musiałem pomnożyć liczby 6bajtowe a potem podzielić przez jakąś stałą i tutaj wykorzystałem gotowe...
wartosc z ax dzielisz przez 10, reszte z dzielenia odkładasz na stos, to Co zostało znowu przez 10, reszta na stos itd aź to co zostaje bedzie rowne zero. Ze stosu wartość pobierasz, dodajesz kod ASCII '0' i na ekran, i tak az do konca stosu
siur. 1. 16bitowy procek o tak niskiej wydajnosci obliczeniowej? (8MIPSow) wiekszosc instrukcji w 2 cyklach? brak takich podstaw jak mnozenie, nie mowiac juz o dzieleniu? 2. ortogonalnosc tego procesora jest daleka od idealu. pewnie ze wiele instrukcji moze byc z wieloma trybami adresacji, ale co z tego skoro jeden operand musi byc poprzez (at)Rxx,...
Da się to jakoś zrobić ale to będzie musiała być niezła dłubanina w assemblerze. Trzeba wydłużyć długość Timerów do co najmniej 32b (a to tylko programowo się da). Dodano po 1 A mnożnik ma być stały czy ustawiany? Jak ustawiany to w jakim zakresie? I pytanie poza konkursem: do czego to?
przemo_wielki, wlasnie o to chodiz ze dodawanie cyfr mam na pewno dobrze zrobione bo napisalem juz dodawanie cyfr z tym wyjatkiem ze wynik musi byc rowniez cyfra, glownie chodzi mi o wyswietlanie liczby dwucyfrowej i z tym mam problem (te dzielenie przez 10 i wypisywanie reszty i czesci calkowietej), gdzie mam blad ze zle mi wypisuje???
Wiem. Dlatego napisałem że to dotyczy 8-miu bitów. A Ty pamiętaj, że główna "zaleta" PICów czyli prostota ich assemblera przemawia tylko na ich niekorzyść. AVR ma o wiele bardziej skomplikowany assembler i dlatego 1MIPS AVRa będzie większy niż 1MIPS PICa. Akurat 51 był nawet lepszy ad AVR, bo miał i dzielenie, ale był aż 12-taktowy. Są i jednotaktowe,...
No i właśnie o to mi chodziło gdy pisałem żebyś o to nie pytał ;) Bo tak czułem że nie będziesz umiał tego wyświetlić ;) Wynik niestety jest 24-bitowy więc nie może być w dwóch adresach. Ma być w trzech. To takie trochę tłumaczenie jak chłopu na miedzy, bo to niby jedna liczba i ma jeden adres, ale chodzi o to że ma 3B i już. Więc jako 16-to bitową...
[syntax=asm].model small .stack 100h .data tablica db "wynik=(a+3*b)/(c-d)",0ah,0ah,"$" a db 9 b db 4 mon db 3;mnozenie c db 6 d db 3 wynik db 0 .code start: mov ax, (at)data mov ds,ax mov dx, offset tablica mov ah,09h int 21h p1: mov ah, a;przypisanie a do ah mov al, b;przypisanie b do al mul mon ; pomnozenie mon*al( wynik w ax) mov al,ax add ah,al;...
Proponuję [url=]kilka prostych kodów do nauki Assemblera
Tak, dokładnie tak samo się zamienia (oczywiście dodając). Jednak w momencie, gdy wynik będzie dwucyfrowy, co już tak się nie da. Najpierw trzeba podzielić przez 10 i wyświetlić resztę z dzielenia (dodając owe 30h), a potem pozostały wynik.
---- Building project: zadanie_25.ncp ---- Building file... : C:\Documents and Settings\Piter\Pulpit\u_kontrolery\u_kon... C51ASM: advanced C51 macro assembler Version 1.0 (01 Sept. 2009) Copyright (C) 2009 Atmel Corp. Pass 1 completed with no warnings and no errors Pass 2 completed with no warnings and 2 errors Segment...
To podpowiem Ci jeszcze złośniku, że obroty stosuje się na poziomie assemblera tylko dlatego, że niektóre maszyny tylko przez obrót potrafią przesunąć bity do przeniesienia. I jak spojrzysz na całość to nie chodzi o obrót tylko o przeniesienie i o przesunięcie całej, wielobajtowej liczby. I chociaż absolutnie na to nie zasługujesz przy sposobie w jaki...
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. Potrzebuję napisać program, który sprawdzi, czy wprowadzona liczba naturalna z zakresu od 1 do 255, jest podzielna przez 7. Chciałem to zrobić przez resztę z dzielenia, bo gdy wyjdzie równa 0, wyświetli poprawny komunikat. Ale program nie trybi, chociaż błędu nie wywala żadnego, a w konsoli wyświetla chociażby to, że 4 jest podzielne, a 7 nie...
Dzielenie to w zasadzie odejmowanie. Nie napisałeś z jaką dokładnością ma to działać. Czy dzielenie z resztą czy do iluś miejsc po przecinku ? W zasadzie to nie ma znaczenia jaka dokładność, byleby cokolwiek działało. Z tego co pamiętam to reszta działań operuje na cyfrach czyli np. maksymalne działanie mnożenia to 9x9, więc przy dzieleniu pewnie ze...
dzieki za ZIP-a i RAR-a znowu troche wiadomosci sie zdobyło.zastanawiam sie nad sposobem H-DOC-a.ciekawy sposób- daje w końcu dla powiedzmy 1023bitów liczbe 1500 (bład o 1 ale to sie da poprawić)zapisana binarnie, czyli 101 1101 1100 (5 13 i 12)tylko jak to przetworzyć na BCD, bawiłem sie z binarnych na decymalne i hex-y oraz odwrotnie a o BCD znam...
Błąd powstaje gdy iloraz przekroczy dopuszczalną ilość bitów. W dzieleniu N-bitowym, iloraz musi się zmieścić w N-bitach (pamiętając, że dzielimy liczbę 2N-bitową przez N-bitową). Przykładowo dzielenie 16-bitowe (dx:ax) [syntax=asm]mov dx,0xFFFF ; dzielimy 0xFFFFFFFF mov ax,dx mov cx,1 ; przez 1 div cx;First chance exception: Address 0x0040190C Integer...
Jak w asemblerze (Pentium) uzyskać resztę z dzielenia liczby 64 bitowej przez 32 bitową, iloraz mnie nie interesuje. DIVL owszem działa, ale tylko wtedy gdy iloraz jest mniejszy niż 2^32 Asembler mojego kompilatora nie lubi DIV RAX. Nie dodałem, że liczba 64 bitowa jest iloczynem dwu 32 bitowych. Znak "%" to reszta z dzielenia (mod) Aby obliczyć: (a*b)...
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...
Ja pisałem nie w sensie kodu tylko logiki. Po co urządzenie ma dzielić przez zero? Jeżeli w algorytmie dopuszczamy do takiej sytuacji (bez reakcji na to krytyczne zdarzenie) to algorytm jest do kosza. To znaczy wykrycie dzielenia przez zero powinno zatrzymać jakiekolwiek dalsze przetwarzanie dalszych obliczeń w programie (takie jest moje zdanie). Takie...
dziel FFFFFFFFFFFFF000 przez 00000AAAAAAAAAA - ucierpi nieco dokładność, ale jest to do wykonania na 64 bitach ALU. Wynik przesuń o 6 w prawo (otrzymasz 6 miejsc binarnych po przecinku, oczywiście przesunięcia dokonujesz modyfikując cechę wyniku). Generalnie dzielenie np liczb 32 bitowych na FPU odbywa się w rzeczywistości z wykorzystaniem 96 bitów,...
Witam. Polecenie: Napisz program przesyłający do rejestru AX resztę z dzielenia liczby naturalnej znajdującej się w rejestrze BX przez liczbę dodatnią znajdującą się w rejestrze CX. Zastosuj metodę wielokrotnego odejmowania. Jak na moje można tak: [syntax=asm] MOV ax, bx petla: cmp ax, cx JNL label JMP koniec label: SUB ax,cx...
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'...
Najpierw poczytaj co to są liczby stałoprzecinkowe i zmiennoprzecinkowe. Takie dzielenie jak tu zostało zaprezentowane jest na liczbach stałoprzecinkowych. W takim przypadku to ty decydujesz gdzie będzie przecinek i czy w ogóle będzie. Po za tym powtórzę się za kol koodpl : po co takie rzeczy rzeźbić w asm?
Google Ci wyłączyli? U mnie na hasło "dzielenie nierestytucyjne" wyrzuca to, co trzeba.
Kriti:zależy co robisz... jak np jakąś obróbke grafiki (obsługa kamerki albo wyświetlacza) czy dużej ilości danych to jak najbardziej się opłaca. Kilka linijek assemblera (a ARM ma strasznie prosty assembler) i możesz wyciągnąć 100% większa prędkość działania funkcji. Poza tym w niektórych miejscach (np uproszczone algorytmy dzielenia) wstawki w assemblerze...
JESLI SZUKASZ INFORMACJI TO NIE CZYTAJ TEGO AKAPITU (; Padla inicjatywa stworzenia zestawu przyklejonych tematow, ktore odpowiadalyby na pytania powtarzajace sie czesto na forum - takie mini kompendium. Wypali to tylko jesli mnie wspomozecie, bo wszystkiego to ja nie wiem, a moje doswiadczenie jest bardzo mizerne. Dlatego prosze was o pomoc w tworzeniu...
Sprawdzam, co jest przydatne - x/0; daje "undefined operation" a nie "div by zero" Akurat ostatnio się tym bawiłem i aby dzielenie przez zero wywołało faulta (Usage Fault), to trzeba sobie to włączyć w odpowiednich rejestrach rdzenia. 1. Jak to się dzieje że r1 jest argumentem funkcji? Gdzie jest to opisane? r1 nie jest argumentem funkcji, tylko jej...
Przyznam się bez bicia, że z Assemblera jestem noga:( a mam do napisania na zaliczenie program na ProEmulator2beta5c , a nie potrafię go nawet ruszyć:( Bardzo proszę o pomoc!!! Oto treść zadania: Prezentacja liczby 4-cyfrowej na wyświetlaczu LED. Kody odpowiadające poszczególnym cyfrom należy umieścić w czterech kolejnych komórkach wewnętrznej pamięci...
Celem projektu było zbudowanie odtwarzacza MP3/WAV, używając jedynie układu FPGA, pamięci RAM i przetwornika stereo DAC. Układ wykorzystuje 32-bitowe jądro procesora programowego pracujące przy taktowaniu poniżej 60MHz, które odpowiada za dekodowanie MP3 bez wsparcia sprzętowego - poza wykorzystaniem jednocyklowych operacji na mnożniku. Część sprzętowa:...
Poza tym pobieżnie przejżałem DS ATTiny i nie widzę instrukcji analogicznej do DIV w 8051?? Jak w nim dzielić liczby?? A czy znalazłeś MUL? ;) Do takich obliczeń niestety trzeba pisać własne funkcje. Można mnożyć i dzielić poprzez wielokrotne dodawanie lub odejmowanie danej liczby, ale to jest oczywiście dosyć mało optymalna metoda. Oczywiście mnożenie...
Algorytm którego używam przesuwa bity, ale równie dobrze można dzielić tak jak piszesz, tylko jak używam dzielenia to program "rośnie" wiec chyba pozostanę przy sprawdzaniu najstarszego bitu i OR. Rośnie o kilkadziesiąt bajtów. Tyle ile ma procedura biblioteczna dzielenia liczb 16 bitowych ze znakiem. Ale pewnie dzielenia prędzej czy później będziesz...
Według mnie jest jedna prosta regóła: - Jeśli w gre whodzi szybkość np jeśli program musi hodzić błyskawicznie to polecam assembler który pozwala budowanie z takich 'pojedyńczych cegiełek'... - Jeśli zaś w gre whodzi efektywność to lepiej jest użyć języków wysoko-poziomowyh.. takih jak C... pozwala on używanie z takich jusz gotowyh 'prefabrykowanyh'...
Posluguje sie komendami jakie nam wpojono na zajeciach, rozumiem ze to jest assembler. No ale odmiany assemblera tez sa chyba rozne. Zreszta moze ponizej jakis przykladowy programik aby pokazac co jest co: ;DZIELENIE DWOCH LICZB LJMP START ORG 100H START: LCALL WAIT_KEY MOV R2,A LCALL WAIT_KEY MOV B,A MOV A,R2 CLR C DIV AB LCALL WRITE_HEX MOV A,B LCALL...
(at)kamyczek , dopóki nie pokażesz jakiegoś super-optymalnego kodu, to ja sobie mogę pisać że jestem mistrzem kung-fu i będzie to tyle samo warte co Twoje zapewnienia, że jesteś lepszy w optymalizacji od kompilatora. Sorry. Ta dyskusja jest bezcelowa, ponieważ założenia mogą sprawić że jej główna teza jest prawdziwa lub fałszywa. Przykładowo miganie...
Każdy, kto rozważa przesiadkę z ośmiobitowego mikrokontrolera na coś mocniejszego i o większych możliwościach naraża się na pewien problem, który łatwo przegapić, bo przy ośmiu bitach pojawia się sporadycznie. Ale pomnóżmy liczbę bitów przez dwa, cztery, albo i osiem, i zaczynają się schody. Problem ten to błędy w krzemie. Kilka lat temu zaprojektowałem...
Przepraszam, rzeczywiście podałem zbyt skromny opis mojego problemu. Forumowicze, którzy spotkali się już z moimi postami wcześniej mogli zauważyć, że próbuję stworzyć sieć z mikrokontrolerów realizujących obliczenia równoległe algorytmami genetycznymi i dla prostych aplikacji AG już to zrobiłem (9 procków, kwarc 12MHz, PLL(5,2) MAM(2,4)). Monitoruję...
- Program napisany w notatniku, czyli czysty assembler. - W środku naprawdę nie ma czego oglądać płytka i parę kabelków. - Zdjęcia istotnie tylko testowe a temperatura 124 stopnie pochodzi z żarówki halogenowej na biurku. - Całość nie była jeszcze zamontowana. Obecnie jest podłączona prowizorka testująca procedury otwierania i zamykania. - Istotnie...
Kiedyś do tego problemu podchodziłem... Jeśli miałoby to hulać w przyzwoitej prędkości należałoby pisać w asmie. Jednak implementacja obliczeń ułamkowych, w tym dzielenia... no cóż, nie mogę napisać, że się nie da, ale... Istnieje jeszcze opcja taka - napisać całość w C i ręcznie zoptymalizować wynikowy plik w assemblerze. Myślę, że najlepszym wyjściem...
A to akurat wiem. Multipleksowanie już robiłem wcześniej przy projekcie metronomu, ale wtedy pisałem w C i nie było problemów. A teraz nie wiem jak się zabrać za samo ustawienie odpowiednich poziomów na port 1. Wcześniej poprostu miałem zwykłą tablice cyfry[9] po której się poruszałem. A teraz nie do końca pewnie czuje się w tym assemblerze. Zdaje,...
Przy ujemnych to jest wartość w kodzie U2(uzupełnienia do 2), a więc żeby wyłuskać z tego temperaturę musisz tą wartość zanegować i dodać 1. Tyle tylko mogę ci podpowiedzieć, bo nie znam assemblera. Zamiast dzielenia przez 16 możesz przesuwać wartość, 4 razy jak się nie mylę, jak się mylę to niech mnie ktoś poprawi.
Już mnie zmęczyło to tłumaczenie. Dlaczego niektórzy z Was czytają z jakimiś klapkami na oczach. Proszę przeczytać uważnie to co napisałem i nie wmawiać mi, że chcę zmierzyć coś przy pomocy machania nóżką. Tłumaczyłem już czym ma być machanie nóżką. A wiesz jak nas już zmęczyło tłumaczenie Ci na czym polega Twój błąd? Niemniej jednak - choć wysiłek...
Proszę o pomoc bo nie pamiętam już pewnych rzeczy z Assemblera. Chodzi o obliczenie w kodzie liczby sięgnięć do pamięci, operacji i zapisów. Moje wątpliwości budzą indeksy w tablicach - o ile pamiętam, muszę liczyć jako sięgnięcie i operację każde odwołanie w którym jest zwiększenie indeksu a także dodawanie stałych (czy dodanie stałej oprócz tego że...
Kolega zresztą ma jeszcze inny problem z tym wzorem związany z tzw "wrap around" behavior (nie pamiętam terminu po polsku) Może zamiast rzucać hasłami, to napisz jaki to dokładnie problem i w którym dokładnie miejscu, bo mnie się wydaje, że akurat tego tam nie ma - nawet jeśli X0 jest większe od X1, to w mianowniku dzielenia będzie tak czy siak to...
Zainspirowany podcastami o historii komputerów (podcast #19 - Słowo o architekturze i słowniczek pojęć By lepiej zrozumieć zagadnienie pamięci, musimy najpierw poznać architekturę, a dokładniej to części składowe procesora. Nie będziemy zagłębiać się w tajniki najnowszych Ryzenów czy i9, ani w sekrety GPU. Spokojnie możemy sobie odpuścić tournée po...
Nie wiem po co każdą instrukcję ldr Twój program wykonuje warunkowo. To akurat jest oczywiste. Procesor bierze to, co jest. Taki ma program, to taki wykonuje ;p Powinieneś raczej zapytać dlaczego napisałem taki program ;p Otóż nie wiedziałem co robi instrukcja ldrlo. W opisie instrukcji ldr nie było nic o zwiększaniu rejestru wskaźnikowego. Myślałem...
mam dwa kody które napisałem do szkoły teraz dostałem zadanie połączenia tego by wyglądało jak kalkulator o to kod FUNKCJI : uses crt; VAR a,b,l,wynikh,x1,x2:integer; o, d,c: char; e,s:string; reszta,i,j:integer; wx,wy,w,x,y,a1,b1,c1,a2,b2,c2,pdelta,del... wynik:array[1..20]of integer; function dodawanie(a,b:integer):i...
Albo jak radzi mirekk - tym bardziej że m8 kosztuje około 8zł Albo wywal instrukcje STR i FORMAT. Formatowanie wyniku zrób jako dzielenie zwykłe (liczba całkowita) i po kropce MOD (pozostałość z dzielenia). Ewentualnie napisz wszystko jako wstawka assemblerowa, ja tak zawsze robiłem i było ok :-)
Pewnie. A później amatorzy programowania dzięki takiemu podejściu zapisują proste zmienne jako float albo nie wiedzą jaka jest różnica dla działania programu pomiędzy dzieleniem przez 8 a dzieleniem przez 9. Wiedza o asemblerze jeszcze nikomu nie zaszkodziła czego nie można powiedzieć o niewiedzy. Odpowiedziałbym jednak cytatem, że "premature optimization...
Układu SID (6581 stary i 8580 nowy), będącym muzyczną orkiestrą komputera Commodore 64 nie trzeba nikomu przedstawiać – między innymi dzięki jego brzmieniu owa maszyna osiągnęła tak dużą popularność. Warto tylko przypomnieć, że SID ma jedynie trzy kanały, ale umiejętności programistów potrafiły z niego wycisnąć dźwiękowe cuda. Na dzień dzisiejszy...
Też kiedyś pisałem w asm ale to było w czasach gdy kompilatory C były drogie i niezbyt inteligebntne. Teraz czasem robię wstawki w asm ale to bardzo rzadki przypadek. Dlaczego wolę C? Np taki kod: [syntax=avrasm]b2d ; konwersja 16-bit bin na dec ; dzielenie przez 1000d = 0x03E8 movlw0x03 movwfxw1 movlw0xE8 movwfxw0 callb2da movwfst1 ; dzielenie przez...
Nie... dzielenie wymaga więcej cykli procesora... (zależy też jaki sie używa procesora ale zawsze dzielenie jest bardziej cyklochłonne od przesówania binarnego) jeśli to procesor ośmio bitowy a program ma być w assemblerze to nawet nietrzeba takich operacji wykonywać gdyż można odrazu podzielić wyraz na dwa bajty poprostu odczytując starszy bajt a potem...
Witam !! Przejde od razu do rzeczy (btw: programuje w assemblerze): ADD - dodaje SUB - odejmuje MUL - mnozy ale nie potrafie znalezc instrukcji dzielenia.. w zwiazku z powyzszym prosba o pomoc ... jak wykonac dzielenie (np dwoch rejestrow)?? ... cos jak DIV w rodzinie '51.... Z gory dzieki za pomoc Pozdrawiam
Bolek: 1.Żeby nie było przesunięcia tak jak mówisz, to musisz użyć liczb ujemnych. Bo jak masz liczby -20 i 20, to skalowanie x3 zamieni to na -60 i 60 - wszystko ok Jak masz liczby 10 i 20, to skalowanie x3 zamieni na 30 i 60.. środek kwadratu jest już zupełnie gdzie indziej 2.Żeby otrzymać dobrą płynność powinieneś użyc wyników z mnożenia/dzielenia...
Procesor to atmega32 taktowana 12Mhz. Int 2 bajtowa z bitem znaku. nalezy nie korzystac z dzielenia, tylko uzyc odejmowania A jak niby tego dokonać bez dzielenia:?: Caladan: Hyymm.... nie wiedziałem że tak też się da... Zastanawia mnie tylko jak wykonuje się w C działania na tym kodzie i o ile dłużej takie operacje się wykonują (jeżeli tak jest). EDIT:...
maxymalna ilosc znakow (czyli ewentualny znak, czesc calkowita, kropka, czesc ulamkowa [wliczajac zera wiodace!] ) + 1. dodac nalezy, ze jesli chcesz ulamki, to musisz sobie ich obsluge zrobic sam, co nie jest takie trudne [; cala liczbe traktujesz wtedy jako przemnozona (na przyklad) przez 100 - daje ci to dwa miejsca po przecinku. czesc calkowita...
A poza tym to dlaczego 64615 to u Ciebie FC66h a nie FC67h? Nie pomyliłeś się czasem przy obliczeniach? Jak najbardziej moja pomyłka. Aby to zrobić zawsze musisz zapisać całą liczbę w systemie szesnastkowym ale nie rozumiem dlaczego uważasz ten sposób za zły Ja uważam za dobry.Pisałem ze chodzi o profesora prowadzącego zajęcia. Jednak Twoje wyjaśnienie...
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...
No tak, zapomniałem o kolejnej istotnej rzeczy. Oczywiście piszę w assemblerze, gdybym pisał C to wiadomo że nie byłoby problemu. ;) Znalazłem jedynie funkcję zwykłego dzielenia na oficjalnej stronie atmela, ale dzielenia modulo nie ma.
W pierwszym poście trochę lepiej opisałem sposób tworzenia obrazu. Dziękuję za pozytywną ocenę, postaram się odpowiedzieć na wątpliwości i pytania. Przyczepić się mogę jedynie tego, że na schemacie złącza nie są opisane - powinno być bardziej sensownie, a nie SV1, SV2 itp, bo nic to nie mówi. Masz rację, poprawiłem złącza. Nie używam standardowego KANDA,...
No dobra, tylko po co te przesunięcia bitowe skoro chodzi Ci o dzielenie? Czy istnieje na świecie kompilator tak głupi, żeby faktycznie dzielenie przez potęgę dwójki realizować "wprost" zamiast przez przesunięcia (na architekturze dla której ma to sens)? Czy zamiast tego: unisigned int mV = ((unsigned long int)ADC * 3300 * 5) >> 10; to nie jest bardziej...
Witam. Wykonałem miernik częstotliwości wg warmar2.w.interia.pl/. Miernik wyświetla prawidłowo tylko do 10MHz (autor projektu podaje zakres do 20MHz). Jak policzyłem, sygnał po przejściu przez preskaler 1/16 ma częstotliwość 650kHz (10MHz/16) i nie jest prawdą, że preskaler na 74S74 jest za wolny co sugeruje autor projektu. Według mnie jest błąd programu,...
No to moze 1wire bedzie juz najlepszym przykladem. Wiadomo, ze tam sie licza us i nie mozna czegos pozniej zrobic. Chyba najgorszym - już pisałem, że do obsługi 1-wire należy użyć UARTu. Tylko, ze to nigdy nie bedzie natychmiast. Tego nie rozumiem w Twojej wypowiedzi - jakim sposobem RTOS zrobi cos natychmiast ? Jesli to prawda, to rzeczywiscie bylaby...
Witajcie moi drodzy Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części zademonstruję jak używać wyświetlacza 7-segmentowego z PIC18F2550 . Kod obsługi wyświetlacza będzie oczywiście napisany w oparciu o przerwania i timery . Cały proces powstawania układu na płytce stykowej oraz programu na PICa przedstawię krok...
- musimy w programie zrezygnować z użycia ERRNO do kontroli operacji zmiennoprzecinkowych Ale przecież opcja -fno-math-errno sprawia, że flaga ERRNO nie jest ustawiana dla tych funkcji matematycznych, które są wywoływane jedną instrukcją, tak jak na przykład pierwiastek, mnożenie dzielenie etc. Dla funkcji które wymagają litanii assemblerowej ERRNO...
Jak nie wiesz to nie pisz.... Oh!!! Przypraszam TzOk! Mozesz inaczy wyrazyc! Moja skromne wiedzy mi nie pozwala ci powiedzic ze nie masz racji. Na pewno nie wiem wszytkiego. Napewno ten problem byl rozwiazany tak jak poradzilesz albo za pomoca TpPatch.... Prawda ze pamiec podstawowa (komputer z processorem rodziny Intel, AMD...) jest do 640 kB, postawilem...
Volkov Commander Menedżer plików pracujący pod kontrolą systemu operacyjnego DOS (może być uruchamiany także pod Windows), bliźniaczo podobny do słynnego Norton Commandera. W stosunku do swego poprzednika jest bardziej funkcjonalny. Napisany w Assemblerze zajmuje niecałe 100 Kb, przez co doskonale nadaje się na dyskietkę systemową. Przydatne cechy...
Witam. Pisze w asm ale idea taka sama: przykład dla wyświetlenia zmiennej z zakresu 0-32 na wyświetlaczu 16 znaków: 1. skalujesz zmienną "a" do postaci z zakresu 0-32 2. dzielisz "a/2" ( w assemblerze komenda div ab przy b=2 ) 3. wyświetlasz a pełnych kwadratów 4. jeśli była reszta z dzielenia (w asm b<>0) to wyświetlasz jeszcze pół kwadratu 5....
Tak jeden cykl przy kwarcu 1MHz bedzie trwal 1us, duzo instrukcji assemblera dla avr wykonuje sie w czasie tego jednego cyklu. Powyzszy listing dotyczy C, jezeli zdebugowal bys ten listing C na Asm to moglbys zauwazyc ze ta prosta petla "for" uzywa paru albo i parunastu instrukcji asm, czyli wykonanie jednej petli trwa znacznie dluzej niz ten jeden...
Ja po prostu na zdrowy rozum. Gdyby algorytm "gubił" jeden bit (adres jednego bitu) i wpisywał wszystkie wyższe bity "za wysoko" to od pewnej progowej częstotliwości wyniki by się (mniej więcej) podwajały. Bardzo mi się nie chce analizować Twojego kodu. W końcu mam wolne. A już i tak grypa żołądkowa spaskudziła mi kawał świąt. Spróbuj metodą bisekcji...
Czy to musi być assembler? Wbrew pozorom napisanie tego w języku wyższego poziomu może być znacznie prostsze, zwłaszcza dla początkującego :-) Osobiście uważam, że łatwiej jest się nauczyć podstaw C czy BASCOM'a na tyle ile się potrzebuje, niż nauczyć się pisać dobry i niezawodny kod w asemblerze. //Edit Poniżej, jak to by mogło wyglądać w C: //jakie...
Ludzie, co wy??.... Przeciez autor tematu myśli ze 8 bitow nie jest liczbą :] (joke :D ) A tak na powaznie, to przeciez chodzi o NAJPROSTSZĄ Z MOZLIWYCH funkcję która zamieni LICZBE na CIAG ZNAKOW (tj null-terminated string) ASCII... Przyłóżmy: void _printlong(unsigned long _data,unsigned char *dest) { vu16 _5=0,ltemp=0,flag=0; vu32 divisor=100000000;...
No bez przesady. Programuje się go akurat trudniej, przecież masz różne tryby 16 i 32 bitowe, złożone adresacje itd. A co mnie to obchodzi pisząc w C albo C++? Nic. Programuje się to prościej, m.in. dlatego że jak chce mieć stałą we flashu, to piszę "const" i już, a nie niekończące się zabawy z PROGMEM i wszystkie związane z tym problemy (różny sposób...
No widzę że wszędzie używając tych funkcji podaje się wartości całkowite, jednak w opisach tych funkcji jako wartość wejściowa podawane jest double a nie int, czy dokładniej uint. To raczej chyba anie nie błąd, ani głupota programistów, dlatego drążę temat:) Co do zmiennoprzecinkowych liczb - pisząc do tej pory wszystko w assemblerach też nie miałem...
Mnóstwo instrukcji assemblera nie może być wykonanych w jednym cyklu zegara... w sumie wszystkie wykonywane są w tej samej liczbie i zależy ona od PIPELINE'u... pobranie instrukcji, dekodowanie, wykonanie, zapis do pamieci, akumulacja wyniku. To jest taki najprostszy pipeline i umożliwia on właśnie wykonywanie instrukcji w "jednym" cyklu zegara.......