Trzeba się też nauczyć pisać w C. Kto korzysta z printf? Przecież to czyste marnotrawstwo. Ostatnio napisałem programik w C na AVR, w którym tak udało mi się dobrać rejestry i zaprojektować cały program, że zdecydowana większość linijek w C została skompilowana do 1 linijki w asemblerze.
Witam, Przejdę od razu do rzeczy. Mam problem ze skompilowaniem poniższego kodu w WinAVR. Całość jest w C, jedynie jeden plik, zważywszy na zależności czasowe, pisany jest w asemblerze. Oto problematyczny kawałek: SPI_SEND: ;<-- sbi SPCR,SPE ;enable SPI out SPDR,r24 ;load byte in SPI data register SPI_SEND_0: sbis SPSR,SPIF ;<-- rjmp SPI_SEND_0...
Hej, Na początek, odejmować, to znaczy dodawać zanegowaną wartość. Czyli: 10 - 50 to nic innego jak 10 + (-50) Skomplikowanie to wygląda, ale zaraz tłumaczonko będzie, tylko uruchomię sobie SIM51ENG, bo taki mam dostępny symulator 51, bo rozumiem, że to dla MCS-51 ma być? Oto kod w asemblerze. mov R0,#10 przesyła do rejestru R0, pierwsza liczbe mov...
ok juz wiem ze w gcc asembler ma byc w notacji AT&T i moj kod wyglada tak : __asm__ __volatile__("mov $0x378, %dx"); __asm__ __volatile__ ("mov $0, %%al "::"r" (wartosc)); __asm__ __volatile__ ("out %al, %dx"); jest tylko jeden problem, zapis '$0' w drugiej linii jest traktowany jaka stala i programmi zeruje rejestr danych LPT:/moze ktos cos poradzi,...
Witam, ldi r16, $12 ; Załadowanie wartości $12 do rejestru sts $60, r16 ; Wpisanie wartości rejestru r16 pod adres $60 w SRAM'ie lds r17, $60 ; Wczytanie wartości spod adresu $60 do rejestru r17 Najlepiej poczytaj o tych rozkazach w dokumentacji: Pozdrawiam, Tomek
• XOR AX, AX zerowanie rejestru AX(dla takich samych wartosci wynikiem xora jest 0) • MOV AL, '6' wpisujesz do AL wartosc kodu ASCII jaka ma 6 czyli 0x36 • ADD AL, '7' dodajesz 0x37(wartosc 7) do AL • AAA ; AX:=0103H nie mam pojecia ;) ale znalazlem cos takiego Instrukcja AAA rozdziela liczbę dwójkową w AX nie większą niż 18...
Super, że napisałeś o jaki procesor chodzi... Sądząc z instrukcji o '51. mov to instrukcja przeniesieania wartości z/do pamięci wewnętrnej/rejestrów uC, movx to instrukcja dostępu do zewnętrznej pamięci danych (fizycznie inny układ scalony niż uC), DPTR to 16 bitowy rejestr używany generalnie przy adresowaniu komórek pamięci zewnętrznej, choć można...
Witam, Mam drobny problem z użyciem wbudowanego przetwornika C/A w moim procku ADuC847. Próbuję go ruszyć spod Bascoma (używając wstawek asemblerowych), ale że nie mam bibliotek do niego muszę podawać ręcznie adresy rejestrów sterujących przetwornikiem. Stąd też mam problem, adres rejestru sterującego przetwornikiem to FDh a rejestru skąd mają być wystawione...
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...
Witam. Pisze właśnie 48 kanałowy moduł PWM. Procesor to atmega 169. problem Polega na tym że odświeżanie jest trochę za wolne jak na moje oko - nie wiem czy nie przegiąłem z liczbą kanałów obsługiwanych przez jeden procesor. Pierwotnie napisałem program w bascomie - działa ale zdecydowanie za bardzo miga. Metoda chyba najszybsza z możliwych czyli programowy...
Witam. Mam problem z pewnym programem. A mianowiciie chodzi o licznik impulsow na ukladzie AT89C4051. Mam w planie dwa wyswitlacze led i nie wiem jak mam zrobic zeby po zliczeniu ponad 9 impulsow oddzielic do jednego rejestru liczbe dziesiatek a do drugiego liczbe jednosci. Z gory dzieki za pomoc.
W programie głównym jest zapisywana wartość do DPTR określająca adres początku tablicy np: movc DPTR,#text1. Nastepnie program skacze do procedury odczytu tej tablicy i wszystko jest w porządku tzn. odczytuje kolejne znaki (do zwiększania adresu służy właśnie R1 'mov A,R1' i potem movc A,(at)A+DPTR). Procedura odczytuje znaki i zapisuje je kolejno w...
Cześć Przede wszystkim musze powiedzieć że nie znam sie ani odrobine na asemblerze . Mamy tu koder do 4kanałowego sterowania proporcjonalngo w asm'ie na attiny 15. teraz pytanie -czy da sie przerobić kod tak ,aby miał ich 7 lub 8kanałów i wrzucić go do Attiny 26 ?? I czy to koder PPM?? PS niestety nie przypomnę sobie strony z której wziąłem ten schemat...
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...
Na pewno, to to jest jakiś program ;)) Z tego co widzę, to usiłuje on wczytać dwie liczby w zakresie 0-65535 i ... nic więcej :))) Żadnego 372 tu nie ma, a za to jest martwa pętla :)) model tiny .stack 2H .data napis1 db 'Pokaz','$' napis2 db 10,13,'Podaj pierwsza liczbe: ','$' napis3 db 10,13,'Podaj druga liczbe: ','$' napis4 db 10,13,'koniec','$'...
no przeciez juz to sam napisales... rotacja sobie wrzucasz bit do Carry, nastepnie przerotowywujesz owe Carry dalej do jakiegos (wyczyszczonego wczesniej) rejestru na dowolna pozycje, choc najlepiej na LSB. dokladnie to samo robisz dla drugiej zmiennej, tyle ze wykorzystujesz jako adres drugi rejestr. czyli ze jesli akurat twoim bitem aktualnym jest...
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.
Z rejestrem EDX napewno nie działa, bo to nie o to chodzi. Karta którą posiadam, to karta i/o pod slot ISA. Rozrysowałem sobie schemat, aby dopatrzeć się jaki może mieć adres, by ją obsługiwać. Okazało się, że ma zajęte piny od A0 do A19. Po przeanalizowaniu układów scalonych i ustawieniu odpowiednio przełącznków switha, wychodzi mi, że adres powinien...
Witam. Asembler to język programowania tzw. niskiego poziomu. W uproszczeniu jedna instrukcja w asemblerze przekłada się na jeden rozkaz wykonywany przez procesor. Daje to najpełniejszy dostęp do możliwości oferowanych przez sprzęt, ale jednocześnie silnie wiąże ten język z konkretnym procesorem. Innymi słowy, każdy procesor (a w zasadzie rodzina) ma...
Witam, Mam taki problem, mam za zadanie stworzyc stoper w asemblerze, na mikrokontrolerze opartym o 51-ke. Moj głowny problem to stworzenie miedzyczasu w tym programie, niestety nie jestem zbyt biegly w tym jezyku więc prosilbym o pomoc. Dodam jeszcze że stoper ma byc wyswietlany na wyświetlaczu 7 segmentowym, wbudowanym w zestaw na jakim pracujemy....
Masz jeszcze kilka rozwiązań. Skoro to całe funkcje, to możesz je przenieść do osobnego pliku z rozszerzeniem .S - plik asemblera, który przed asemblacją zostanie przetworzony przez preprocesor - możesz tam normalnie używać #define, #include itd. Oczywiście musisz się stosować do konwencji przekazywania parametrów/zachowywania rejestrów. Jeśli chodzi...
Tutaj masz waszystko o timerach w '51. W 89s51 są tylko dwa T0 i T1. Zasada jest prosta. W twoim przypadku najlepiej żeby timer pracował jako 16bit. Tryb pracy ustwia się w TMOD. (Masz w opisie bit M1 i M0). Ma zliczać impulsy z zegara systemowego który wynosi Fosc/12. Jeszcze trzeba odblokować przerwania EA i indywidualne ET0 lub ET1 w rejestrze IE....
Witam wszystkich bardzo serdecznie. Jestem dość nowy i mam nadzieje, że nie urażę niczyich ambicji tym tematem. Podobny był wprawdzie już poruszony ale nieco jednak "z innej beczki" Przeszukałem zasoby internetu i nie znalazłem jednoznacznej odpowiedzi na temat mnożenia ułamków. Oto mój problem: Chcę obliczyć funkcję typu: y = -0,5513x2 + 10,1564x1...
Witam. Dzieki pomocy tutejszego forum, znalazlem biblioteke procedur matematycznych w asemblerze AVR, jednak zupelnie nie potrafie ich uzyc. Po pierwsze nie wiem co to za asembler - AVRStudio nie przyjmuje np. takich polecen jak: public adres: Musialem wszedzie zlikwidowac slowo 'public' zostawiajac tylko - adres: AVR Studio nie przyjmuje polecen 'dc.b'...
Witam. Zająłem sie tworzeniem prostego generatora DDS na ATmega16. Przetwornik to drabinka R-2R. Rozdzielczość 8 bitów, kwarc 8MHz (oczywiście możliwa zamiana na 16MHz). W pamięci mikroprocesora przechowuje 256 próbek sygnałów (np. sinus, piła). Poprzez tryb CTC Timer1 (preskaler ustawiony na 1) obsługuje przerwanie. Niestety napotkałem na problem -...
Witam, zlecę napisanie lub kupię gotowy kod do obsługi protokołu modbus RTU AVR slave. Master również mile widziany ale głównie zależy mi na kodzie do modbus RTU slave. Kod asembler AVR nie precyzuję jaki procesor bo jak bedę miał gotowy kod to już sobie przystosuję do konkretnego mikrokontrolera. Chętnie z rozsądnym użyciem pamięci RAM zamiast nadużywania...
Witam was serdecznie Mam taki oto problem jak już wyplułem po korekcji dziesiętnej liczbę: np. 2133 to teraz jak to w asm napisać żeby wykonać taką operacje (liczba znajduje sie oczywiście w 2 rejestrach:) np R6 (21) R7 (33) 10000 : 2133 czyli 10 tysięcy podzielić przez tą liczbę?? Jak to zrobić, bo wszystkie memoniki poznałem i nie znam prostego przejścia
Witam mam podobny problem i nijak nie mogę sobie poradzić LED z WS2812B pierwsza dioda w taśmie się zapala (wszystkie kolory, i PWM jest oki) a następne nie chcą niestety może mi ktoś pomoże :( - dzięki [syntax=basic4gl][/syntax] $regfile = "m328pdef.DAT" $crystal = 16000000 Config Portd.1 = Output Pind.1 = 0 Dim A As Word Dim Green As Byte , Red As...
To bardzo fajny dokument Marku (dokładnie opisuje to czego bm chciał się dowiedzieć) lecz kompilator C (u mnie gcc) jest zupełnie inny i są zupełnie inne rejestry asemblera dla przekazywania parametrów do funkcji i zwracania z niej wartości. Mam jeszcze z tym problemyoraz z wykorzystaniem przerwań w funkcjach napisanych w asemblerze. Czy może ktoś ma...
Jakiego procesora jest to asembler? A, B, C to, jak się domyślam, są rejestry. One są 8-bitowe? Jeśli nie dysponujesz 16-bitowymi, to będziesz musiał napisać kod, który będzie porównywał najpierw starsze bajty liczb, a później młodsze w razie potrzeby i dopiero wtedy będzie decydował, która liczba większa.
Do zapisu w rejestrze służy bascomowa instrukcja "Poke" i raczej ją bym używał, ewentualnie wstawek asemblerowych. Też kiedyś coś próbowałem ustawiać prostymi, bezpośrednimi przypisaniami i tak samo mi nie działało. Z tym, że instrukcja Poke i Peek działa na całych bajtach więc by nie namieszać najpierw należy odczytać cały bajt, a następnie zamaskować...
Witam Mój problem polega na tym ,że muszę połączyć dwa programy w języku ASEMBLER. Niestety z programowania jestem słaby, a z języka niskiego poziomu to już w ogóle jest masakra. Ogólnie mam za zadanie zrobić mały projekt, który polega na tym ,że trzeba zaprogramować układ ADuC842 tak ,aby wyświetlił on na wyświetlaczu wpisany tekst z klawiatury (podłączonej...
COM21, TCCR0, TIMSK, OCR2, TCCR2 To są nazwy rejestrów, a nie mnemoniki asemblera. Brakuje Ci plików z definicjami rejestrów, a w najprostszej wersji przypisania wartości (adresu rejestru) do definicji (nazwy rejestru). np. przez .EQU. PS. Popraw tytuł, ponieważ jest niewłaściwy.
Gotowa wstawka seemblerowa pod bascoma 51 do obsługi rejestru przesuwnego 75164. Po obcięciu kilku linijek z początku i końca czysty asembler. Pozdrawiam
Chcę w kodzie c++ (Visual Studio) wstawić funkcję napisaną w asemblerze. Korzystam z __declspec(naked), które tworzy funkcję bez prologu i epilogu. Niestety funkcja zwraca zawsze coś innego niż powinna. Wszędzie pisze, że funkcje zwracają wartość do rejestru EAX. Ale ten przykład nie działa i nie wiem dlaczego. Próbowałem zwracać też adres do zmiennej,...
Witam! U mnie na stronie znajdziesz tabele z przetłumaczoną listą rozkazów dla ATTiny12. Może służyć jako podręczna ściągawka. :) Pozdrawiam
Prosze o pomoc w sprawie programu w Asemblerze. Zadanie jakie ma spelniac to zlicznie impulsów pojemnosc 2 do 24 licznik T0 + rejestr B i do tego zerowanie dane jak na rys (zalacznik). Start i stop zliczania zwiazany jest z syg zewnetrznym W miare mozliwosci prosze o szybka pomoc.
Witam Dzisiaj znalazłem fajną stronkę gdzie był umieszczony super fajny ściemniacz sterowany pilotem i ręcznie na Tiny12 ( ). I tu mam pare pytań: 1. Potrzebuje 2 takich układów w jednej puszce więc żeby mi się to zmieściło wymyśliłem że uwspólnie odbiornik podczerwieni, zasilanie, tranzystor odp. za detekcje przejścia przez zero (Q1) i rezonator......
Witam, Mam problem z zapisywaniem zmiennych w tablicy we wstawce asemblerowej. Próbowałem już różnych sposobów, aby "przemycić" adres początku tablicy do wstawki, ale bezskutecznie:( Jakiego operandu mam użyć, a może jest inny sposób? W asm mam pętle, w której dane są zapisywane poleceniem st Y+, Rx. Czyli potrzebuję zapisać do rejestrów R28,R29 adres...
r0-r15 nie możesz używać między innymi z rozkazami w których są "wartości natychmiastowe", czyli immediate. To wszystkie rozkazy z "i", np. cpi, ldi ... Po dokładne informacje odsyłam do referencji atmela z dokładnymi rozkazami asemblera.
I na marginesie jeszcze, zamiast pisać tasiemce "movlwb'00000000', movlwb'00011111' ... Zamiast np 03h, 0x08 , wystarczy 3,8 Nie stosuj tego co proponuje Adam. Do konfigurowania rejestrów itp. wykorzystuj: - zapisy dwójkowe lub - szesnastkowe lub - definiuj własne opisy słowne lub - korzystaj z gotowych dostępnych w sieci. Stosowanie zapisu dziesiętnego...
1. Przecież w ASM masz identyczne polecenia, kwestia obrania kolejności, wykorzystania rozsądnie rejestrów i zmiany składni. 2. Ponawiam pytanie - gdzie ten wynik ma być zapisany/wypisany? Tylko na ekranie? Jeśli tak, to w ogóle nie widze kodu odpowiedzialnego za wyświetlanie. Ponadto nie widzę też pętli, które by ewentualnie zwiększała/zmniejszała...
Kiedy mam problemy z programem dla AVR'a, napisanym w C, to zawsze podglądam co się urodziło po kompilacji. Czyli plik lst w asemblerze. Często okazuje się, że kompilator wstawia nie to co myślimy że powinno być. A dlaczego napisałeś tak: while(!(USISR & (1<<USIOIF))) //przerwie sie gdy SPSR ma 1 na SPIF miejscu Nie...
Witam. Mam taki problem z asemblerem. Chciałem przemnożyć rejestr ecx przez liczbę 5 z wynikiem w ecx. Czy istnieje taki rozkaz, który to realizuje a jeżeli tak to jak się go definiuje. Zaznaczam, że używam masma'a. Pozdrawiam.
WITAM! Poniżej wkleję kod źródłowy mojego programu napisanego w asemblerze.Mam problem ponieważ zostałem zapytany przez wykładowcę gdzie w nim jest porównanie napięć na obu potencjometrach (bo dotyczy on potencjometru analogowego i cyfrowego i jeżeli przekroczy się tam jakąś wartość napięcia na cyfrowym to ma sie zapalać diodka).W załączniku dodam wszystkie...
Witam. Z tym powyżej jakoś sobie poradziłem i jakoś sie kompiluje, ale nie chce do końca działać. Więc porzuciłem tą koncepcję i chce wstawkę asemblerową rozwiązać w inny sposób ale tu pojawił się kolejny problem. Napisałem wstawkę wg instrukcji z helpa do acr-gcc i kompilator wywalił mi takie coś... void instr_lcd(unsigned char instr) //przesłanie...
To CANGSTA to rejestr procesora. Przypadek, że ma adres AAh. Wg mnie to wygląda OK. Natomiast mnie interesowała właśnie reszta programu (np. czy rzeczywiście wyłączane są przerwania lub czy nie uruchomiłeś jakiegoś urządzenia, jak wygląda procedura inicjalizacji urządzenia i rejestrów). Reasumując: Czy program zawierający wyłącznie fragmentu kodu generującego...
Moim zdaniem najlepiej wykonywać operacje na zmiennych pośrednio przez któryś z rejestrów-to z powodu możliwości dostępu do każdej komórki RAM-u, także tych ≥128÷256 (niektóre typy 51' posiadają taki właśnie obszar RAM-u, dostępny jedynie przez adresowanie pośrednie) Fajfer2
witam, prosze o przykład kodu assemblerowego który pozwoli mi inkrementować jakiś rejestr co sekundę, bo pisałem wcześniej ale nikt nie potrafił odpowiedzieć :( pozdrawiam
CPI r24, 4BRSH wylacz_usypianie...wylacz_usypianie:CLI.... Kod: avrasm ] CPI r24, 4BRSH wylacz_usypianie...wylacz_usypianie:CLI.... Powiem szczerze, że nie bardzo rozumiem. Obecny kod wygląda w ten sposób: [syntax=c]/* * main.c * * Created: 2/14/2022 1:11:10 PM * Author: Maciej */ #include <xc.h> #include <avr/wdt.h> #include <avr/interrupt.h>...
Qrcze, użyj rejestru R0..R7 albo zmiennej. Napisałem przecież wyżej...
Witam Czy można napisać obsługe Timera w asm jako wstawkę w bascomie. Ponieważ potrzebuje robić przerwanie około 15us a jak wiadomo w bascomie przy każdym przerwaniu kompilator wrzuca wszystkie rejestry na stos ,później je pobiera i to trwa tak długo że osiągnięcie tak krótkiego czasu. Może ma ktoś jakiś pomysł . dzięki
Tak wlasciwe wystarcza instrukcje transferow danych miedzy rejestrami, testowania i operacji bitowych oraz instrukcje skokow bezwzglednych i warunkowych. Do tego znajomosc rejestrow "mieszajacych" portami procesora i jestes w domu.
Mimo dobrych chęci nic mi to nie mówi. (zamało wiem o asemblerze) Mam proźbę jak masz dokumentację GCC w wersji polskiej do daj znać. I jeszcze jedna proźba, czy mógbyś przerobić następującą wstawkę żeby poszła w DEV C++ include <?> // czy jest jakies przewidziane dla wywołania "asm" int main(void) { int port=378; // niewiem czy zmiena ta nadaje...
W pierwszym zapisie: -wczytywany jest rejestr -zerowane są odpowiednie bity -zapisywany jest rejestr z powrotem Tylko, że Twój zapis jest NIEPRAWIDLOWY - chciałeś pewnie zapisać tak in R16,TCCR1A cbr R16,WGM11 cbr R16,WGM10 out TCCR1A,R16 (...) Z punktu widzenia kompilatora a później mikrokontrolera prawidłowe są obydwa zapisy. Pytanie tylko, co programista...
Witam, cel pozostał ten sam, lecz zmienił się kod, tym razem bez Lcd, więc jako zadanie dostałem opisanie krok po kroku otrzymanego kodu oraz przeniesienie kodu z języka Bascom na kod Asemblera i C. Jako, że programowanie nie jest moją mocną stroną, prosiłbym o pomoc (rady, sugestie najlepiej w sposób tzw. łopatologiczny jak można osiągnąć postawiony...
Pisałem, pod AVRy, sporo w asemblerze, trochę w GCC, ale upłynęło dużo czasu a umiejętności nie używane mają tendencje do odparowywania ;) Ale to wymaga odświeżenia i jakoś pójdzie. Problem obecny polega chyba głównie na przesiadce na ATxmega. Sparrowhawk dał przykład ustawienia bitów w rejestrze, ok, zgoda, w asemblerze będą to 3 rozkazy, czasem 1....
Witam wszystkich, proszę o pomoc w rozwiązaniu problemu w kodzie w języku C ale ze wstawką asemblerową. Poniżej zamieszczam kod. [syntax=c]/* * main.c * * Created: 2/14/2022 1:11:10 PM * Author: Maciej */ #include <xc.h> #include <avr/wdt.h> #include <avr/interrupt.h> #include <util/delay.h> #define WDT_ENABLE ISR(WDT_vect)//przerwanie...
o co chodzi z tą optymalizacją? Jeśli pętla zostanie wstawiona do kodu ale w środku nic nie będzie się działo, czyli pętla będzie iteracyjnie się zwiększała bez efektu to zostanie pominięta? Tak się zdarza. Można dodać asemblerowe NOP do środka, lub zwiększać zmienna typu volatile.
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ć,...
Witam, Mam problem, próbuję uruchomić przetwornik DAC w mikroprocku ADuC847, niby skonfigurowałem go jak należy czyli powysyłałem najpierw dane do rejestru DACCON (pod adres FDh) a zaraz po tym dane do rejestru DACL (pod adres FBh) w trybie 8 - bitowym, ale przy każdorazowym pomiarze napięcia na nóżce 14 (DAC) mam co chwilę inne wartości. Program zamieszczam...
Witam wszystkich, powoli kończę swój projekt robocika zwiadowczego do wykrywania metalu, elektronika jak i 90% programu działa OK, niestety mam problem z obsługą timera w PIC16F84A który ma pracować w roli licznika, jeżeli chodzi o zliczanie impulsów z wewnętrznego oscylatora, to wszystko jest jak najbardziej OK, jednak jeżeli chce mu podawać impulsy...
Witam. Chciałbym się dowiedzieć jak przekazać wartość rejestru do zmiennej w C. Zakładam użycie wstawki asemblerowej. Chcę stworzyć prymitywną wersję funkcji scanf i chcę przypisać zmiennej kod klawisza który został wciśnięty(czyli rejestr AL(używam funkcji 00h przerwania 16h)). Liczę na szybką pomoc. Pozdrawiam
Witam wszystkich Dopiero zaczynam programować w języku asemblera (w szkole mam programowanie mikrokontrolerów 8051 w tym języku), wcześniej programowałem w Bascomie. Chcą trochę poćwiczyć asemblera przed zaliczeniem napisałem prosty program który wpisuje do pamięci o danym adresie i do jakiegoś rejestru jakąś liczbę. I mam takie dwa pytania przy zaadresowaniu...
Dzieki wielkie za odpowiedz Zmodyfikowalem troche program liczący w HEXie a noz sie komus przyda [syntax=asm]ORG 000H START: LCALL WAIT_KEY ; czekanie na przycisk z klawiatury SWAP A ; zamiana starszych i młodszych bitów MOV R0,A ; zapamiętanie warości pobranej z klawiatury w rejestrze R0 LCALL WAIT_KEY ; czekanie na przycisk z klawiatury ADD A,R0 ;...
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=]Link1 [url=]Link2 Wracając do Twojego...
Mam zbudowany układ z Atmegi8 i dwóch rejestrów przesuwnych: Jeśli ktoś nie wie jak działa rejestr przesuwny, można podejrzeć W C jest to całkiem proste i można zrobić to w ten sposób: [syntax=c]#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> //krótkie komendy do ustawiania 0 lub 1 na linii danych #define DAT_0...
Witam Moim zdaniem asembler pod AVR jest duzo prostszy niz dla 51.Trzeba tylko sie do pau rzeczy np przyzwyczaic do ustawien portow(tutaj poprzez odpowiednie rejestry ustawiasz np czy to musi byc wejscie czy nie,czy podciagane czy nie itp),natomiast praca z 31-rejestrami to czysta przyjemnosc.Nie wiem jak dobrze znasz asm,bo jesli cos wies to tak jak...
Poniewaz ATmega ma rozbudowane funkcje portow najpierw musisz ustawic kierunek portu czyli czy ma byc wejsciem czy wyjsciem. Do tego sluzy rejestr DDRx gdzie x okresla literke portu. W ATmega 8 do dyspozycji masz porty B,C,D przy czym tylko port D jest kompletny. Aby ustawic pin jako wyjscie musisz na odpowiednim bicie ustawic 1. Mozna to zrobic tak:...
hmmm generalnie to dopiero zaczynam się bawić w uP, ale wg moich informacji wygląda to tak: aby port szregowy spełniał te kryteria należy odpowiedniu ustawić rejestr SCON, czyli potrzebujesz mode 1(Transmisja szeregowa asynchroniczna slów 8-bitowych, przy czym szybkosc ustalana jest programowo) oraz ustawić ren na 0 (wyłączenie nadawania), reszta bitów...
Witam mam jakąś zaćmę umysłową albo niewiem co ale prosty program nie ma ochoty mi działać oto program : ----------------------------------------... org P:$100 move #$10,x1 ; liczba 1 do x1 move #$20,y0 ; liczba 2 do y0 move #0,b ; wyzerowanie rejestru b mac y0,x1,b ; wymnoz y0 przez x1 i dodaj do b ----------------------------------------...
Witam. By zapoznać się na dobre z AVR'ami rozpocząłem pisanie programu z procedurkami które później będe wykorzystywał. Jak zawsze, chcę by każda część programu była w 100% moja, żadnego kopiowania z innych źródeł. Niestety, napisanie jakiejś bardziej skomplikowanej procedurki od podstaw pochłania dużo czasu. O wiele prościej by było sięgnąć do jakiegoś...
Witam, Potrzebuję skorzystać we wstawce asemblerowej ze zmiennej zadeklarowanej w C, a dokładnie zapisać w zmiennej widocznej z poziomu C wartość z rejestru. Próbowałem napisać następujący kod //... uint8_t i; //... asm volatile ("sts %0,r20"::"m" (&i):"r20"); //... ale coś tu jest nie tak. Proszę o sugestię i kontakt osób, które maja doświadczenie...
Witam, jak wiadomo rejestr systemu Windows XP sklada sie z kilku plikow, ktore w momencie uruchamiania/logowania uzytkownika lacza sie w jedna calosc i tworza rejestr. Lokalizacje poszczegolnych plikow mozna znalezc w kluczu HKEY_LOCAL_MACHINE\System\CurrentControl... HiveList zawiera wpisy lokalizację katalogu rejestru (nazwa wpisu)...
Witam moich kolegów programistów, Mam do napisania program z asemblera. Kompilacja Fasm32. Program ma zapisywać dwie liczby do pliku (z klawiatury)test.txt. Kompilacja programu przebiega prawidłowo jednak to wpisaniu dwóch liczb nie zapisują się one do pliku. Prośba o wskazanie błędu. Dziękuje z góry wszystkim pomocnym. Trzymajcie się ciepło ;Aplikacja...
Witam, Moje pierwsze starcie z asemblerem na ARM i przerwaniami ... Mam taki kawałek kodu tmr0_irq stmdb r13!, {r0-r4, r12, r14} ldr r0, =TMR0_BASE ldr r1, =TMR0_RST str r1, [r0, #TMR0_TCR_OFS] ; Reset timer0. ldr r0, =FIO_BASE ldr r1, [r0, #FIO2SET_OFS] ; Read content of set register. ldr r2, =LED mov r3, #&1000000 cmp r1,...
Znasz znaczenie DJNZ? Decrement Jump if Not Zero. Zmniejsza wartość podanego rejestru, a następnie wykonuje skok - gdy wartość (rejestru) wciąż jest <> 0. Jak wiadomo czas wykonywania instrukcji jest niezerowy - stąd powstaje "regulowane " (podanymi wartościami) opóźnienie. Zmienia się bowiem liczba iteracji pętli - więc i liczba wykonanych instrukcji....
tablicę z danymi umieść na samym końcu za programem: [syntax=asm].include "tn13def.inc" .cseg .org0x00 rjmpstart .org 0x0A start: cli ; blokada przerwań ldi r16,low(RAMEND) ; stos na koniec RAM out SPL,r16 ldi r16,0b00000111 ;konfiguruje porty B pin0-pin2 na wyjscie out ddrb,r16 ps0:ldiZL,low(Ledy<<1) ;adres tabeli w pamięci programu ldiZH,high(Ledy<<1)...
Dziękuję za szybką odpowiedź. Czy istnieje jakieś proste wyjaśnienie tego faktu? (at)EDIT: Próbowałem zaświecić diodę LED programując dwa górne wyprowadzenia: PC6 (który jest oznaczany jak reset) oraz PC5. Po wgraniu programu dioda się nie świeci. Czy są jakieś wyjątki od tej możliwości? Poniżej wstawiam program, który wgrałem: [syntax=asm]/* * dioda_asm_cw3.asm...
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...
1. Witam poszukuje, (jeśli istnieje) symulatora języka asembler pod 8080 albo jakiś podobny żeby mnemoniki się zgadzały. Np. podczas używania programu "jagoda" (polecił mi go starszy kolega ::D ) zawsze nawet po dokładnym przepisaniu programu z zeszytu podyktowanego przez nauczyciela wywala mi błędy 2. Znacie może tez jakiś przyzwoity kurs Asemblera,...
Piszę algorytm szybkiego sortowania w asemblerze a dokładniej jest to dll w asmie w projekcie z pisanym w c++ i mam pewnien problem - algortym źle sortuje dane. Oto mój algorytm w asmie: QuickSort PROC tablica:dword, ilosc:sdword start: push EAX push EBX push ECX push EDX push ESI push EDI push EBP push ESP mov EAX, 0 push EAX; lewy na stos...
Witam, Przerwania zewnętrzne można wykorzystać, ale problem będzie z drganiem styków - po zwarciu/rozwarciu styki przycisku drgają kilka-kilkadziesiąt milisekund, więc są duże szanse, że zarejestrujesz dużo więcej zmian stanu niż było w rzeczywistości :) Najprościej zrobić programową eliminację drgania styków używając rejestru przesuwnego. Co jakiś...
niestety nie udało mi się rozwiązać tego problemu (czyt. sprawdzania 4 bitowego kodu). nigdzie nie umiałem znaleźć choćby powierzchownego wyjaśnienia działania tablic w asemblerze. (jeśli ktoś wie gdzie znajdę takie info - proszę o PW) zauważyłem że sporo osób czytało mój post, więc samolubnie uznając go za ciekawy, napiszę moje, proste rozwiązanie....
Nie 30, tylko 6 plików... No dobra, Ctrl+C, Ctrl+V: ADD A , Rn do akumulatora dodawana jest zawartość rejestru Rn A <− A + Rn gdzie Rn = R0...R7 (jeden z rejestrów roboczych) kod: 0 0 1 0 1 n2 n1 n0, gdzie n2...n0 – wskazują na R0...7 stąd: 28h−2Fh cykle: 1 bajty: 1 przykład: ADD A , R2 – ADD A , adres do akumulatora dodawana...
Mam pewien problem otóż program dodaje 2 liczby wprowadzane z klawiatury ale tylko suma do 10 co zrobiłem źle i jak mam przekształcić program żeby zapisywał do pliku wynik?[syntax=asm].MODEL SMALL .STACK 100H .DATA PROMPT_1 DB 'Podaj pierwsza liczbe: $' PROMPT_2 DB 'Podaj druga liczbe: $' PROMPT_3 DB 'Suma liczb to: $' VALUE_1 DB ? VALUE_2 DB ? .CODE...
Nie chciałbym Cię wprowadzić w błąd, bo już lata świetlne ;) nie pisałem w asemblerze x86, a jego składni nigdy nie lubiłem, ale wygląda, że nie tak bardzo pomyliłeś się w toku rozumowania. do rejestru esi kopiujemy czwarty element tablicy "linie" Nie element, tylko jego adres, a dokładniej przesunięcie od początku segmentu. - do rejestru ebx kopiujemy...
Tak na szybko: Po pierwsze źle Ci się wylicza wartość, bo powinno być F8 a nie F3. Pierwsze odejmowanie umieszcza w rejestrze R0 wartość FB, następnie musisz jeszcze wyzerować akumulator bo odejmujesz wartość 3 od akumulatora w którym jest już FB (a powinno być 0) MOV R1,C jest bez sensu bo C to nie rejestr tylko znacznik przeniesienia (dziwne, że Ci...
.nolist .list .cseg .org 0 sbi DDRC, 0 sbi PORTC, 0 sbi DDRB, 0 sbi PORTC, 1 Witaj na forum elektroda.pl! Chętnie pomogę Ci przekształcić podany kod asemblera na język maszynowy oraz wytłumaczę, co robi każda linijka kodu. Oto przekształcony kod maszynowy wraz z omówieniem: Kod asemblera: ``` sbi DDRC, 0 sbi PORTC, 0 sbi DDRB, 0 sbi PORTC, 1 ``` Kod...
Witam. Robi się to dokładnie tak, jak napisał Patryk. DB w asemblerze to po prostu Definiuj Bajt, jest to miejsce w pamięci programowej zarezerwowane na definicje np. tekstu. A więc (nie zaczyna się od 'a więc')jeśli ustawisz etykietę np. Linia_1 dla pierwszej linii na LCD i wpiszesz tam 16 bajtów tekstu, to będzie to wyglądać następująco: gdzieś w...
W Technicznej faktycznie nie ma ale w to jednak coś znajdziesz. Najlepiej wpisz w google frazę "Arkadiusz Krysiak" i przeleć się po wszystkich znalezionych księgarniach wysyłkowych. Możesz też od zaraz rozpocząć naukę assemblera czytając kurs na stronie . Są bardzo proste przykłady z komentarzem wyjaśniającym. Miałbym tylko jedno zastrzeżenie: autor...
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...
No to polecam prosty do samodzielnego wykonania programator i program go obsługujący. Jak znasz asembler na Intelu, to i AVRasm nie powinien sprawić tobie problemu, zasady programowania są identyczne, tylko procesorek ma 32 rejestry tego typu co np. al w Intelu. Są tutaj ludzie, co znają go od podszewki... ;) Lista rozkazów jest dostępna w każdym pdf-ku...
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...
sprobuj nie przepisywac wartości do zmiennej o ale od razu adres(wartość) do rejestru : __asm__( "movb $0x0d, %dl\n\t" "movb $0xdd, %al\n\t" "out %al, %dx\n\t"); ja tu dalem bzdurne adresy 0x0d, 0xdd , moze tak odpalisz ale nie wiem czy jest w tym AT&T polecenie out napisz może co to ma robić ?? w jakim ma działać systemie czy musi być to dev bo asembler...
.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ć)....
jeśli programujesz to dobrze wiesz że C to język wysokiego poziomu czyli z założenia ma upraszczać życie i tak też jest do momentu kiedy w programie musisz b.dokładnie kontrolować zależności czasowe pracy układu bo w asemblerze na palcach policzysz czas wykonywania konkretnego ciągu rozkazów a w C sprawa nie jest taka prosta i czasem trzeba dobrze się...
Witam. Zaczynam programować AVR-y w asemblerze i mam problem ze zrozumieniem instrukcji zawartej w kawałku programu : ldiZL, low(0) ; rejestr indeksowy Z wskazuje na młodszy bajt ldi ZH, high(0) ; pierwszej komórki pamięci programu lpmR0, Z+ LPMRd,Z+;Ładuj zawartość bajtu z pamięci programu o adresie określonym zawartością rejestru indeksowego...
Chce wysłać to portu LPT a dokladniej do końcówek 2-9 stan niski, wiec pisze: mov dx,0378h xor al,al out dx,al Adres Rejestru LPTDATA to 378h. Mój kompilator to MASM, a kompiluje poleceniem: nasm.exe kod.nasm -f bin -o binarny.com Po skompilowaniu i odpaleniu programu w czystym dosie niestety stany na koncówkach 2-9 sie nie zmieniły :-(. Próbowałem...
Ja w tego typu wyświetlanie zaprzęgam któryś licznik przepełniający się 100 do 200 razy na sekundę (w zależności od ilości segmentów) i tam przy każdym przepełnieniu aktywuje kolejny segment wyświetlając na niego daną ze zdefiniowanego wcześniej rejestru. Tak więc po dokonaniu pomiaru aktualizujesz tylko odpowiednie rejestry z których dane są wyświetlane...