Bo ten avr nie ma w asemblerze komendy dzielenia. Musisz sobie sam napisać taką procedurę albo poszukać gotowej w necie. Ja kiedyś napisałem taką prostą działającą na zasadzie odejmowania. Wydajne to to nie jest ale nie wiem jak zrobić to lepiej.
czekałem na to że to powiesz ;-) zaczołeś od DIV a później napisałeś MUL nie potrafi dzielić jedną instrukcją, nie wielu to potrafi, nawet ja bez kalkulatora, ale w notach aplikacyjnych znajdziesz procedurki
Nie wiem czemu chcesz to robić w asm, zamiast w C, ale zobacz funkcję __divmodsi4 w libgcc.S (np https://dev.mobileread.com/trac/iliados/... )
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. http://obrazki.elektroda.pl/6837505300_1...
W takim razie chyba wiesz co i jak. Od dzielnej odejmujesz dzielnik dopóki wynik tej operacji jest większy od dzielnika. Ilość odejmowań to całkowita część wyniku. Jeśli chcesz wartości po przecinku to to co zostało mnożysz przez 10 i znów odejmujesz i liczysz odjęcia. Tak dostaniesz pierwszą liczbę po przecinku. Jak chcesz następne miejsca po przecinku...
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...
Witam! Załaduj do jednego z rejestrów wartość, którą chcesz podzielić, drugi rejestr wyzeruj i odejmuj od pierwszego 10 zwiększając drugi o 1, dopóki pierwszy nie jest mniejszy niż 10. r31 - liczba do podzielenia, później reszta z dzielenia r30 - wynik dzielenia Jeśli nie potrzebujesz reszty, usuń ostatni wiersz. clr r30 dz_petla: inc r30 subi r31,...
Tak jak napisałam wyżej. Nie masz wyjścia, dzielenie wystąpi ZAWSZE.
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,...
emarcus:: Czy Ciebie całkiem pogieło? Jak chcesz pomnożyć częstotliwość rozkazem MUL? Ewentualnie jak chcesz tym pomnożyć impulsy? Bez obrazy ale to zupełnie co innego. Dodano po 19 Na mój gust cos takiego: $regfile = "M8def.dat" $crystal = 8000000 $hwstack = 64 '---------------------------------------...
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...
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ą...
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,...
Dzięki (at)szelus za listing programu, myślałem że dam rade zrozumieć coś z C ale myliłem się :) nie rozumię tego programiku. Mam jeszcze pytanie odnośnie: 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)...
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...
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'...
A możesz opisać, jaki był zamysł tego programu? Tak jak w temacie: dodawanie dwóch liczb :) Oto całkowita treść: Opisz i podaj przykłady jak w assemblerze dodawać, odejmować, mnożyć i dzielić dwie liczby. Gdzie są zapisywane wyniki tych operacji? (W jakich przypadkach i w jakich rejestrach?) Jak sprawdzić, czy podczas działania na liczbach nie przekroczyliśmy...
Wiele zależy też od tego w jaki sposób kompilujesz swój projekt - musiałbyś wrzucić tutaj pełny log kompilacji... Generalnie jak ściągniesz sobie jednak nowszą wersję (czyli "toolchain od atmela"), to się przekonasz czy błąd był Twój czy kompilatora. Nie znam się na AVR ani ich assemblerze, funkcje dzielenia są faktycznie dołączone, jednak nigdzie nie...
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.
Ojjoj. Teraz mi jest glupio pomyliłem przedrostki i dzieliłem zawsze przez 0,001s co za gafa. No to teraz by w sumie wszystko grało.THX
to moze
Przed dzieleniem, sprawdź czy dzielna =0 jeśli tak to omiń operacje dzielenia. Przecież dzielenie przez 0 jest niedozwolone, stąd zawieszanie. :D
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...
WOW! Dzięki, taki przykład nawet mi się nie śniło otrzymać w prezencie! Teraz napisze proga na '51 i na LCD'ku sprawdze czy wyjdzie mi taki wynik:)) Z dzieleniem i mnożeniem pewnie jest podobnie, ale po takim przykładzie to już sam rusze mózgiem, DZIENX! ElGregor!
bardzo prosto... zalozmy ze masz liczbe 24962 i chcesz ja przeksztalcic do tablicy 5 elementowej na dziendobry zerujesz tablice. teraz odejmujesz od liczby wartosc 10000 (najwiekszy mnoznik elementow tablicy) i sprawdzasz czy liczba jest juz mniejsza od tego co aktualnie odejmujesz. za kazde odjecie powiekszasz wartosc w tablicy odpowiedzialna za dana...
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.
Oto, co podaje ChatGPT: [syntax=armasm] ORG 1000H ; Punkt początkowy programu START: ; Wczytanie pierwszej liczby (dividend) z zakresu 0-65535 MVI D, 0 ; Wyczyść rejestr D MVI E, 0 ; Wyczyść rejestr E ; Zakładamy, że liczba jest podana bezpośrednio ; (możesz dodać instrukcje do wczytywania wartości, jeśli potrzebne) ; Przykład wartości (do testowania)...
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
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.
: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....
I don't know AVR Asm, but if this true, You can always count, how many add intruction can do until overflow (total >= ...). Next decrase it - then You have result (without fraction). If You do sub total and your number, get rest of divide.
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, darekirl - cieszę się, że mogę pomóc. Ganeralnie uwaga ze strony czytających nakręca do tego, by w dalszym ciągu dzielić się tym, co udaje mi się poskładać. Co do profesjonalnego zajmowania się automatyką domową... hmmm... obecna sytuacja ma dwie zasadnicze korzyści - mogę traktować to, co robię, jako hobby oraz mam na to czas. Gdyby stało się...
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...
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...
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...
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...
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...
Przerwania wcale nie są złe tylko dlatego że tobie się na nich nie udało. To trzeba zrobic w assemblerze. Ale nawet przy taktowaniu 16MHz nie podzielisz częstotliwości większej niż powiedzmy 1MHz. Ja bym walną to na Timerze w trybie CTC. I ustawił Timera tak żeby generował sprzętowo sygnał na swoim pinie IO. Będzie i szybkie i proste. Wtedy przy taktowaniu...
Witam Procesor jest obojetny. Algorytm zawsze będzie taki sam. Zmieni się tylko kod w zależności od procesora. Algorytm zamiany z BCD na NKB: 1. Zerujemy zmienną wynikową 2. Dodajemy do zmiennej wynikowej najstarszą cyfrę BCD 3. Jeżeli mamy jeszcze cyfry to mnożymy wynik razy 10 i powtarzamy punkt 2 (tylko już następną w koleii cyfrą) np. Mając liczbę...
[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;...
... liczbe dwubajtowa na liczbe hex? dzielisz 2 bajty na 4 nible (maska and $f dla niższego nibla/shr 4 dla wyższego nibla) otrzymane nible przekształcasz na ascii: do czystego rejestru zapisujesz nibl, jeśli wartość tego rejestru jest niższa od 10 to dodajesz do niego 48, w przeciwnym wypadku dodajesz 55, otrzymana wartość w rejestrze jest kodem ascii.....
(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...
który stworzył mechanizmy optymalizacji dla tego co napiszecie w c daje efekt zbliżony do kodu napisanego w assemblerze choć zawsze o te kilka procent gorszy .. Nie wiem bo jeszcze nie widziałem kodu równolegle napisanego w asemblerze. Mam dla kolegi (at)kamyczek propozycję. W moim dawnym projekcie oscyloskopu jest taka funkcja: https://obrazki.elektroda.pl/6861140700_...
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,...
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...
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...
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,...
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....
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_...
>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...
PWM powinno być generowane przez timer. Stany przycisków można sprawdzać w przerwaniach, a nie w jakiejś pętli. W programie użyłeś funkcję delay() 294 razy, a powinieneś 0 razy. Cały kod jest napisany źle. Nie zaplanowałeś działania programu. Sklejenie po prostu dwóch różnych programów nie spowoduje, że staną się jednym programem. Hasło na dziś: "Planowanie...
No to się pochwal co było. Dobry obyczaj wymaga dzielić się informacjami o popełniabnych błędach - wtedy wszyscy się uczą. Ktoś inny za pół roku znowu zje zęby na podobnej sprawie.
Skoro go zaprogramowałeś to tym samym programem możesz odczytać zawartość mikrokontrolera. Odczytasz oczywiście tylko zawartość pamięci w postaci liczb, nie licz więc na to, że zrobisz z tego z powrotem kod źródłowy, no chyba że użyjesz disasemblera, choć pewnie w assemblerze programu nie pisałeś, więc to i tak niewiele da. No i dobra rada na przyszłość:...
Może nie najładniej to rozrysowałem - [url=http://forum.dzyszla.aplus.pl/topic... dzielenia liczb wielobajtowych z wykorzystaniem odejmowania
Kiedyś pisaliśmy programy tylko w assemblerze Dzięki czemu podglądając .lss czy .lst nie patrzymy jak na chińskie znaczki tylko widzimy jak to jest przetłumaczone i czy czasem coś nie jest wycięte co powinno być, a inne rozdmuchane tak jak nie powinno być ;) Kiedyś producenci nie dawali gotowych bibliotek i devboard-ów Pamiętam te porobione makra w...
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...
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...
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...
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: http://www.dzyszla.aplus.pl/programy_i_t...
Procesory AVR nie tylko mają szesnastobitowy rejestr a nawet mają trzy 8O (X,Y,Z), a lista rozkazów jest w zasadzie uboższa tylko o mnożenie i dzielenie, w zamian za to przy tej samej częstotliwości zegara są kilkakrotnie szybsze :D
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???
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,...
Saia nie programuję w ten sposób, a za pomocą języka (Nie wiem jak on sie nazywa, assembler??), mającego takie instrukcje jak: COB 0 0 STH I 1 ANL F 100 ..... ECOB Jednak jest to wiedza chyba zbyt cenna, aby się nią dzielić
W rodzinie '51 standardowo stos ma początek w rejestrze o adresie 07H (i zajmuje kolejne o wyższym adresie) można to sobie zmienić przez wpisanie nowego adresu do SP przykład: MOV SP,#30H ;przenosi początek stosu od adresu 30H Co do dzielenia to mała podpowiedź Ponieważ liczba ma być dzielona przez 16 to najlepszym sposobem jest przesuwanie bitowe w...
Proponuję [url=http://www.dzyszla.aplus.pl/downloa... prostych kodów do nauki Assemblera
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,...
Na wstępie muszę przeprosić kolegę locarno , bez którego ten post by nie powstał, a który zapewne nie chce, aby ten post powstał i za to też z góry przepraszam. Około dwa miesiące temu wpadł w moje ręce zablokowany dysk WD3200BUDT-62DPZY0 z dekodera cyfrowego polsatu. Słynna wyszukiwarka w pierwszej kolejności zaprowadziła mnie do tego tematu, który...
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...
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...
https://obrazki.elektroda.pl/6687159300_... 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....
http://obrazki.elektroda.pl/8660171200_1... 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...
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...
Algorytm wydaje się ok.
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...
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...
Tu: http://alds.stts.edu/APPNOTE/MCS51/AB-40... 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
Ech... przypomniały się czasy dziergania demek w assemblerze na C64, efekty byly podobne :-) Trzeba przyznać, że autor projektu wycisnął chyba wszystko z poczciwej Atmegi, pomyśleć, że od migającej diody dzieli to to przepaść technologiczna...
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
a jak "01" lub "10" to jeden, przy okazji byłoby fajnie jakby ktoś wyjaśnił mi dlaczego bo tego to już nie wiem. Automat buduje się w jakimś - ściśle określonym- celu. To, że z 01 przechodzi na w jakim celu stosuje się takie grafy Ano w takim, że graf służy do reprezentacji funkcji automatu. Zamiast pisać słownie ,,ze stanu 01 automat przechodzi na...
Np. programem do dzielenia plików, który możesz znaleźć w sieci albo napisać samemu w góra 10 minut - pewnie szybciej napisać, niż znaleźć. Każdym Twoim pytaniem wzmacniasz wrażenie, że nie jesteś w stanie zrobić tego, co masz zrobić.
Niestety obawiam się że w takim razie będzie jeszcze gorzej bo AVR PICowi też nie równy. AVR jest trochę lepszy (ale będzie wojna :D). To znaczy ma bogatszy assembler. PIC musiał by być szybszy od AVRa żeby tak samo szybko wykonać to samo co AVR. Czyli potrzebował byś ponad 20MHz. A zauważ że PICe dzielą zegar na 4. Czyli trzeba Ci PICa na ponad 80MHz...
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.
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.
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...
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...
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...
Tutaj masz na magistrale 4 bity: D7 EQU P1.0 D6 EQU P1.1 D5 EQU P1.2 D4 EQU P1.3 EN EQU P1.4 RS EQU P1.5 DZIELEQU 20H WAITEQU 21H WAIT1EQU 22H ILEEQU 23H MOV P1,#0;inicjalizacja lcd MOV A,#50; 4-BITOWA LINIA DANYCH ACALL WPISZROZ MOV A, #40 ; ZNAKI 5x7 ACALL WPISZROZ MOV A, #1 ; WYSW ON ACALL WPISZROZ MOV A,#6; INC PO KAZDYM WPISIE ACALL WPISZROZ MOV...
https://obrazki.elektroda.pl/8661538600_... 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,...
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...
Znalazłem jaki to format :) okazuje się że to NEC protocol http://www.sbprojects.com/knowledge/ir/n... 16 bitów które nadaje pilot dzieli się na 2 części. 8 zwykłych i 8 zanegowanych.To samo z adresem. wystarczy napisać program ale to zrobie w ramach nauki assemblera.
Dawno miałem już do czynienia z programowaniem PLC, a na dodatek nigdy nie lubiłem drabinek - zdecydowanie bardziej wolałem blokowe. Generalnie to programowanie sterowników sprowadza się do kilku funkcji (w porównaniu do programowania PC to jest to może promil, czysta podstawa), ale wymaga jakby większej świadomości i większej umiejętności dzielenia...
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.......
Skoki warunkowe JB numer_bitu JNB numer_bitu Oprócz tego w drugą stronę CLR bit SETB bit Dokładniej to musisz w specyfikacji assemblera zobaczyć, bo ja już widziałem różńe wersje. Na przykład SETB P1.0 to chyba wezmą wszystkie assemblery, ale SETB 20h.0 już nie, tylko musisz podać numer bitu w bloku. Tylko pamiętaj, że te operacje możesz robić nie na...
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...
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...
Kompilator sam inicjalizuje domyślnie zmienne wartościami 0. Dopiero jak chcesz to nadajesz wartość. Z portami powinno być tak samo, ale nie zawsze. To są takie niuanse czasem. Na przykład jeśli użyjesz biblioteki LCD4BUSY.lib po to by użyć pinu WR lcd i przy okazji zaoszczędzić kodu to ona automatycznie wpisze Ci do całego rejestru DDR jedynki. Żeby...
eetam. Flaga letni/zimowy i np. co minutę (a w sumie to nawet co sekundę - zapas mocy ogromny) sprawdzać, czy data zimowa a flaga letnia lub na odwrót. A jak sprawdzić czy jest to ostatnia niedziela wybranego miesiąca? Da się, bo Dodano po 3 Po prostu, jak dzieli sie przez 1000 bez reszty, to rok nie jest przestępny A rok 2000? dzieli się przez 1000...
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...
prosze bardzo - procedura zaczerpnieta z ksiazki ' praktyczny kurs assemblera' eugeniusza wrobla : ;***************************************... ;Procedura oblicza szybko† procesora, korzysta z cykli generowanych przez ; ;procesor w jednostce czasu. ; ;=======================================...
robienie pętli assemblerze dzielenie łącza dzielenie partycje
wskaźnik ciśnienia powietrza wałka laserowej wyłączniki bezpieczeństwa podłączenie
Alarm otwartych drzwi nie działa w nowej lodówce Bosch Zalany sterownik olejem w Fiacie - co robić?