LJMP START START mov R3, #8 mov R4, #2 mov R5, #4; dotąd jest dobrze mov A, R3 ;add R3 -źle, dodawanie wymaga dwóch operandów add A, R4 ;add R4- jak wyżej add A, R5 ;add R5- jak wyżej mov R7,A ;mov A, R3-nie wiem co miałeś na myśli pisząc ten kawałek kodu(5 lini) ;mov A, R4 ;mov A, R5 ;mov A, R7 ;mov A, P1 mov B,#5 mul A, B mov B,#2 div A,...
Czesc. Mam problem, a w sumie to nawet 3 =]. Mam do napisania 3 programy w assemblerze (dokladniej bede je uruchamiac na symulatorze procesora z80). 1 zadanie. Napisz program, ktory liczbe 21H doda do liczby 42h. 2 zadanie. Za pomoca programu sprawdz czy suma tych liczb (zad 1) jest liczba parzysta. 3 zadanie. Dane sa dwie liczby. Napisz program, ktory...
Po co na początku (setki) dodajesz do wyniku 1000 ? Chyba nieco bez refleksji skopiowałeś ten kod z innego programu.
Hej, mam problem z napisaniem prostego (tzn. wyglądający na prosty) "programu". Może podam dokładne polecenie: Napisać program w asemblerze dodawania 2 liczb 4 bajtowych (w zapisie U2) zapisanych w komórkach o adresach 1000-1003 (pierwsza liczba) i 1004-1007 (druga liczba). Wynik umieścić w komórkach 2000-2003. Bajty liczb rozmieszczone są jak w konwencji...
Dodawanie i mnożenie: Można wykonać na podobnej zasadzie, jak ręczne dodawanie i mnożenie dużych liczb (zapisuje się liczby jedna pod drugą i operuje na poszczególnych cyfrach). A komparator, to sprawdzasz po ile cyfr mają liczby, jeżeli różna, to odpowiedź jest oczywista, a jeżeli obie są tej samej długości, to porównujesz kolejne cyfry. W jednym bajcie...
Adresy urządzeń mi nie pomogą. Dla jasności, nie znam asemblera, miałem dopiero jedną lekcję z niego.
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...
Czasu szkoda na analizę. Spodziewałem się, że ktoś z tym "walczył". Assembler jest dla mnie w miarę prosty.
witam, mam problem ponieważ muszę napisać moduł w assemblerze do C, który będzie dodawał 2 liczby zmiennoprzecinkowe, wpisane w c i wyświetlane w c, moduł assemblerowy ma wykonywać dodawanie. Jakieś podpowiedzi , albo najlepiej podobne programy do przeanalizowania
Zobacz na http://www.avrbeginners.net AVR Assembler->Math->Multiple byte maths. Są tam co prawda krótkie, ale dobrze opisane przykłady operacji na liczbach 2 i nawet 4 bajtowych: dodawanie, odejmowanie, porównania itp. Pozdrawiam
Nie. Dodawanie do ZH jest potrzebne, gdy górny bajt adresu jest inny w pierwszej a inny w ostatniej komórce tabeli.. jeśli tablica ma 2 elementy o adresach 0x8FF oraz 0x900, to bez tego dodawania uzyskasz adresy 0x8FF i 0x800 (brak dodania przeniesienia).
Problem jest w tym że tablice są umieszczone od 0x40 (org 0x40) w pliku WaveSmpl.asm a przy starcie masz skok do procedury RESET i RX_COMPLETE_INT .org 0 rjmpRESET .org URXCaddr rjmpRX_COMPLETE_INT więc skok musi być wykonany przez tablice a jak dodajesz jeszcze jakieś tablice to ten skok jest za długi. usuń .org 0x40 ; Flash word address w pliku WaveSmpl.asm...
Mam jeszcze pytanie, jak zrobić skok do wybranego adresu? Wystarczy wpisać jmp nr adresu+offset, czy jak? Może obejrzysz przykład, np tu: http://www.elektroda.pl/rtvforum/viewtop...
Ten algorytm przedstawia prosta metode mozenia ktora czesto byla stosowana w procesorach nie posiadajacych instrukcji mnozenia. wykozystuje sie w nich rotacje bitow i dodawanie. Algorytm jest bardzo prosty w realizacji.
Ok. Już wszystko jest jasne. Jednak mam problem w stronę odwrotną, a dokładniej: Mam zadeklarowaną stałą w C, w assemblerze chciałbym wyciągnąć jej adres w pamięci. Robię dokładnie tak jak podane w przykładzie podanym przeze mnie (czyli w assemblerze dodaję .extern), kompilator podmienia nazwę zmiennej na jej adres, ale jest mały problem. Adres ten...
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.
Prosze o kawałek kodu z dodawaniem dwóch 8 bitowych z wynikiem 16 bitowym. Przykładowy kod: in r17,ADCH clr r16 PETLA_PRZESUN_LEWO: lsl r17 inc r16 cpi r16,8 brne PETLA_PRZESUN_LEWO in r16,ADCL movw XH:XL,r17:r16 Po tej operacji poprawny wynik jest w rejestrach XL i XH. Temperatura nie przekroczy 255 stopni wiec teoretycznie (w/g mnie)...
genetix: Tu masz rację. Chodziło mi o przeniesienie a napisałem dodawanie:) Ale już wszystko gra. Dzię wszystkim za pomoc.
push es mov ax,0000h ;segment mov es,ax mov di,0000h ;offset cld ;adresy rosnace mov al,ffh ;dane stosb ;zapis al do es[di] i inkrementacja di ;mov al,55h ;ew.kolejne dane ;stosb pop es mem[] tyczy się pamięci, a w asm 'out' do przestrzeni I/O.. to tak jak byś hciał wydrukować text za pomocą instrukcji dodawania :)
Mirko51 Udzielasz fatalnej odpowiedzi. Dodawanie w kodzie BCD musi uwzględniać rozkaz korekcji dziesiętnej DA A Tu masz przykład (podprogram SUM) sumowania BCD dwóch dowolnie długich wartości umieszczonych w ramie gdzie końce pól są w R0 i R1 a długość (identyczna) jest w R2. Sumowanie odbywa się do pola, którego koniec jest w R0. [syntax=asm] SUM:...
Witam. Szkielet programu asemblera na 51' zamieszczałem w poście pod koniec wątku: [url=http://www.elektroda.pl/rtvforum/vi... Dodawanie 3 liczb 8-bitowych - może się Koledze przyda. Do kompilacji najczęściej używam ASEM'a. Pozdrawiam.
W jakim kodzie są dodawane liczby - bin czy BCD? I w jakim kodzie ma być wynik bo jeśli w bin to dodając do siebie dwie 11-bitowe liczby potrzebujesz tylko dwóch rejestrów 8 bitowych na reprezentacje wyniku.
Skoro dodajesz 2 cyfry i domyslam się że są w postaci dziesiętnej to po co Ci aż 2 bajty na cyfrę? Wprowadzasz cyfry jako znaki i tak widzi je kompilator więc przy dodawaniu cyfr i zapisywaniu do zmiennych wypadałoby odjąć te 30h.
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
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 gdybym chciał się zając mikrokontrolerami, czego bym potrzebował?? Mikrokontroler (jaki?) programator (jaki?) kompilator na kompie (jaki?) hmm.. coś jescze???? _emes Na początek polecam zacząć od mikrokontrolerów rodziny AVR. Nie daj się nabrać na początki w '51 - owszem, może to i "sztandarowy" mikrokontroler, tak jak Pascal w językach programowania,...
albo różne pokrętne działania 6502. 6502 ma trochę rozkazów niepublikowanych. Na C-64 był monitor, dissassembler, a nawet Assembler interpretujący te rozkazy. 62C02, używany w "Szmatari", rozkazy niepublikowane miał zastąpione rozkazem NOP. Ciekawą cechą 6502 było dodawanie 1 cyklu maszynowego gdy PC przekraczał stronę (256 bajtów). W C-64, auto uruchomienie...
czy program skladający się z poleceń bascoma i wstawek assemblerowych będzie zajmował mniej miejsca niż taki sam program napisany tylko w bascomie?? Będzie zajmował mniej miejca. Najwięcej możesz zaoszczędzisz zastępując pętle i IF-y a także dodawanie/odejmowanie na zmiennych dwubajtowych. Mnie się udawało zbić 20-30% kodu jak próbowałem się zmieścić...
Nie używam w ASM liczb zmiennoprzecinkowych, różne algorytmy można napisać bez nich, przez co działają 10x szybciej. Pisanie programu to przekładanie rzeczywistości na liczby i w tym jest problem, kto umie to w głowie przetworzyć, ten jest programistą. Jak mam jasno i szczegółowo skonstruowany algorytm, to napisanie programu jest banalne, bez różnicy...
Niestety... Program zawsze wyświetla, że znalazł szukany wzorzec. A gdy wpiszę tekst lub wzorzec w całości z wielkich liter to program się wysypuje :( Zerknąłem na kod i już na początku jest poważny błąd (reszty nie sprawdzałem bo nie ma sensu) [syntax=asm]blt $t3,$t6,next1 # porownanie if($t3<91) skocz dalej tak i tak next1: blt $t5, $t3, next2...
wchodzisz na strone microchipa i nie umiesz sobie znalezc dokumentacji procesora? zartujesz? no chyba ze z twoim angielskim jest tak cienko, ze nie wiesz co to znaczy '8-bit PIC® Microcontrollers' ... ale wtedy to juz raczej nie ma nadziei zadnej. MPLAB domyslnie wyposazony jest jedynie w interpreter assemblera. mozna dodawac rozne pakiety z jezykami...
a no nie pomyślałem, mój błąd. a ten asm to na 8086. no i z tym dodawaniem to normalnie potrafie nie wiem tylko jak to robić gdy liczba jest na 12 bitach?:( . więc apeluje z prośbą jeśli macie taki programik albo zrobienie go to dla was nic to bede bardzo wdzięczny:):)
A może coś więcej by kolega napisał? Nie orientuje się zbytnio w assemblerze a muszę projekt zrobić...
Mam problem, mam do napisania dodawanie dwóch liczb w BCD. Pierwsza liczba w komórce pamięci 2000H druga liczba w komórce pamięci 3000H Wynik w komórce pamięci 4000H Dodawane liczby maja byc n-krotnej precyzji (n-bajtowe) Teraz co mam narazie ... To dodaje mi dwie liczby w BCD .. ale nie uwzględnia korekcji dziesiętnej .. Czy wie ktoś może jak zrobić...
Napisz jaką potrzebujesz dokładność, jeśli niewielką to najlepiej użyć gotowej tablicy. Jeśli dużej to trzeba rozłożyć funkcję pierwiatkowania np. na szereg Taylora i wtedy obliczać kolejne przybliżenia, ale to wymaga napisania procedur operacji zmiennoprzecinkowych (głownie mnożenie i dodawanie zmiennoprzecinkowe).
Ten Bascom i assembler na pewno się czymś różnią. Który jest łatwiejszy? Który ma większe możliwości? Tymi programatorami co podałeś link to mogę zaprogramować w obu językach czy tylko w Bascom'ie, bo na razie tak z grubsza przeleciałem i nie widziałem nic o assembler'ze W każdym języku, ponieważ ten programator służy tylko i wyłacznie do przesłania...
add ZL,offset To pewnie nie to ale zamień to dodawanie na dodawanie pełnej wartości (całego słowa 16 bitowego - w helpie jest z addc i add) i jeszcze to: ldi ZH,high(tablica_cyf<<2) ldi ZL,low(tablica_cyf<<2) Ja tam mam przesuwanie <<1 a to <<2 to chyba przesuwa 2 razy i pewnie tu leży błąd.
Przenosisz do rejestrów x. Mnożenie w tym przypadku również musisz wykonać na rejestrze x. Choć wynik oczywiście w takim przypadku jest w dx:ax, to jednak możesz śmiało starszą część olać, jeśli wcześniej wprowadzi się tylko zabezpieczenie przed przekroczeniem zakresu. Dodawanie tak samo - na rejestrze x (wcześniej dla pewności możesz wyzerować część...
jak zaprogramowac uC 8051 zeby dodawal liczby ktorych suma jest wieksza niz 255? ADDC ok.. ale.. czemu to nie dziala? ;przekladowe liczby MOV R2, 0xDD MOV R3, 0xDD MOV R4, #0 ;zerowanie R4 ; dodawanie do R0 kolejnych liczb ; do R1 dodajemy tylko flage przeniesienia [0 albo 1] ADD A, R2 ADDC A, R4 ADD A, R3 ADDC A, R4 END wynik .. 0xBB :/ co...
mam problem, poniewaz dopiero co zaczalem sie uczyc asemblera mam maly problem Proszę pamiętać o używaniu znaczników syntax . Opcja Listing kodu . - arnoldziq
Wiec tak : W szkole miałem same podstawy assemblera na uprocku bodajże 8080. Podstawy niby znam tylko ze na lekcjach robiliśmy tylko jakieś funkcje matematyczne typu mnożenie, dodawanie, odejmowanie, OR, AND, modulo dwa itd. Teraz chodzi mi o to aby wiedzę o tym jakoś pogłębić aby mi sie to przydało przy programowaniu rożnych uC czy uP. Nie mieliśmy...
Może być po angielsku, rzecz jasna. Proszę wklejać propozycje z linkami. Oj leniuszek :) Język C i/lub assembler. http://phy.ntnu.edu.tw/~cchen/ctutor.pdf http://www.cs.otago.ac.nz/cosc440/readin... http://www.iups.org/media/meeting_minute... Szukaj w Google dodając: Free PDF Bascoma chyba nie warto się uczyć? Fajny żarcik...
Do kolegów co podpowiadają mi użycie makr, tak jak pisałem wczesniej, uzywam Codevision a w nim nie ma czegoś takiego - chyba. Jak już wcześniej napisałem, moim zdaniem przy takich procedurach obsługi przerwań program powinien się wyrobić bez konieczności zagnieżdżania przerwań, a przyczyna złego zliczania może leżeć gdzie indziej. Możesz oczywiście...
przetestowałem to wczoraj od strony działania w Avr Studio. No i w najnowszym, z pluginem od AVR-GCC. Po prostu dodaje się do projektu pliki z roszerzeniem .s, nie trzeba nic dłubać w makefile, a AVR studio samo wie, że pliki .s trzeba przejechać avr-as (assemblerem). Jest to trochę inny assembler (zapewne) od tego z avr studio, ale pisze się w nim...
Zależy co chcesz tym assemblerem programować. Jeśli chodzi o takie niskopoziomowe oraz w oparciu o system DOS, procesory x86, to "Jak pisać wirusy" jest ciekawym podręcznikiem... Ale wiesz, że na ASM daleko nie pojedziesz? Owszem, jest to najszybszy z mozliwych języków programowania lecz wymaga szerszych umiejętności i wiedzy, którą lepiej byłoby zdobyć...
... chciałabym jedynie uzyskać odpowiedz na pytanie, czy bezpośrednie czytanie i zapis do i rejestrów XMegi może ją uszkodzić. Czy C, czy Assembler, czy BASCOM wszystkie operują na rejestrach. Jak więc miałyby uszkodzić mikrokontroler? ... C mnie już nie interesuje. Przesiadka z BASCOM na Assembler jest krokiem odważnym i chwalebnym. Jednakże uparte...
Oto co wymyśliłem :) ORG 0 AJMP 50H ORG 50H LCALL OBLSR ; wywołanie podprogramu obliczania średniej OBLSR: POP R7 ; zdjęcie ze stosu bardziej znaczącego bajtu adresu powrotu do programu głównego i zapisanie w rejestrze R7 POP R6 ; zdjęcie ze stosu mniej znaczącego bajtu adresu powrotu do programu głównego i zapisanie w rejestrze R6 MOV R5, A ; przeniesienie...
Dobrze jest. Tablica jest. Teraz kwestia operacji na tablicach. Dodawanie i zapis do pierwszego bajtu przy takim czymś mnie przeraża... Wiem natomiast jak zrobić z liczby w U2 wartość bezwzględną. ----------------------------------------... Koledzy, nie mam pojęcia, jak to napisać. Wiem, że aby uzyskać wartość bezwzględną należy przemnożyć logicznie...
Zapytałem nie dlatego żeby pojechać autorowi, ale żeby się dowiedzieć. Bo ja absolutnie nie znam się na Javie. Ten algorytm „odśmiecania” zapewne nie był by problemem przy bezpośredniej kompilacji na kod maszynowy. Ale ograniczenie składni (a co dopiero brak wskaźnikowania (indexowania)) to już przegięcie. Na FLASu to już całkowicie się...
Ja tam pisze sobie w assemblerku. I zrobiłem w nim dwa projekty, jeden 40kB kodu a drugi 50kB kodu. Faktem jest że pisze pod MSP430 a w tych procesorkiach assembler jest bardzo przyjazy użytkownikowi. Jak zobaczyłem zestaw isntrukcji do AVR'ów to sie złapałem za głowę bo mają po 90 instrukcji i więcej a w MSP jest ich 50 a na dodatek każda może byc...
Dodajesz rozmiar wszystkich zmiennych pomiędzy i ci wychodzi adres z. Nie znam NASM, więc nie wiem czy jakoś te adresy może optymalizować, te, których używałem tak nie robiły (a może to tylko ja tego nie włączyłem), bo wolę sam mieć pełną kontrolę jak już schodzę na niski poziom. Skok warunkowy wykonuje się zwykle w zależności od ustawionej flagi procesora....
To działa tak samo dla dowolnej ilości bajtów. Liczbę wejściową wysuwasz z najstarszego bitu najstarszego bajtu Czyli przesuwasz liczbę 32 bitową (mnożysz przez 2). Wysunięty bit (w znaczniku przeniesienia) wprowadzasz do najniższego bitu najniższej tetrady liczby BCD. Przed każdym kolejnym przesunięciem sprawdzasz każdą tetradę czy nie jest >=5...
(at)spec220 A jak jest w tym środowisku którego używasz z obsługą peryferiów mikrokontrolera? Czy wszystkie timery, USARTy, I2C, SPI, ADC, DAC, są obsługiwane? czy można ustawić każdy tryb pracy, na który pozwala hardware, czy tylko te popularne? Jak z komunikacją, powiedzmy że chcesz zrealizować DMX512, Modbus RTU, albo LIN, czy masz do tego gotowy...
Dla mikrokontrolerów Atmel AVR wygląda to następująco: buton1: ldi ZH,high(2*tablica) ldi ZL,low(2*tablica) ;ładownie tablicy do pamięci programu adiw ZL,1 ;dodawanie do adresu elementu tablicy lpm ;odczyt z tablicy do r0 - zawsze tam znajdzie się dana mov temp,r0 ;kopiowanie danej do rejestru ogólnego użytku sbiw ZL,1 ;odejmowanie od adresu elementu...
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...
Stringi w pascalu zaczynaja sie od 1. Na bajcie zerowym jest dlugosc stringa. maxymalna dlugosc stringow w pascalu, wlasnie z tego powodu to 254 znaki. W delphi zostalo to poszerzone do 32 bitow o ile sie nie myle. Problemem z dodawaniem stringow bedzie to, ze readln czeka na CR, wiec bedzie trzeba dwa razy klepac enter. Natomiast czytanie znak po znaku...
1.Jak wiadomo czas jest cenny i za dużo go nie mam (jak prawie każdy), ale powiedzmy,że mogę przeznaczyć na projekt max. 2 tygodnie kilkugodzinnej pracy. 2. Praktycznie nie znam assemblera, choć miałem z nim styczność (zapoznałem się z podstawowymi poleceniami, jakieś proste operacje dodawania). 3.Mógłbym zrobić coś swojego tylko obawiam się, że będzie...
"Chcesz się nauczyć asemblera pisząc w języku BASCOM Basic?" a co- bardzo fajny: $asm ... ... $end asm Samo $ASM...$END ASM nie wystarczy. Bascom dodaje też coś od siebie. Nawet jakbyś pododawał te pozostałe dyrektywy wyłączające to musisz się trzymać kilku ograniczeń. Powstaje hybryda której nie da się kontrolować w pełni, a nie o to przecież w pisaniu...
Innymi słowy - "takich szopek" nie ma nigdzie. No skoro nagle wszystkie ARM7 mają jakiś VIC, no to faktycznie problem nie istnieje :] Ale z tego co pamiętam, to nie wszystkie procki ten VIC mają... Być może, jednak możliwość dodawania conditionali do KAŻDEJ instrukcji w trybie ARM jest bardziej oczywista, bardziej logiczna, bardziej prosta i bardziej...
Stary post ale , jest sposob aby przerwania od timera wystepowaly w rownych(co do jednego cylku) z gory okreslonych odstepach. Przy kwarcu 12MHz aby odmierzac rowne czasy np 20ms wystarczy na poczatku przerwania wpiac taka procedurke ktora modyfikuje odpowienido rejestry TL0 i TH0 i uwzglednia opoznienie czasowe. t0VAL equ 20000 ; czas miedzy przerwaniami...
Już kiedyś pisałem tutaj o konwersji bin->bcd. Są na to specjalne algorytmy. Ponieważ nigdy mi się nie chce ich szukać, konwersję przeprowadzam metodą łopatologiczną: 1. Odejmuję od zadanej liczby 1000 tyle razy, aż uzyskam wynik ujemny. Liczba odejmowań (pomniejszona o jeden) daje cyfrę tysięcy. 2. Koryguję liczbę po odejmowaniu (dodając z powrotem...
(at)margas60 Ponawiam pytanie, czemu STM? Da się nadal kupić stare AVRy, da się nowe, są Arduina na mniejszych i większych AVRkach. Chcesz się nauczyć STMa? Bo argument z początku tematu o tym że wyzionie ducha i koniec świata jakoś do mnie nie trafia. Bawiłeś się jakimś Arduinem? Co do STMów możesz na to pisać używając HAL - hardware abstraction layer...
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...
...umie ktos to zrobic ? bede wdzieczny za pomoc ... Ta może bez zbędnych ceregieli "podam na tacy" gotowca , a Ty spróbuj zrozumieć jak toto działa :D .include "8515def.inc" .def zero = r0 .def bcd = r16 .org 0x0000 rjmp start .org INT_VECTORS_SIZE start: ldi bcd,low(RAMEND) ldi r17,high(RAMEND) out SPL,bcd out SPH,r17...
Do opoznien tez masz biblioteki. Programowales kiedys AVR czy zaczynasz w ARM od razu? Ja na ARM dopiero bede siadal za pare tygodni ale ogolnie to w C masz na architekture biblioteki do opoznien. W C dodajesz plik naglowkowy: #include <avr/delay.h> np. i mozesz uzywac funkcji _delay_us(), _delay_ms() itd. Te funkcje i tak sa tlumaczone na assembler...
Z tym językiem angielskim to różnie jest to co wyszukałem push - zapisuje na stosie dwa rejestry r30 i r31 (które stanowią Z) ale po co przecież są puste? ldz - wpisuje do rejestru obie pozycje z kody7seg ale które ? add r30,r16 dodaje oba rejestry, a wynik wpisuje do r30 (to rejestr do którego w programie głównym wpisywane są cyfry od 0 do 8) brcc...
Uważam, że moderator ... Działania moderatorskie wykonuję na czerwono za pomocą odpowiednich funkcjonalności. Niestety raz się zdarzyło że na czerwono wyciąłeś tekst o "niewygodnym" środowisku programistycznym :D Ale nie o tym będę pisał. Napiszę jak to wyglądało u mnie. Ja zaczynałem od BASCOMa. I to BASCOMa '51. Były artykuły w EdW. Nie miałem jeszcze...
Witam wszystkich. Mam problem i to poważny. Potrzebuję kogoś, kto zna się na pisaniu programów w asemblerze. Niżej podaję treści takiego zadania: 1. Napisz program, który oczyszcza ekran, umieszcza wskaźnik w wybranym miejscu, prosi użytkownika o podanie dwóch wartości, dodaje je i wyświetla sumę. Użyj procedur Clrscr,Gotoxy,Writestring,Readint i Writeint...
he he powracaja zabytki :) Az sie lezka w oku kreci :) Ale fakt plyty glowne z zlaczem ISA to fajna alternatywa, nie koniecznie trzeba trzymac sie tylko LPT. Wykonanie plytki pasujacej do slotu ISA nie jest obecnie trudne, a obsluga jest banalnie prosta. W elektronice wystarczy kilka TTL-i jako bufory i dekoder adresu... Dla zapalencow dodaje troche...
zrobiłem taki program ale on tylko dodaje 2 zmienne i nie wiem jak dalej zrobic zeby napierw przemnożył x razy 5 i z razy 4 : [bits 32] lea eax, [ebp-4] push eax lea eax, [ebp-8] push eax call do_scan db "%i %i",0 do_scan: call [ebx+4*4] add esp, 12 mov eax, [ebp-8] add eax, [ebp-4] push eax call wypisz_wynik db "wynik: %i", 0xa, 0 wypisz_wynik: call...
Chyba to właśnie co znalazłem w źródłach. Deklaracja funkcji przerwania nie może mieć atrybutu Interrupt("FIQ") skoro mamy już wrapper w assemblerze. Tak jak pisałem, spróbuj z __attrybut__((naked)) albo wcale. Jeśli zadeklarujemy to jako FIQ to kompilator dodaje kod odejmujący 4 od adresu powrotu, co my już robimy we wrapperku.
ściągasz: http://www.mikrocontroller.net/downl... wypakowujesz np. do /home/"nazwa usera"/ i wydajesz polecenie: echo 'export PATH=/home/"nazwa usera"/arm-gcc/bin:$PATH' >> ~/.profile które dodaje linijke: export PATH=/home/"nazwa usera"/arm-gcc/bin:$PATH do pliku ".profile" w twoim...
Masz tu poprawiony kod kalkulatora. Nie chciało mi się grzebać, więc masz "podłaczone" tylko cyfry 1 i 2, oraz "+","-" i "=". Resztę spokojnie zrobisz sam. :) uses crt; VAR mx,my,mklik:integer; procedure pokazmysz; assembler; asm mov ax, 0001h int 33h end; procedure ukryjmysz; assembler; asm mov ax, 0002h int 33h end; procedure wezmysz(var x,y,butt:integer);...
A po co w ogóle komu mikrokontroler w tosterze albo mikserze, choćby z firmware napisanym w assemblerze? Po co w tych urządzeniach jakakolwiek elektronika cyfrowa? Rozumiem, że to pytanie retoryczne w czasach, gdy nie gdzie indziej jak na tym forum niemal każde rozwiązanie wymagające użycia więcej niż jednego układu sprowadzane jest do rady "użyj uC"....
Wydaje mi się że tak: [syntax=asm] ;Wyświetlasz sumę (ORL) rejestrów A i B ;Pomocniczy rejestr C,D ;Rejestry A,B,C i D (dowolne rejestry R0-R7) nie mogą ulec zniszczeniu w operacjach dodawania, i wyświetlania danych na porcie ;CARRY - oczywiście flaga C ;klamry {} są tylko po to aby lepiej było widać poszczególne pętle ;=======program========= start:...
W najnowszym RealView chyba jest odwrotnie, czyli chyba tylko mogę zastosować embeded http://www.keil.com/support/man/docs/arm... Heh miałem nadzieję, że nie będę musiał zagłębiać się w assemblera, ale mówi się trudno :) Mam pytanie odnośnie zwracania w r0. Pod hasłem Embedded assembler syntax(http://www.keil.com/support/man/d...
Jak wyliczyć (Wykonać) dokładnie opóźnienie np. 500ms Nie chcę tego robić na timerze ! Chodzi mi o to jak wyznaczyć taką liczbę cykli procesora które zajmie pętla for tak aby wykonała się dokładnie w 500ms Do dokładnego odmierzania czasu służą timery. Jeżeli nie chcesz, to masz złe podejście. Nie chodzi mi o czysty assembler tylko o wykonywanie pętli...
jako typ projektu (projekt C) musisz wybrać "AVR Cross Target Application" i wybrać domyślny toolchain. Zakładam że wtyczke avr (jak i avrdude - gdy chcesz wgrywać wsad bezpośrednio z eclipsa) poprawnie zainstalowałeś skonfigurowałeś, jak stworzysz projekt to musisz go odpowiednio ustawić, mniejwięcej opisze jak ja to robie: project->stettings i...
Prawda, należało tam zmienić ścieżkę kompilatora. Można również pomóc sobie dowiązaniem symbolicznym. Jeżeli mamy kilka kompilatorów w systemie i chcemy szybko dokonać wyboru którego z nich chcemy użyć, to można nieco zmodyfikować makefile'a dodając coś takiego: [syntax=c] # ----------------------------------------...
www.maxim-ic.com <-- spróbuj poszukać tego twojego "MAX"a... poza tym. skoro masz juz sc16311, to po co ci inny/dodatkowy/zamienny driver do VFD? Dodawać RTC? zalezy czy chcesz go dodać :] To jest typowo konstruktorskie pytanie, no a ze to twoj uklad, to musisz zdecydowac sam... Do budowy zegarka pod driver sterowany jakas badziewna magistrala szeregowa...
Nie, takie coś, to wstawki assemblerowe w kod. Ja chcę oddzielnie zasemblerować kod assemblera (otrzymam plik .obj) i dołączyć go do buildera (Add to project). Plik się dodaje, nie ma błędów, ale w builderze nie widać assemblerowych procedur.
To ja dam jeszcze podpowiedź ze starych czasów assemblera: Zero ascii ma kod 0x30. Potem kolejne cyferki lecą po kolei czyli 9 ascii = 0x39 Jak chcesz wyświetlić zmienną zawierającą wartość 0-9 to dodajesz do niej 0x30 lub '0', bo apostrofy tłumaczą jeden znak ascii na jego wartość, i wysyłasz na wyświetlacz (czy to LCD, czy port szeregowy/terminal)....
... zrobiłem to celowo by kod był możliwie najkrótszy choć tak naprawdę można byłoby go jeszcze skrócić pisząc w asm bo kompilator dodaje prolog i epilog ISR...robiw Nie trzeba assemblera - wystarczy ISR_NAKED: http://www.nongnu.org/avr-libc/user-manu...
Podaję za Arm Architecture Manual: Tak wygląda kodowanie instrukcji (a konkretnie 24 bitów odpowiedzialnych za offset) To calculate the correct value of signed_immed_24, the assembler (or other toolkit component) needs to: 1. Form the base address for this branch instruction. This is the address of the instruction, plus 8. In other words, this base...
Jeśli piszesz w językach wyższego poziomu, to najczęściej czas inicjalizacji załatwia sprawę za Ciebie. W assemblerze musisz pamiętać o wszystkim. O, to dobrze. Docelowo zamierzam pisać w C, jednak najpierw chciałem się assemblerem pobawić żeby dokładniej wiedzieć co leży pod spodem. :) Czas czekania zależy od stałych czasowych na wejściach (wartość...
Chodzi o procesor ST32F103 z rdzeniem Cortex-M3. Wykonuje na przykład dodawanie dwoch liczb wielokrotnej precyzji (n-bitowej i m-bitowej). Liczby zapisane sa w systemie o podstawie 2^32. W assemblerze realizuje tylko czesc operacji na slowach. # IntLongWord ulFastMathAdd (IntWord uxA, IntWord uxB) .global ulFastMathAdd .thumb_func ulFastMathAdd:...
Program skompilowany w wersji z symbolami debugowania ( która część źródeł odpowiada instrukcjom ) może być uruchomiony bez podłączonego debuggera, analogicznie sesją debugowania można się podłączyć do zwykłego programu na MCU - wystarczy wprowadzić dodatkowe instrukcje. what? (; Nie no, sorry - naprawdę nie wiem o czym Ty piszesz... Co chcesz porównywać...
0. Proponuję przeczytać opis instrukcji rdzenia z rodziny C51. Widać, że tego nie zrobiłeś. 1. Adresowanie indeksowe może być zrealizowane tylko w oparciu o rejestry R0, R1, DPTR i PC. Poprawne są zapisy: [syntax=x86asm]MOV A,(at)R0 DEC (at)R1 MOVX (at)DPTR,A MOVX A,(at)R0 MOVC A,(at)A+PC Nie jest prawidłowe: MOV A,(at)R3 ADD A,(at)R7 [/syntax] 2. Instrukcja...
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.......
Nadszedł czas na assembler i przerabiając po kolei rozkazy jak na razie znalazłem 2 które działają dla mnie niejasno. 1.Jaki powinien być wynik tej operacji. ldi r24,$FE ldi r25,$03 adc r24,r25 W symulacji w Avr Studio otrzymuje wynik 01 ale przecież powinno być 02 ponieważ dodawana jest również flaga C(przepełnienie). Avr studio pokazuje że flaga C...
Niektóre kompilatory umożliwiają zastosowanie acc, ale już mniejsza o to. Program jest bardzo prosty i nie bardzo jest tu co wyjaśniać. To jest jak mnożenie dziesiętne: 23 * 5: 3 * 5 = 15 2 * 5 = 10 Zapisujesz o tak: _15 10_ Dodajesz zera: 015 100 I dodajesz: 115 Tak samo działa ten program, tylko że binarnie.
Napisałem coś takiego ASSEMBLER ;klawiatura KEY_START EQU P1.1 KEY_UP EQU P1.2 TX EQU 031H; ZMIANNA DLA TIMERA WY1 EQU P2.2 ;Wyjście generatora ;TIMERY T0_G EQU 0 T0_C EQU 0 T0_M EQU 1 TIM0 EQU T0_M+T0_C*4+T0_G*8 T1_G EQU 0 T1_C EQU 0 T1_M EQU 0 TIM1 EQU T1_M+T1_C*4+T1_G*8 TMOD_SET EQU TIM0+TIM1*16 THO_SET EQU 256-180 TLO_SET EQU 0 ;***************************************...
Podstawowym problemem jest to że wybierasz pixele z tablic ustawionych "pionowo". Działało by to znaczenie szybciej jak byś pakował pixele do tablic "poziomych" Tzn. takich gdzie każda tablica miała by powiedzmy 53 pixele i tych tablic było by 240. Wtedy te tablice o 53 pixelach jako że działało by to szybciej mogły by mieć więcej niż 53 pixele. Na...
Jeśli to są wszystkie zmiany które dodałeś, to u mnie taka kompilacja przechodzi bez problemów **** Build of configuration Default for project lpc2103_blink_led **** cs-make all Assembling file: startup.S arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi-s -g -ggdb3 -Wa,-amhls=out/startup.lst -D__USES_CXX -MD -MP -MF out/startup.d -I. startup.S...
Cała sztuczka ze zleceniem przeliczenia wszystkiego jest w tym macro adcV() a reszta to przygotowanie do tego numeru ;) Nadmiarowo nawiasy tam są i rzutowania typów, bo lepiej widoczne. jak widać tylko dzielenia i mnożenia przez wielokrotność 2 robię później, bo to jest jako przesunięcia bitów realizowane na tych RISC owych AVRach. To są małe potwory,...
ja mysle ze powinno sie dazyc do tego, aby jak najefektywniej wykorzystywac zasoby sprzetowe, a nie je rozbudowywac Aa, czyli piszmy w assemblerze? Bo przecież tam zasoby sprzętowe są najlepiej wykorzystywane, C dodaje coś od siebie, C++ też, a C# to już w ogóle wymaga tego strasznego .NET Framework. PS. A "szybkość" W7 może być efektem placebo i niczym...
witam i podziwiam :) nie chce mi się wyciągać ZX z szafki i znowu gapić się w ten zielony monitor :) Dzięki Sinclairowi za Spectruma ! gdyby nie ten komputer to nie znałbym się na mikroelektronice. Rok temu przesiadłem się na PCta, i przekładam swoje programy na intelowskie mnemoniki '25 * 255 ORG 0 ; jeśli to "samoróba" ORG 32768 ; jeśli...
Masz napisać procedury mnożenia liczb: 1 bajtowej przez 1 bajtową (8x8) wynik będzie 16 bitowy (2 bajty) 2 bajtowej przez 1 bajtową (16x8) wynik będzie 24 bitowy 3 bajty 2 bajtowej przez 2 bajtową (16x16) wynik będzie 32 bitowy (4 bajty) Procedura przebiega tak w kodzie naturalnym binarnym: 1. Przygotowujesz rejestr wyniku o długości równej sumie ilości...
Teraz już sprawy idą w lepszym kierunku. Problematyczny jest jeszcze sposób deklaracji zmiennych w programie. Proponuję pobrać z internetu dowolny assembler na 8051 (np. ASEM-51), wtedy wszystkie błędy składniowe można na bieżąco sprawdzać. Struktura programu (dowolnego) może wyglądać np. tak: - deklaracja zmiennych i stałych, - instrukcja skoku do...
Korzystam z winavr i dodawałem tam HD44780.c ale dla pewności dodam plik makefile [syntax=c]# Hey Emacs, this is a -*- makefile -*- #---------------------------------------... # WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. # # Released to the Public Domain # # Additional material for this...
dodawanie assembler assembler dodawanie bitowe assembler darmowy assembler
volvo potencjometr przepustnica simson kabel stacyjka zwarcie wirnika klatkowego
Jak zlikwidować immobilizer w Ford Windstar 1995 Skoda Octavia 2 1.6 MPI 2004 - Zmiana komfortu jazdy