1. dyrektywa asemblera .cseg .org "mówi" kompilatorowi od jakiego adresu umieścić kod wynikowy programu po skompilowaniu 2. stosu mógłbyś nie używać tylko wtedy gdybyś nie używał instrukcji typu rcall lub innych skoków do podprocedur, które muszą odłożyć na stosie punkt do którego ma wrócić program po zakończeniu tejże podprocedury - po rozkazie ret,...
.INCLUDE "m16def.inc" ldi R16, 0xFF out DDRA, R16 .EQU SYS_FREQ = 16 Petla: ldi R16, 0b11111111 out PORTA, R16 rjmp Delay 'to jest skok we wskazane miejsce a nie do procedury. powinno być rcall Delay ldi R16, 0b00000000 out PORTA, R16 tu też brakuje opużnienia rjmp Petla Delay: ldi R16, 1 ldi R16, 1 push R18 push R19 push R20 push R21 mov R20, R16 mov...
1.jak wynika inicjalizacja procka nie łąpię, nie potrzeba inicjalizacji samego procka, on od razu działa 2.jak zainicjowac stos(pewnie to do 1.i pewnie mnemonik mov) też nie łapię stos już jest, można go przenosić w inne miejsce (rzadkość) PUSH rejestr wrzucenie na stos POP rejestr pobranie ze stosu 3.jak wykonac operacje porownania zmienna1>zmienna2...
Panowie nie wiem czy w dobrym to dziale pisze jak nie prosze o przeniesienie ale prosze rowniez o pomoc mam w poniedzialek spr. prawie calo roczny i musze to miec conajmiej na niedziele 1.Na czym polega multipleksowanie 2.Jakie podstawowe funkcje pełni rejestr 3.Zamień cyfrę w zapisie 10 tnym na bierna i heks. 4.co to jest akumulator i jaka pelni funkcje...
AVR studio (asembler) to nie Bascom... tu nie ma czegoś takiego jak komendy do obsługi sprzętowych liczników, musisz używać rozkazów uP i konfigurować odpowiednie rejestry i przede wszystkim odpowiednio używać przerwań, bo one są chyba najważniejszym elementem, którego używa się przy pracy z licznikami. Musisz wziąć notkę katalogową tego atmelka i przejrzeć,...
;* ;***************************************... ;*PROCEDURA WYLICZANIA SUMY KONTROLNEJ Z NUMERU SERYJNEGO UKŁADU 1-Wire ;***************************************... ;* ;* ;*******************************OPIS****... ;*Kolejne bajty numeru seryjnego...
Kiedyś zrobiłem coś takiego dla s1200, 2313 itp. Jak chcesz to sobie przerób. Program odmierza czas, a po jego upłynięciu zaczyna migać żarówką (np wyłącza ją na 1s, potem zapala na 10s i tak 3 razy), a na koniec gasi żarówkę. Program nie jest jakoś super napisany, ale z tego co pamiętam działał. Do asemblacji radziłbym użyć oryginalnego assemblera...
Witam, pod "wartość" podstawiasz tą samą wartość co w przypadku PUSH/POP (czyli rejestr, który chcesz położyć na/zdjąć ze stos(u)) A co do stosu, to 2 bo te rejestry są 16-to bitowe - 2 bajty. :roll: Pozdrawiam, GSM
Oczywiście, że nie zadziała. Ze stosu w tym momencie możesz zdjąć tylko to co tam położyłeś czyli "pop R0". To ten trzeci typ prawdy wg. ks Tischnera. elvis1987 -> czy kompilator pokazuje w której linii jest błąd? Pamiętaj, że PUSH i POP działają z argumentami direct - być może zamiast nazw rejestrów musisz podać ich adres.
Na pewno na pierwszym miejscu jest zestaw instrukcji. Na przykład możliwość łatwego adresowania tablic obiektów o rozmiarze większym niż 1 bajt powiedzmy w ARM, czy w MC68020 i wyższych, lub na przykład wykonywanie operacji na 16 i więcej bitach za pomocą instrukcji operujących na danych ośmiobitowych (dodawanie, odejmowanie, porównanie itd. z propagacją...
Dzieki bardzo. Ale mam jeszcze jedno pytanko - czy da sie wykorzystac dwa lub więcej razy ten sam rejestr który ma te sama nazwe w różnych procedurach. Rejestr ten używał bym w programie głównym i wykonywal na nim operacje ale po wejsciu do jakiejs procedury chciałbym aby był on maskowany i zachowywał swoje wartosci bo teraz chce go uzywac do innych...
Podejrzewam, że używasz Keila, chociaż to nie ma większego znaczenia. Sprawdź, czy masz ustawiony stos dla FIQ. Domyślnie ma on rozmiar 0, co sprawia, że FIQ "zjada" stos IRQ. Właściwie FIQ można obsłużyć bez stosu, ale trzeba to zrobić pod asemblerem. Zauważ, że korzystasz z tej samej dyrektywy __irq. Oznacza to, że FIQ jest obsługiwane tak samo jak...
Nie, zapamiętywanie PC na stosie jest realizowane automatycznie przez procesor. Jeśli dasz naked to musisz tylko zapamiętać modyfikowane rejestry ina końcu dodać RETI. W praktyce z naked cały ISR należałoby napisać w asemblerze. Tak naprawdę dla tak małego procka cały program sensowniej byłoby napisać w asemblerze. Masz 16 rejestrów, byćmoże da się...
Dopisanie pętli nadrzędnej musi poskutkować. Oczywiście jej licznik musi być niezależny od liczników pętli zagnieżdżonych. Jest kilka możliwych rozwiązań, a najprostszym chyba będzie użycie stosu, czyli: .startup mov cx, 10 petla_glowna: push cx ... pop cx loop petla_glowna .exit
Ja mam takie zdanie że rzekoma "prostota" assemblera PICów wcale prostotą nie jest. Raz że instrukcji jest mało i żeby zrobić byle co to trzeba to poskładać ze 100 innych instrukcji (choćby mnożenie), to jeszcze jest wąskie gardło w postaci chyba tylko jednego pełnosprytnego rejestru (taki akumulator). Na AVR masz bogaty zestaw instrukcji (np. jest...
Witaj, No save spokojnie możesz użyć.... pod warunkiem, że nie korzystasz w obsłudze przerwania z instrukcji Bascoma bo jeśli tak to nie odkładając rejestrów na stos, zgubisz ich wartości i w najlepszym przypadku będą się działy różne rzeczy. Ja bym napisał wstawkę w asemblerze odkładając wcześniej na stos używane rejestry w tym SREG. Możesz też użyc...
Witam Procedura gotowa, działa na przerwaniu i wyrabia się w 40 cykli zegara (około), ale nie odkładam rejestrów licznika na stos, jeżeli licznik będzie w SRAM to trzeba dodać zachowanie na stosie rejestrów Y. Na razie popatrz na asembler i napisz co z tego rozumiesz, acha, algorytm jest inny niż twój. INT0INT1: push r16 ;odłożenie rejestrów i SREG...
Na stos są odkładane dane tylko podczas wywoływania funkcji lub przy przerwaniach - wiadomo, adres powrotu, odkładanie rejestrów roboczych etc.. w takiej pętli nie ma operacji na stosie (nie powinno być). Jakkolwiek "goto na_zewnatrz" robi z kodu troche spaghetti - skoki goto są bardzo nie czytelne... tutaj lepiej użyć "break;" który kończy wykonywanie...
Aby wykonywać zagnieżdżone pętle musisz skorzystać ze stosu, czyli z funkcji pop i push , bo pętla korzysta z cx więc każda zmiana tego rejestru wewnątrz pętli może popsuć pętlę. Rozwiązaniem jest wrzucenie cx na stos i użycie jej w drugiej pętli a później odczytanie cx. Przykład taki "mniej więcej", bo już dawno nie pisałem w asemblerze (może nie działać...
ad. 2. W asmemblerze MC68k :], a co? jak dowolny, to dowolny :] (asm x86 nie znam za bardzo) Założenia: argument funkcji podawany jest przez stos (wskaźnik stosu - rejestr A7, stos rośnie w dół) Wartość (wskaźnik) zwracana jest w rejestrze D0. Reszta rejestrów pozostaje niezmieniona. Za obsługę stosu odpowiada funkcja wywołująca, więc po powrocie z...
Witam, ja z takim zapytaniem czy te książki Sztuka programowania mikrokontrolerów AVR- podstawy i Sztuka programowania mikrokontrolerów AVR- przykłady Andrzeja Pawluczuka są "dobre" jeśli chodzi o poznanie asemblera i później używanie go przy pisaniu programów pod AVR'y? Wg. mnie książki Andrzeja Pawlczuka są bardzo dobre. Sam z korzystałem z tych...
push/pop stosuje się, żeby zachować wartość początkową rejestrów, jeśli w innym miejscu programu są wykorzystywane. ldz - nie ma takiego menmonika w asemblerze AVR. Zapewne to jakieś makro. brcc - wykonuje skok jeśli wskaźnik carry (przeniesienia) jest wyzerowany, co ten wskaźnik oznacza to sobie doszukasz. lpm r16, z - ładuje do rejestru r16 wartość...
Najlepszą metodą znalezienia błędu w przypadku jak nic nie pomaga jest analiza kodu w asemblerze jaki został wygenerowany z twojego programu i porównanie go z działającym programem. Pamiętaj że rdzeń cortex-m0 w przeciwieństwie do cortex-m3 jest znacznie prostszy i analiza asemblera nie jest aż tak skomplikowana oczywiście na początku wyda ci się to...
Cóż, po kolei opowiem co nieco z moich doświadczeń. 1. Jak mogę poznać podstawy assemblera? (Assembler czy asembler?) Musisz poczytać nieco o architekturze procka. W zasadzie może być dowolny. Może to być standardowy procek "PCtowy" (mam tu na myśli architekturę x86). Do tego polecam książkę "Jak pisać wirusy". Jest to podstawowy kurs asemblera x86...
Witam Proponuję jednak zapoznać się z kursem asemblera z EdW. Wyjdzie to na zdrowie. Instrukcja RET jest do powrotu z podprogramu do którego skaczemy LCALL, ACALL. NAtomiast z przerwania zawsze wychodzimy przez RETI. W obsługę przerwania wchodzimy zupełnie inaczej. Jak wystąpi warunek przerwania to procek automatycznie odkłada na stos adres powrotu...
Witam. Wygląda na to, że Kolega niewłaściwie używa instrukcji skoków, próbując zastosować po nich instrukcję RET. Taka konstrukcja ma zastosowanie przy wywoływaniu podprogramów instrukcjami LCALL lub ACALL. Te dwa rozkazy zapamiętują adres powrotny, umieszczając go na stosie. Natomiast RET odczytuje ten adres i powoduje dalsze wykonywanie programu właśnie...
No tak, rejestr B muszę wrzucić na stos żeby odzyskać stan B.0 po wyjściu z przerwania. To w którym momencie powinienem odczytać B ze stosu ?
O kurcze, lata świetlne już nie miałem do czynienia z asemblerem dla 68K. :) I zdążyłem zapomnieć o "zakresach rejestrów"... 68K to jest procesor/rdzeń klasy CISC i niektóre instrukcje mają dość rozbudowaną funkcjonalność. Szukając dokumentacji asemblera, szukaj dla całej rodziny MC68K; tu masz przykłady: [url=https://www.google.com/url?sa=t&rct...
Witam, mam prośbę o wytłumaczenie mi, fragmentu kodu, no może nie fragmentu a konwencji: piszę/napisałem program w c, który wywołuje w pewnym momencie asemblera. chodzi mi konkretnie o to czemu muszę na początku zrzucić zawartość ebx na stos, a na końcu ją przywrócić? (sprawdziłem -> bez tych dwóch linijek program nie działa, kompiluje się i odpala,...
Przecież w C też możesz obslugiwać przerwania i napewno kompilator źle tgo nie zrobi. A napewno nie zapomni o schowaniu ważnych rejestrów na stos.
czyli po prostu narysowałem 3 rejestry jeden nad drugim, jakie zostały dodane do stosu, do danej chwili.
Jest jednak podstawowy problem - czy jest jakieś niedrogie lub darmowe oprogramowanie umożliwiające taki podgląd. Od strony sprzętowej mam interfejs USB Blaster rev. C - działało mi to z TOPJtag ( http://www.topjtag.com/ ). Możesz użyć narzędzi typu Atmel ICE lub Snap w połączeniu z Atmel Studio. Wtedy robisz attach to target i możesz sobie wygodnie...
http://obrazki.elektroda.pl/5937161900_1... Chciałbym zaprezentować prosty licznik Geigera, jaki ostatnio wykonałem. Urządzenie oparte jest o powszechnie znaną radziecką tubę STS-5. Lampa ta jest ciekawa, ponieważ jest stosunkowo czuła. Jako element sterujący zastosowałem mój ulubiony mikrokontroler rodziny 8051 typu AT89C2051 z typowym...
STOS - ogólna wersja STOSB, B od BYTE 8bit STOSW, W od WORD 16bit STOSD, D od DOUBLE WORD 32bit Instrukcja ta zapamiętuje wartość (od góry idąc) rejestru AL,AX,EAX pod adresem ESI:DI a w zasadzie ESI:EDI Pozdrawiam !
.org 0x0000 ; ustawia adres w pamięci programu rjmp reset ; skocz do etykiety ... ; wektor przerwania timer 1 .org 0x0005 rjmp led_off ; skocz do obsługi przerwania ; w tym przykładzie początek programu głównego reset: ; Jako pierwsze ustawienia stosu (w asemblerze jest to ; bardzo ważna operacja i programista nie może o tym zapomnieć)....
Stos w pamieci ma jedna ogromna zalete... moze byc teoretycznie "nieograniczony" rozmiarami. Ile mozesz miec takich rejestrow roboczych w pamieci? 1 zestaw? 5 zestawow? 15 zestawow? Jak z nich nie korzystasz to marnuja sie zasoby procka... jak potrzebujesz wrzucic na stos wiecej danych niz mialbys rejestrow to procek moze wysiasc, mimo ze ma jeszcze...
$katalog_WinAVR$/doc/avr-libc/avr-libc-u... Tworzysz osobny plik w asemblerze (.S, nie .s) zawierający procedurę obsługi przerwania, kompilujesz do pliku .o i linkujesz z pozostałymi plikami. W dołączanym wo WinAVR szablonie Makefile jest przewidziane miejsce na wypisanie źródeł w asemblerze (ASRC = $tu wpisz nazwy plików$). Przykład,...
Napewno nie tylko przy skokach do przerwan ale takze przy wywolywaniu funkcji (musi istniec adres powrotu).Generalnie AVR jako przedstawiciel rodziny z duza iloscia rejestrow ogolnego przeznaczenia przekazuje parametry do funkcji za pomoca rejestrow procesora.W architekturach "ubogich" w rejestry gdzie wystepuje zazwyczaj akumulator i ewentualnie jeden...
Zgadza się instruckja CALL to skok ze śladem, a ten ślad czyli adres jest odkładany na stosie. Instrukcaj RET to skok pośladzie - pobiera adres ze stosu i skacze. Z tej załączonej deasemblacji widać że kompilator dobrze to przetłumaczył. Po wejściu w podprogram odłożył dwa rejestry na stos a potem dwa rejestry ściągnął ze stosu. Więc nie miało miejsca...
Stos mi się nie przepełnia - jestem o tym przekonany. Jesteś tylko przekonany, czy pewien? ;-) Właśnie analizuję wygenerowany kod asemblera (plik *.lss) i chyba jestem na tropie... points[67].x=16+CHAR12_X_OFFSET;... 1afc:88 e8 ldir24, 0x88; 136 1afe:90 e0 ldir25, 0x00; 0 1b00:90 93 40 04 sts0x0440,...
juz dawno nie pisałem w asm ale wydaje mi sie ze przyczyna twoich problemów moze być nieustawienie rejestrów stosu (SPH I SPL). kiedyś też 2 dni myślałem czemu program nie działa az w koncu po ustawieniu stosu ruszyło. chociaż w sumie niby w tej pętli stos jest niepotrzebny to moze o to chodzić. pozdrawiam
Proponuję naukę MIPS'ów zaczęć od języka C. Asembler jest trudny ze względu na brak mikroprogramowania w procesorze , wszystkie operacje które w innych architekturach są realizowane sprzętowo w MIPS'ie realizuje program główny np. stos, przełączanie kontekstów, brak rejestru znaczników, itd. funkcja zliczająca zera # we $a0 liczba # wy $v0 ilosc zer...
songeta: nie wiadomo ile funkcja czekaj będzie się wykonywała, zależny jak sobie to "przetłumaczy" kompilator na asembler + dodatkowy narzut na zapamiętanie pewnych rejestrów na stosie, a przed powrotem z funkcji pobranie ich ze stosu. Tak jak wcześniej wspomniałem bez wstawki asemblerowej się nie obejdzie. Jakiego środowiska programistycznego używasz...
po pierwsze po dyrektywie .cseg podaj .org 0 a program niestety leci ci w maliny bo troszeczkę namieszałeś. gdy już zaczyna się pętla główna programu main: to sprawdzasz poleceniem SBIS PINC, 0 czy przycisk jest naciśnięty i jesli tak czyli PINC0 zwarty jest do masy to robisz skok do etykiet zwieksz i do tąd w takich rozważaniach jest ok a delej to...
RISC nie poznaje się po długości listy instrukcji, a po tym, co te instrukcje potrafią. Np. nie potrafią równocześnie przesyłać danych do pamięci i zmieniać wskaźnika stosu (PUSH/POP). W ARM jest PUSH/POP/LDM/STM, w dodatku na wielu rejestrach w jednej instrukcji - bardzo nieRISCowa cecha. Za to RISCową cechą jest rejestr LR i architektura typu Load-Store....
A w czym dokładnie masz problem? Do zapisania danych pod adresami odpowiednimi uzyj adresowania pośredniego. Przykładowy algorytm moze wygladac tak: 1.Do jakiegos rejestru wrzuc pierwsza liczbę. 2. Potem odejmuj od niej każdą następną. Ze zbioru. 3. Po kazdym odjeciu sprawdz czy wynik jest ujemny (sprowadza sie do sprawdzenia jednego bitu ). Jesli jest...
Ja często stosuję taką konstrukcję: TabKon: anl a,#0fh inca movc a,(at)a+PC ret ; hgfedcba db 00111111b ;0 db 00000110b ;1 db 01011011b ;2 db 01001111b ;3 db 01100110b ;4 db 01101101b ;5 nie wymaga stosowania wskaźnika DPTR
chciałbym zrobić cos takiego push dword ptr 12 fild dword ptr [esp] add esp, 4 tylko ze tak kod nie działa :( Ogółem przy wykorzystaniu rejestrów procesora chciałbym wrzucić liczbę do st(0) koprocesora.
double func( double A Hmm.. A jak 64-bitowa liczba double została zmieszczona w czterech 8-bitowych rejestrach? Magia się dzieje :) Ta sama magia jaką stosuje kompilator GCC. Jeżeli go stosujesz i jesteś przekonany że gdy wpiszesz double to masz podwójną precyzję to jesteś w błędzie :-). (takie informacje wyciągnołem z kursu C zamieszczonego w EDW)....
Potrezbuje napisać program w asemblerze zapisujacy liczbe trzycyfrowa Mam zapisać liczbe 172 R0 - od 0 do 256 R1 - jednosci 2 R2 - dziesiatki 7 R3 - setki 1 Na tak sformułowane zadanie może być tylko taka odpowiedź :D (przemyśl jeszcze treść tego zadania) START: MOV SP,#6F ; Ustawienie wskaźnika stosu MOV R0,#172 ; załadowanie do R0 liczby do rozpisania...
rejestr stosu asembler rejestr adresowa rejestr asembler
ricoh reset bębna kabel zasilający przedłużacz miernik dzwiek
prowadzenie serwisu program prowadzenie serwisu program
Awaria sterowania podajnika: przyczyny i diagnostyka Raspberry Pi: Problemy z działaniem systemu na SSD