Tylko, że porównywanie w procesorach się wykonuje przez odejmowanie (patrz dokładny opis tej instrukcji), a to w przypadku porównywania z zerem jak napisałem nic nie zmieni. Pożyczka, czyli ustawienie przeniesienia C=1 występuje gdy wartość odejmowana będzie większa niż zawartość rejestru. Takie podstawy to kolega powinien znać. A BRLO właśnie sprawdza...
start: mov dx, al mov ah,9 int 21h Nie rozumiem pytania o konwersje, ale moge podpowiedzieć że podany wyżej kod raczej nie zadziała, bo są w nim 2 błędy, składniowy i logiczny. 1. Nie można skopiować wartości 8 bit do wartości 16bitowej 2. Funkcja 9 int21h przyjmuje w rejestrze DX wskaźnik do tablicy znaków a nie wartość.
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
Dzień dobry. Załóżmy, że mam rejestr EDX z taką wartością 0025069C. Debugger podpowiada, że jest to ASCII "A123..." (w miejscu kropek jakieś krzaczki). Jak samodzielnie przekształcić wartość 0025069C na owe 7 znaków ASCII ? Wartości w kodzie ASCII są tutaj: http://www.asciitable.com/ Trzeba tylko sprawdzić jaki kod ASCII kod kryje się pod wartościami:...
Patrz wyżej - oblicz sobie odpowiednią wartość i ładuj do powyższych 3 rejestrów. Ale chodzi mi o to, że nie wyobrażam sobie jak ta Twoja pętla z 1szego posta wykona się 230400 razy, bo jak dla mnie to o jakieś 255 za mało wgzlędem tego co w rejestrach wpisałeś.
Wywal pierwszy wpis error, a wszędzie dalej wpisz Start zamiast niego - może pomoże. EDIT: Tak, to powinno pomóc - zwróć uwagę, że w MPLAB słowo error świeci się na niebiesko - więc pewnie czemuś służy - tak więc albo wywal je całkowicie, albo zastąp czym innym - np. error2
Ale kombinujecie trochę. A jaka to jest cyfra parzysta ? To taka która dzieli się przez 2. Więc podziel sobie tą cyfrę przez 2, wynik masz w akumulatorze A( który Cie nie interesuje ), a reszte masz w rejestrze B, teraz wystarczy sprawdzić czy rejestr B jest różny od zera :) Piszę rejestr A i B, co ma miejsce w mikrokontrolerach, w Twoim przypadku pewnie...
Witam Popełniłem kolejne makro a właściwie dwa :D do odczytu pamięci EEPROM (zapisywać do tej pory nie potrzebowałem więc odpowiedniego makra brak ;) ). Nie jestem tylko pewien czy używane rejestry obsługujące eeprom we wszystkich prockach posiadających tą pamięć mają te same nazwy i działają tak samo. Makro to zmodyfikowany przykład odczytu eeprom...
Wydaje mi się , że do takich porównań lepiej użyć XRL , niż SUBB . Piotrek
Co do kompilatora to spróbuj: ftp://ftp.bielsko.evatronix.com.pl/pub/T... (12,2 MB). Nie gwarantuję ale asembler pod PowerPC powinien w tym być.
W technikum miałem zajęcia na zestawie DSM-51 i co nieco łyknąłem z tej wiedzy To jeśli masz zamiar pisać coś również w asm to zdecydowanie AVR. PICe mają dziki asembler i jeszcze dzikszy dostęp z poziomu asemblera do rejestrów. Płytkę STM32F0DISCOVERY z mikrokontrolelrem oraz programatorem/debuggerem kupisz za < 50 zł. Ja bym raczej nie zaczynał...
No tak, ale on ma wyraźnie polecenie by rozrzucić te cyfry po trzech rejestrach.
Siemka!! Potrzebuje informacje na temat US W2416-70L. musze napisać do tego oprogramowanie(musze go zaprogramować) ktore bedzie wykonane w programie Asembler. potrzebuje do tego Waszej pomocy a wiec do roboty :-D w gory dziekuje. jak coś to piszcie na gg jak macie jakieś zastrzezenia
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...
A zamieniłeś wszędzie , miejsca gdzie było 'dword ptr i' na 'edi', a 'dword ptr j' na 'esi' ? Poza tym, czemu wywaliłeś 'add esp, 0x0c' za wywołaniem funkcji???
CJNE A, R0, dalej SJMP adres_skoku dalej: ;... ;(reszta programu dla A<>R0) ;... adres_skoku: ;... ;(podprogram dla A==R0) ;...
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
Jak masz taki mus to lista rejestrów przed siebie i heja !! napisać nagłówek z rejestrami do tego procka. W ostateczności zostanie Ci czysty asembler bezpośrednio w AvrStudio v12
Nie, jeśli przenosisz zmienną do segmentu data, to rejestr DataSegment musi wskazywać właśnie na niego. Najbezpieczniej jest użyć SEG [zmienna]
Użyj listingu kodu SYNTAX bo kiepsko to widać. Z tego co widzę jest to kod dla jakiegoś mikrokontrolera AVR, wnioskuje po kodzie i po pliku nagłówkowym, napisz na jaki mikrokontroler to ma działać. Nie wiem też co miałeś na poprzednich lekcjach, nigdy nie pisałem w asemblerze pod mikrokontrolery i nie znam większości tych funkcji. Ale jak bardziej opiszesz...
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ą...
Oczywiście chodzi o sam początek programu, użyłem skróty myślowego. Na samym początku programu niech będzie warunek który sprawdza czy był zresetowany przez watchdog (specjalna flaga w rejestrze MCUCSR), jeśli nie - czyli jak program uruchamia się pierwszy raz, to program leci dalej i robi co ma zrobić, potem w momencie kiedy chcesz uśpić procka uruchamiasz...
Sumę wartości esi i ebx? Zawartość pamięci spod adresu EBX to 4, a spod adresu ESI? 421? Czytam twój post już czwartą godzinę, i niby jaśniej a dalej nie widzę zależności pomiędzy liczbami które mi wychodzą. Pozdrawiam.
To jest mikrokontroler a nie pc-et. Nie da się bez znajomości sprzętu i rejestrów. Pozatem to nie jest żaden asembler tylko zapis do rejestru
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...
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.
Jak się korzysta ze sprzętowych ułatwień np.SPI w AVR'ach ?? Czy robi się to za pomocą dodatkowych rejestrów? Pomocy, jestem zielony :-)
Powinno byc na przyklad tak: banksel TRISA ;wybierz bank dla TRISA clrf TRISA ;ustaw PORTA jako wyjscia banksel PORTA ;wybierz bank dla PORTA movLW 0xFF ;zaladuj W wartoscia 255 movWF PORTA ;przenies W do PORTB call delay ;odczekaj troche by zauwazyc zmiane comf PORTA, 1 ;komplementuj PORTB (wynik w PORTB) end
Jeszcze tylko jedna uwaga co do Przecież przeniesienie trzeba uwzględnić i wstawić do rejestru bo jak nie to przy następnej operacji dodawania bit carry się wyzeruje i stracimy informację... czy może się mylę? Masz rację. Przeniesienie trzeba pamiętać o ile gdzieś dalej (daleko dalej :-)) będziemy robić operacje na wyniku, ale rezerwowanie do tego celu...
W BASCOMie możesz używać wszystkich rejestrów od R16 do R25 bo BASCOM nic w nich nie trzyma (od R0 do R12 w sumie też ale na nich nie działa rozkaz ANDI). Pozostałe to nie wiadomo. Czasami jakiś wskaźnik może się tam znaleźć więc trzeba uważać.
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.
Chodzi mi o polecenie MOV TH0, #F0Fh. Asembler zasygnalizuje błąd - nieznana nazwa F0Fh. Dla asemblera to NIE JEST liczba. Jeśli już poprawisz tak, żeby była liczbą - asembler zasygnalizuje przekroczenie zakresu, bo argument tej instrukcji może mieć tylko 8 bitów.
:arrow: Sind, asembler a widzieliście rejestr DDRx w mikrokontrolerach PIC? :arrow: mikmas podaj dokładnie typ procesora.
po co szukać jakichś udziwnień, jak 74hc595 jest tani jak barszcz i dostępny w prawie każdym elektronicznym? Też ma zatrzask i wydolność prądową wystarczającą do tych zastosowań (mam takie w matrycy wyświetlacza od kolegi asembler)
wstawek nie robi sie na konkretnych rejestrach, tylko na symbolicznych nazwach, ktore sa uzywane w kodzie C. wtedy kompilator sam sobie tam powstawia te rejestry, ktore beda mu pasowaly. a przynajmniej tak to dziala w gcc i tak ja to widze [; 0x41 0x56 0x45!!
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...
A gdyby można przejść na ATMega 8 ale nie 88 i dodatkowo na asembler, to masz więcej RAMu, kilka razy szybszy kod i te same nazwy rejestrów w procku co w ATiny 2313. A i postępy w pracy byłyby błyskawiczne. Krzysztof
Zamiast wpisywania całej treści bardziej polecam przechwytywanie znak po znaku i jego obsługę. Musiałbyś poćwiczyć na prostych problemach, żeby później dopiero rzucić się na złożony. Jeśli bardzo chcesz na przykładach, to może to się przyda: https://www.dzyszla.pl/download-34.html - choć nie przepadam za takim posunięciem, bo gorzej się człowiek uczy....
Skoro obliczenia w asemblerze sprawiają Ci kłopot , to mając 8KB pamięci programu i 2KB EEProm-u , wygospodaruj 720 bajtów na tablicę , zapisz w niej gotowe wartości dla każdego kąta i ... to tyle ;) Piotrek
Witam. Mam problem albowiem potrzebuję znaleść bezskutecznie rozwiązanie na moją bolączke... Muszę zrealizować, proste można by powiedzieć zadanie, albowiem chcę zamienić liczbę wpisaną do rejestru np. AL tak aby jej postać binarna w rejestrze np. BL była by lustrzanym odbiciem. Myślałem nad zastosowaniem Stosu, lecz niepotrafię go użyć w ten sposób...
Witam! Ja używałem Turbo C i Borland C++ 2.0 z biblioteką graficzną GUI a później Borland C++ 3.0 z biblioteką graficzną GUI oraz, sporadycznie, biblioteką TurboVision. Korzystałem głównie z trybu rzeczywistego. Oczywiście, posiłkowałem się też asemblerem. Co do "nieprzeskaczalności" 64kB dla pamięci danych, to zastosowanie modelu pamięci Huge rozwiązuje...
Używanie argumentu "bo taka jest konwencja" nie różni się niczym od stwierdzenia "bo tak". Aby zrozumieć problem, musisz, przede wszystkim zrozumieć, jak działa asembler i czym są wspomniane rejestry (częstym problemem osób programujących wyłącznie w jęz. wysokopoziomowych jest niemożność odróżnienia ich funkcjonalności od zmiennych). Tak więc na początek:...
Reasumując: program obsługi "żelazka": - na PC startuje "tylko" kiljka minut, czasem działa w czasie rzeczywistym - na uC staruje 4ms, czas rzeczywisty nie jest problemem. A z czego to wynika? (tak jak i cała różnica między tymi dwoma docelowymi platformami) Otóż z tego, że na PC piszemy program, który działa pod kontrolą takiego lub innego systemu...
a przewidujesz przechowywanie wyniku w jak dużym rejestrze? Przewidujesz przekroczenie zakresu?
W procedurze przerwania wymagane jest zapamiętanie rejestrów, które są współdzielone w pętli głównej (przy użyciu komendy "push"), a następnie odtworzenie początkowego stanu zasobów (przy użyciu procedury "pop"). Ale o które rejestry dokładnie chodzi? Których rejestrów dotyczy warunek poprawnego wykonania procedury przerwania i w jakich sytuacjach?...
Z opisu funkcji wynika, że pętla używa 8-bitowego licznika. Gdzie w tej funkcji jest odniesienie do licznika.? W tej linii: dec %0 Po prostu jeden z rejestrów jest używany do odliczania opóźnienia i dlatego został "przezwany" licznikiem. Nie ma to nic wspólnego z fizycznymi licznikami/timerami. O wstawkach assemblerowych możesz przeczytać w manualu...
(at)R-MIK Jeśli dasz NAKED i wstawkę w ASM, to ta wstawka może przecież zapisać i odczytać rejestr. A jaki to wiesz, bo sam go wybrałeś :) Możesz też użyć składni gcc do operacji w asemblerze, wtedy nie operujesz na rejestrach, tylko wskazujesz grupę, a kompilator sam sobie to tłumaczy na konkretne instrukcje. W tym przypadku IMHO lepiej po prostu...
Zanim zaczniesz używać asemblera wypadałoby poczytać trochę o tych komendach, co one oznaczają i jak ich używać. Jeżeli używasz assemblera jako wstawki w C, to mnemoniki typu MCUSR nic kompilatorowi nie mówią - musisz używać adresów. Z kolei komenda LDn ma z kilkanaście swoich wersji i powinieneś sprawdzić którą używasz i dlaczego. Jeśli już ładujesz...
Ok, zacznij od takich zmian, jakie opisałem. Procedura opóźniająca o n * 0.5 ms, gdzie n jest argumentem, np. przekazywanym w rejestrze A.
Jeśli wyrazisz taką ochotę to napiszę Ci pod asemblerem kawałek kodu, podaj tylko rejestry w które chcesz wklepywać dane Pozdro
Tamte akurat miały architekturę von Neumann-a, więc wszystkie adresy były jednego rodzaju. Składnia DANE<<1 (albo chyba DANE*2 też mogło by być) wynika z (nieco) idiotycznej konwencji, że dla przestrzeni kodu asembler numeruje (adresuje) słowa (pamięć FLASH jest 16-bitowa), natomiast przy dostępie przez LPM trzeba zaadresować pojedynczy bajt.
DPTR jest rejestrem składającym się z dwóch bajtów o oznaczeniu DPL i DPH. A więc ten rozkaz ładuje (umieszcza) tą wartość w rejestrze DPTR.
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...
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
Bardzo to nieczytelne. A jaki to procesor ? Po rejestrach wygląda na '51
Po krótce - w ASM musisz wiedzieć pod jakim adresem jest dany rejestr peryferium i do niego sie odnieść. A to ciekawe, co piszesz, bo asembler stworzono właśnie po to, aby nie trzeba było tych adresów pamiętać i zamiast tego używać właśnie ich nazw ;)
Pierwsze co przychodzi mi na myśl to obsługa przerwań: cli, sei oczywiście nie potrzebne, natomiast nie odkładasz i nie przywracasz SREG. Daj na początek przerwań in <rejestr>, SREG push <rejestr> i na koniec przerwań pop <rejestr> i out SREG, <rejestr>
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
Za zaadresowanie Twojej danej , odpowiada para rejestrów, a Ty adres wpisujesz tylko do młodszego - dlaczemu :?: ;) ... ldizl,low(tab<<1) ldizh,high(tab<<1) lpm ... Piotrek
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...
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...
Czy moglbym prosic o maly przyklad w jaki sposob pomnozyc liczbe 12 bitowa zapisana w dwoch rejestrach 8 bitowych przez inna liczba 12bitowa? Czy nie mozna tej liczby zapisac w jednym rejestrze 12 bitowym?
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...
Ja tylko pisze w asm - bascom to g.....o!!! Niewiem jakim cudem stwierdziłes że to bascom ldi, ret <- te jest asembler a te nazwy to poprostu rejestry
Np binarnie - dzieląc dany rejestr przez dwa i wyświetlanie 0 lub 1 w zależności od stanu rejestru, który przechowuje resztę z dzielenia.
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ę...
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...
Gdzie znajduje się rozkaz LJMP? Jest jak Pszczółka Maja (gdzieś, lecz nie wiadomo gdzie), ponieważ ORG jest za rozkazem a musi być przed. Program powinien się zaczynać od ORG 0. Co to jest WRITE_XXX? Musisz się zdecydować czy to ma być WRITE_DATA, czy WRITE_HEX, czy WRITE_TXT. Chyba takie tam były opcje. Eksperymentuj jeżeli nie wiesz, który wybrać....
czas co jaki zostanie zdeklementowany rejestr R0 banku 1 jest określony przez szybkość wykorzystanego kwarcu i ilości cykli wykonywanych przez timer, możesz na przykład uruchomić timer mają w nim zapisaną już jakąś wartość, symulatory nie oddają rzeczywistego czasu pracy mikrokontrolera, musisz dopasować wartość rozpoczęcia pracy timera eksperymentalnie
oczywiście, że wystarczy $asm ... kod twojej wstawki $end asm ale oczywiście przydałoby się jeszcze wiedzieć jak można uzyskiwać w asemblerze dostęp do zmiennych itp, otóż: Dim Zmienna1 as Byte $asm lds R16, {Zmienna1} ... coś tam robimy sobie w asm ze zmienną i chcemy ją uaktualnić, więc: sts {Zmienna1}, R16 $end asm powyżej...
Asembler jest raczej trudny do uniknięcia tam, gdzie potrzebna konstrukcja kodu nie da się napisać np. w C. Np. funkcja, która dostaje argument w rejestrze EAX.
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.
Z C będzie taki problem, że nie wiadomo co z tym zrobi kompilator i jak to zoptymalizuje. Może potem wyjść z tego jakiś potworek. IMHO to jest doskonały przykład, że czasami wstawka w asemblerze nie jest zła :)
Tak na oko to zapisane jest to z błędem, chyba, że składnia tego asemblera to dopuszcza. Dla mnie to powinno wyglądać np. tak: MOV A,#10 i odpowiednio drugi rozkaz. Co to robi? - ładuje do rejestru A (chyba akumulator) wartość 10, drugie będzie ładowało do rejestru B. Jaki to procesor i jaki asembler?
Flaga carry (c) ustawiana gdy wynik sumy dwóch rejestrów - kolokwialnie mówiąc- nie mieści się w rejestrze 8-mio bitowym. To jest tzw. przeniesienie.
Siemka! :D Jeszcze ja dorzucę coś od siebie. :) Tak jak wspomnieli koledzy w powyższych postach stos jest bardzo ważnym miejscem w obszarze pamięci mikrokontrolera, podczas obsługi podprogramów, przerwań, skoków programowych. Aby wrócić z danego podprogramu musisz przed wejściem do niego odłożyć na stos chociażby wartości licznika programu, aby móc...
znam sposób ustawiania podzielnika transmisji ale w asemblerze - rejestr LCR określa podzielnik generatora i ogólnie format całej ramki
ogolnie do przerwan to interrupt z numerem na koncu funkcji ( 0 - adres 0x03, 1 - 0x0b itd) jest w pdf o kompilatorze. do nopa jest jakies makro chyba _nop() ale nie pamietam dokladnie tylko trzeba biblioteke dolaczyc. void przerw0(void) interrupt 0 { ; } mozna jeszcze dodac using i potem numer banku rejestrow ktore beda dla tego przerwania...
Witam. Timer mikrokontrolera '51 taktowanego zegarem 11.059200 MHz zliczy w ciągu jednej sekundy 921600 impulsów. Ze względu na wielkość timera (2 bajty) może Kolega zliczać setne części sekundy - ustawić przerwanie co 9216 impulsów. Każde wywołanie przerwania zwiększy zmienną o 1, czyli mamy w niej wynik pomiaru z rozdzielczością 0,01 s. Rozwiązanie...
oki. dzieki za porady. juz sobie poradzilem. pozdr
Jednym poleceniem tego nie zrobisz ale się da. Przepisz sobie wynik do WREG i wyzeruj ten rejestr którego używasz na wyjście. Potem osiem poleceń BTFSC sprawdzających bity WREG i po każdym BTFSC napisz BSF rejestr,bit z tym że dla BTFSC W,0 dajesz BSF rejestr,7 i tak dalej.
Jeśli dla ciebie "kom ę dy" ( komendy ) czyli rozkazy procesora wyglądają jednakowo, to nie rozumiesz asemblera. Moga wyglądać podobnie, ale odpowiednie ich zestawienie ze sobą i odpowiednia kolejność dopiero powodują, że procesor robi dokładnie to co powinien. Jeśli tak naprawdę chcesz poznać asembler, to powinieneś się przyzwyczaić, ze tu nie bedzie...
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...
DB Nie jest rozkazem procesora tylko dyrektywą kompilatora. A DPTR jest to 16 bitowy rejestr w 8051. Więcej szczegułów znajdziesz w dokumentacji 8051
Odczytanie zawartości pamięci nic nie da. Zawartość pamięci trzeba by było zdeasemblować i, oczywiście, znając kod asemblera tego mikrokontrolera (Intel 8031), odpowiednio przeanalizować. To wymaga dużego doświadczenia.
Pamięć i peryferia nie mają zbyt wiele do asemblera. Wraz ze zmianą dodatków do całej rodziny 51 i tak jest ten sam asembler, zmieniają się tylko adresy rejestrów, przybywają, ubywają. Ale ogólnie jest to samo ;) Dlatego w zależności od procka zmienia się tylko bibliotekę z adresami np $mod51 $mod52 Jeśli chodzi o wyższego poziomu z reguły też zmienia...
Pic Picowi nierówny, tablice można wykonać i operowac nimi na rózne sposoby. Na stronie Microchipa poszukaj Aplication Note "AN716". Tam jest rozdział zarówno o tablicach zorganizowanych przy pomocy rozkazu RETLW (powrót z załadowaniem rejestru)i jak to użyć(dla wszystkich PIC-ów), jak i o operowaniu na tablicach przy użyciu dedykowanych rejestrów (dla...
Kolego, wypisujesz banialuki (delikatnie rzecz ujmując), również w imieniu swjego kolegi. W programowaniu chodzi o niezawodność (w tym łatwość usuwania błędów) i wydajność, a nie o "kontrolę nad rejestrami". Pod względem prawdopodobieństwa błędu asembler jest dużo gorszy od C, a pod względem wydajności - na starych architekturach (51, PIC10/12/16) lepszy,...
SPI byłoby dobre przy założeniu, że zawsze zostają wysłane kompletne bajty. W przeciwnym przypadku operacje na uint32_t + unia do podziału na bajty też działają nieźle - chyba ciężko byłoby tu coś wygrać asemblerem... Jakiś dziwny ten rejestr - jeśli PA5 to clock, to na każdym zboczu opadającym rejestr jest przesuwany, ale nie na każdym zboczu narastającym...
Nic nie jest zablokowane; chodzi o to, że rozkaz IN występuje w 2 wariantach: IN AL/AX/EAX, imm8 - tej wersji użyłeś, jak widać, stały adres portu jest 8-bitowy, więc nie można odwołać się do portów o wyższych numerach; IN AL/AX/EAX, DX - w tej wersji numer portu podaje się w rejestrze DX, który - jak wiadomo - jest 16-bitowy ;) I tego wariantu należy...
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...
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...
Optymalizuję również rozmiar kodu źródłowego Ale kosztem znacznego utrudniania sobie życia. Same wady takiego rozwiązania, zalet brak. Po pierwsze sam sobie utrudniasz analizę swojego kodu. Po drugie przenoszenie kodu na inny procek jest mocno problematyczne. Raz, że musisz sprawdzić adresy rejestrów w innym procesorze, a dwa, że łatwo możesz się pomylić...
mov dptr,#keyarr do rejestru DPTR (dwa bajty) ładowany jest adres pierwszego bajtu tablicy o nazwie Keyarr movc a,(at)a+dptr do akumulatora ładowana jest wartość spod adresu jaki jest w DPTR+wartość w akumulatorze. Jeśli przed wykonaniem tej instrukcji w akumulatorze bedzie wartośc 4 to po wykonaniu operacji w akumulatorze znajdzie się wartośc 17 (piąty...
W tym przypadku kompilator prawdopodobnie nie wrzuci zmiennej do RAM tylko wykorzysta w tym celu rejestry robocze. Chcesz wiedzieć więcej - zapoznaj się z asemblerem danego procesora i jego budową.
Na pierwszy rzut oka brakuje skopiowania rejestru SREG w przerwaniach i przywrócenia go przed RETI.
Aby mierzyć temperature z wewnętrznego czujnika musisz go "podłączyć" do ADC. Aby to zrobic musisz odpowiednio ustawić bity w rejestrze ADCCON2 SFR - bity CS3-1 a póżniej to już tylko odczytywanie wartości z przetwornika
(at)A.T. To jak przekazuje sę argumenty znajdziesz w opisie ABI kompilatora. Ma to znaczenie tylko jeśli całą funkcję C napiszesz w asemblerze - to znaczy umieścisz ją w odpowiednim pliku .S i wyeksportujesz za pomocą .global. Natomiast jeśli definiujesz funkcję w C i w jej ciele umieścisz wstawkę to odwołujesz się nie poprzez rejestry lecz nazwy zmiennych/argumentów....
Procedura zerowania RAM: [syntax=asm] MOVR0,#8 MOVR1,#247 ZEROWANIE: MOV(at)R0,#0 INCR0 DJNZR1,ZEROWANIE [/syntax] Zmień sobie wartość którą wypełniasz :-) Tylko uwaga na obszary. Zauważ że "oszczędzam" tylko pierwszy bank rejestrów bo tam są umieszczone R0 i R1, które używam do czyszczenia RAM. A instrukcja MOV A,(at)A+DPTR odczytuje do akumulatora...
Witam. Nie bardzo rozumiem, o jaki licznik chodzi. W x86 rejestr cx jest rejestrem licznikowym. Najczęściej używane zerowanie: xor cx,cx napisz nieco dokładniej o co Ci chodzi.
adresowa rejestr asembler asembler sortowanie diody asembler
zasięg telewizji naziemnej marshall przełączać kanał staż elektryk
naprawa bequit pralka samsung zawiesza
Wymiana łożyska w pralce Siemens Siwamat 1642 Alternatywy dla niedostępnego włącznika młotowiertarki