to czym się różnią eax od ebx??? Kolejnością wykonania z tago co mi wytłumaczyli więc wnioskuje że są dalsze litery alfabetu między e i x ale chyba jestem w błędzie No i są, ale rejestrów jest tylko 4 ;) Do tego EAX od EBX różnią się optymalnością rozkazów, niektóre rozkazy specjalnie traktują niektóre rejestry.
Może chodzi to różne tryby pracy procesora jak tryb uprzywilejowany oraz tryb użytkownika. Gdzie zmienia się zestaw rejestrów przy zmianie trybów dzięki czemu aplikacja nie ma dostępu do rejestrów których używa system.
Od pewnego czasu tylko piszę w C i to zupełnie na inne mikrokontrolery, lecz naskrobałem takie "cóś": [syntax=asm] liczba equ 72h ; przechowywana liczba podana przez uzytkownika czy_kod_poprawny equ 73h ; zmienna "flaga", jesli wartosc 0 to kod poprawny org 0h; start: mov R0, #3 ; ilosc cyfr mov R1, #0 ; offset w tablicy mov DPTR, #haslo mov czy_kod_poprawny,...
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,...
Poczytaj, przyda Ci się: http://pl.wikipedia.org/wiki/Tryb_rzeczy...
Za pomocą jakich instrukcji w assemblerze mogę zapisywać coś do rejestrów R0-R15 ? Masz na myśli zastąpienie załadowania bezpośrednich wartości np. ldi / cbr / sbr r0, 0xD5 (nie istnieją !) ? Jest tego trochę ;) (na przykładzie r0 , r16 i wartości 0xD5 ): ldi r16, 0xD5 mov r0, r16 ldi r16, 0xD5 push r16 pop r0 Można także zatrudnić w/g własnej pomysłowości...
W AVR stan linii (fizycznego wyprowadzenia) odczytuje się z rejestru PINx. W rzeczywistości nie jest to rejestr, bo nie występuje on fizycznie. Jest to tylko stan pinów. Działa to również wtedy, gdy port ma ustawiony dany bit jako wyjście. Jak zatem powinien wyglądać program ? Np. tak: [syntax=avrasm] ldi R16, 1<<PB0 | 1<<PB1 ;PB0 i PB1...
IloscRamu dd 0 . . . mov IloscRamu, eax Tak zapiszesz do zmiennej. Co do pytania o sprawdzenie ilości ramu chyba był specjalny rozkaz do odczytywania konfiguracji sprzętowej. ALe głowy nie dam. Chyba, żeby się dało jakoś odwołać do biosu. [EDIT] http://www.osdev.org/osfaq2/index.php/Ho... Tutaj jest cały...
PTR to nie jest rzutowanie, jakie występuje w językach wysokiego poziomu, tylko traktowanie. Po prostu jest spod adresu wskazanego zmienną pobierane WORD danych. Jako, że sama zmienna jest tylko typu bajt, to w rzeczywistości zostaną pobrane wartości ze zmiennej Byte1 i Byte2 w kolejności.
Może się mylę, bo mam sklerozę, ale czy można używać R4 jako rejestru indeksowego? Zdawało mi się, że tylko R0 i R1. Program Ci się skompilował? Pozdrawiam!
Kodu brak i może jakiś konkretny przykład byś podał? Czyli ciąg i wartości rejestrów.
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.
Bo, moim zdaniem, powinieneś adresować bufor pośrednio. Np. tworzysz sobie bufor od danego adresu. Adres zapisujesz do R0 i potem adresujesz np. mov A,SBUF mov (at)R0,A inc R0 Wówczas R0 jest Twoim wskaźnikiem do danej komórki bufora. Można zdefiniować jeszcze stałe np. BUFFER_START i BUFFER_END, które będą adresami początkowym i końcowym bufora, co...
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ść...
sbi _SFR_IO_ADDR(TIFR), OCF1A Instrukcji sbi nie można używać w odniesieniu do rejestrów o adresie większym niż 32, zamiast tego należałoby w tym przypadku użyć: push r18 ; opcjonalnie ldi r18, (1<<OCF1A) sts _SFR_MEM_ADDR(TIFR), r18 pop r18 ; opcjonalnie Odkładanie na stos nie powinno być konieczne, gdyż rejestr r18 zgodnie...
16-bitowy assembler jest bardzo ograniczony, nie każdy rejestr może być wskaźnikiem danych. Zmień dx na di/si/bp/sp, albo [syntax=asm]mov di,dx mov bx, [di][/syntax]
ecx jest rejestrem, nie zmienna lokalna. Jesli wolana funkcja korzysta z tego rejestru (a moge sie zalozyc, ze tak jest), to Twoja petla sie rozsypie.
Zmienne bufora o ile pamiętam mają nazwy HEAD i TAIL więc kod może wyglądać tak (pod HEAD i TAIL należy wpisać wartości wskaźników): mov al, [HEAD] cmp al, [TAIL] jz bufor_pusty ..... Proste no nie ? No i oczywiście w ds musi być numer segmentu tych zmiennych (chyba że użyjesz jawnie innego rejestru).
A ja jeszcze dodam, aby podejrzeć sobie wypluwany kod z asemblera, jakiś program z jednym rozkazem (wcale nie ma działać), potem zmienić rozkaz na inny (lub rejestr) i porównać z poprzednim wynikowy plik exe. Zobaczysz, że zmieniają się pewne bajty, a te zmiany to właśnie oznaczenia rozkazów i rejestrów. Assembler robi coś takiego (upraszczam, to nie...
MOV R2, 0xDD MOV R3, 0xDD MOV R4, #0 ;zerowanie R4 ADD A, R2 ADDC A, R3 END robiac cos takiego dalej nic.. wynik bedzie zapisany w dwoch rejestrach ?
At90S2313 to procesor 8-bitowy wiec wszystkie rejestry (oprócz licznika rozkazów i jeszcze jakiegos ktorego niepamietam) są 8 bitowe, równiez organizacja pamieci danych jest 8-bitowa więc jesli chcesz posługiwac się słowem 16-bitowym to musisz go sobie podzielić na dwie częsci i przechowywać w oddzielnych rejestrach ( lub komorkach pamięci Sram) .
Błąd powstaje gdy iloraz przekroczy dopuszczalną ilość bitów. W dzieleniu N-bitowym, iloraz musi się zmieścić w N-bitach (pamiętając, że dzielimy liczbę 2N-bitową przez N-bitową). Przykładowo dzielenie 16-bitowe (dx:ax) [syntax=asm]mov dx,0xFFFF ; dzielimy 0xFFFFFFFF mov ax,dx mov cx,1 ; przez 1 div cx;First chance exception: Address 0x0040190C Integer...
Czy pomoże mi ktoś rozwiązać to zadanie. Chyba przy kopiowaniu treści zadań wcięło Ci pierwszą kolumnę tekstu (tam, gdzie definiuje się etykiety).
Witam. Czy istnieje jakas osoba która potrafi dość jasno wyjaśnić takie zagadnienie: Jest liczba zapisana w pamięci do której adres jest w rejestrze np R3. Jak najlepiej wyciągnąć wartość tej liczby i jeśli jest ona równa y to do adresu 5 przypisujemy 1 a jeśli nie, to do rejestru R4 przypisujemy 0
dziel FFFFFFFFFFFFF000 przez 00000AAAAAAAAAA - ucierpi nieco dokładność, ale jest to do wykonania na 64 bitach ALU. Wynik przesuń o 6 w prawo (otrzymasz 6 miejsc binarnych po przecinku, oczywiście przesunięcia dokonujesz modyfikując cechę wyniku). Generalnie dzielenie np liczb 32 bitowych na FPU odbywa się w rzeczywistości z wykorzystaniem 96 bitów,...
Nie wiem jak działa to w Bascomie. Tak działają rejestry w assemblerze. Staram się nie mieszać, ale wydaje mi się że jak zrozumiesz dokładnie do czego jest który rejestr to łatwiej Ci będzie to rozgryźć. Lepiej wiedzieć co do czego i po co.
Witam, jak w temacie, potrzebuje w assemblerze(8086) wyświetlić zawartość rejestru w heksie na ekran, ale nie mam pojęcia jak to zrobić. Szukałem już w Internecie ale nie znalazłem nic na ten temat, więc się w ogóle zastanawiam czy jest tak możliwość. bardzo proszę o pomoc.
a) OK -> SFR dokładniej pod adresem E0H (ACC dla 8051) b) NIE -> stała liczba dziesiętna 121 pod adres 00h (czyli do rejestru R0) c) rozumiem, że są tu dwie instrukcje? Pierwsza ładuje liczbę do rejestru a druga zapisuje pod adres wskazywany przez R0 stałą 121. Czyli 121 zapisane pod adresem RAM 0AH (czyli 10 w systemie dziesiętnym) d) to samo co w...
Użyj tego: BFI Rd, Rn, #<lsb>, #<width> , robi coś takiego Rd , ale adnotacja mówi że wspierany jest od ARMv6 wzwyż.
Tak się składa, że wiem, że R0 jest wolny a każdy inny zajęty. Dziś jest wolny, jutro jest zajęty - obyś się nie przejechał. No i coś takiego nie działa, bo zmienna StackPointer Działa - potem R4 będzie przepisane do R0 żeby prawidłowo zwrócić wynik. jest ładowana do R4, który to ma być zrzucony instrukcją STMDB Wstawki assemblerowe są dużo bardziej...
Odwołam się tu do Atmelowskiej instrukcji jak z Attiny12 przejść na Attiny13 ( ostatni post na stronie http://www.elektroda.pl/rtvforum/topic10... ) - i tam doczytałem się ze zmiana nazw rejestrów wystarczy ...
Wystarczy naciskać F8 idąc po swoim kodzie w głównym oknie i patrzeć na wartości rejestrów procesora po prawej. Pokaż co masz bezpośrednio po funkcji 7 przerwania 21h bo to coś dziwnego aż, że wszystkie rejestry są ciągle zerowe.
...Mam pytanie jak przeniesc komende lookup (z bascoma) na assembler? To zależy z ilu elementów maksymalnie może składać się tablica i jaki jest rozmiar jednego elementu. Np. dla tablicy o wielkości max 256 elementów umieszczonej w pamięci programu i rozmiar elementu to 1 bajt: mov a,numer_elementu mov dptr,adres_pierwszego_elementu ; (początek...
Jesli rozumiem chodzi o przerwanie INT aktywowane oadajacym zboczem a nie poziomem. W INT0 ustawiasz bit IT0 w rejestrze TCON na 1 jesli ma byc od zbocza a 0 jesli od niskiego poziomu. w INT1 bit IT1
Taki program mógłby wyglądać tak: Mnożna: rejestr E Mnożnik: rejestr A Wynik: rejestr HL LD HL,0000 ;inicjacja wyniku LD B,08 ;licznik pętli LD D,00 ;zerowanie bardziej znaczącego bajtu DE NXBIT ADD HL,HL ;przesunięcie wyniku w lewo RLA ;sprawdzenie cyfry monożnika JR NC, FIN ;opuszczenie zera ADD HL,DE ;dodanie mnoznej FIN DJNZ NXBIT ;powrót do początku...
A powiesz mi coś o przerwaniach? Np czy mogę użyć przerwanie aby zwiększyć rejestr o 1? Jak to zrobić
No tak, ale chyba ten timer0 tego trybu nie posiada... Do czego służy rejestr TCNT0??
jeśli wykryjesz, że naciśnięto przycisk (rozumię, że tyle zrobiłeś) to wstaw (najprościej): LCALL WAIT_KLAW a gdzieś poza programem dodaj procedurkę: WAIT_KLAW: DJNZ r7,$ DJNZ r6,WAIT_KLAW RET powinno działać ;-) jeśli gdzieś indziej używasz rejestrów r6/r7 to możesz oczywiście użyć innych rejestrów lub dowolną komurkę pamięci ram (zamiast r7/r6 może...
Jest jeszcze problem jakich rejestrów używać w funkcji tak, zeby nie nadpisać danych.
Co do wypisywania tekstu bez przerwania DOS-owego to myślę, że może trzeba uruchomić jakoś kartę graficzną, może przez jakiś tryb vga, ale nie mam pojęcia co dalej. Wszystko zależy od tego, jaką masz kartę graficzną, dla starych, monochromatycznych Hercules-ów pamięć zaczynała się gdzie indziej niż dla VGA - jak rozumiem mówimy o trybie tekstowym?...
Kilka błędów: - nie możesz zakładać, że zmienne znajdują się pod stałymi adresami w pamięci, to się będzie zmieniać pomiędzy kompilacjami, w związku z tym istnieje konieczność użycia symboli - register to tylko sugestia dla kompilatora i tych rejestrów wcale nie musi rezerwować. Ale jest też poważniejszy błąd - rejestry te są wykorzystywane przez AVR-libc...
Od kiedy AVR ma rejestry ACC IE PSW itd ??
Jeżeli dalej potrzebujesz pomocy mogę poratować cię kalkulatorem napisanym w języku Assembler, działający na rejestrach mikroprocesora MSP430. Mam tez gdzieś do niego dokumentacje nawet z wyrysowanymi algorytmami :)
zle rozumiesz, bo nie wiedziec czemu czyszcisz PORTB zamiast go ustawic. pomijajac juz fakt, ze nie ma rejestru, ktory zwalby sie PORTB1. 4\/3!!
Pewnie. Prosto z datasheetu: http://obrazki.elektroda.net/16_12377537... Trzeba ustawić rejestry jak w tabelce.
Witam , Jak odczytać znak z klawiatury pod pic'iem ?? może ma ktoś gotową procedurkę zwracającą ASCII w rejestrze "W", w grę wchodzi tylko i wyłącznie ASSEMBLER Pozdrawiam ..
Napisz dokładnie jak to ma wyglądać i czy to ma być w trybie tekstowym czy graficznym. Ja osobiście polecam pisanie programów asemblera w notatniku, bo korzystanie z tego co wygeneruje kompilator C mija się z celem. Bo jak już wybieramy asemblera to chcemy napisać program jaknajbardziej optymalny. Najprostszy program w asemblerze typu "Hello World"...
Witam Proponuje popatrzeć na [url=http://www.micromade.pl/pdfy/dsm51_... strona 50, jeśli chodzi o wskaźniki proszę sobie poczytać o rejestrze PSW. Pozdrawiam
Cześć. Mam kilka wstawek assemblerowych jak poniżej. Kod ustawia pin D6 w stan niski i wysoki po upływie kilku taktów zegarowych. Służy to do uzyskania bardzo krótkich szpilek stanu wysokiego na pinie scalaka. Chciałbym jakoś móc je sparametryzować i wykorzystywać do sterowania innymi pinami. Czy da się jakoś sprytnie to zmodyfikować, by zamiast 0x0D...
Jak dla mnie wystarczyłby na start graficzny assembler, gdzie wszystkie operacje np. na rejestrach byłyby w formie tablic logiczno-matematycznych na podstawie których mógłbym w profesjonalny oraz oszczędny sposób rozszerzać swoja bibliotekę graficzną... Co kto lubi... Dla mnie malowanie tych kresek byłoby mega niewygodne w kleceniu tych moich popierdułek.
Po ustawieniu portu w rejestrze PORTx musisz odczekać przynajmniej jeden takt zegara przed sprawdzaniem rejestru PINx. Możesz dodać intrukcję assemblera NOP.
0xGH już wogóle wygląda...innowacyjnie :P Te dwa rejestry co wymieniłeś to nie są komórki pamięci. Rejestry które deklarujesz w plikach nagłówkowych to są już *(adresy w pamięci) , dlatego jest mozliwość postawić tam wskaźnik. A da się postawić wskaznik na np. R2? Spróbuj...;] Procesor ma rejestry robocze , nie wmapowane w pamięć, na których wykonuje...
dodawanie do ZH:ZL można zrobić w dość prosty sposób: add ZL, r16 adc ZH, jakis_rejestr_o_wartosci_0 Jeśli tablica "cyfry" jest "Dim Cyfry(4) as Byte", to bardziej prawdopodobne jest, że znajduje się w pamięci RAM a nie programu, stąd szacunkowo kod powinien wyglądać jakoś tak (jakoś, ponieważ nie znam bascoma): $asm ' laduje do pary rejestrów Z adres...
Zamiast pytać o to jak odwołać się do tego rejestru (co prawda można tworząc zmienną przez jakas_zmienna >>= 1; if(PS_WEJ&0x01) jakas_zmienna |= 0x80; nie tracąc na szybkości (3 cykle przy rejestrze IO dostępnym przez sbic/sbis, 3 przy innym rejestrze [sbrc/sbrs], 5 przy komórce pamięci). Ze względu na skrajny bit można to zoptymalizować,...
nie sadze aby udalo ci sie znalezc ksiazke o MSP430. ten uklad jest malo popularny, trudno dostepny i ogolnie malo praktyczny [; zacznij sobie od tych AVRow, a jesli wolisz prostszy assembler, to w PICach jest on wielokrotnie latwiejszy - jest tam 35 instrukcji. problem jest tego rodzaju, ze PICe ogolnie sa mocno rozne od typowych prockow dzisiejszych:...
SPLa przestał żyć. Nie przesadzaj - przecież ten cały STM32 Cube i będący jego częścią "HAL" (równie adekwatna nazwa jak "SPL"...) to SPL z minimalnie pozmienianym API. Dalej jest tak samo badziewny i napisany przez kogoś kto "nie ogarnia" programowania (wciąż brak jakiegokolwiek "const" przy wskaźnikach - na to chyba nigdy nikt tam nie wpadnie). Często...
mov ah,2 mov dl,30h int 21h wyświetla znak '0' (taki jest kod w rejestrze DL). Jaki kod Ci nie wyświetla?
Adresy masz takie jakie portów - patrz mapa pamięci mikrokontrolera. Za porty odpowiadają wartości w rejestrach. Zatrzask tak średnio "rozszerza" I/O; w typowym zastosowaniu z '51 służy głównie podłączeniu zewn. pamięci adresowanej 16bit gdzie część adresów jest mieszana z 8 bitowymi danymi. Ogółem jeśli chodzi o LED to starałbym się zrobić to w formie...
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.
OK, dzięki wszystkim, już doczytałem w dokumentacji sposób adresowania za pomocą rejestru Z ;) Temat zamykam. Pzdr.
1. Jak mogę poznać podstawy assemblera? (Assembler czy asembler?) Ja zaczynałem od PC, dużo programów, przykładów i dokumentacji. Musisz zdobyć nawyki i przyzwyczaić się do projektowania algorytmów na bardzo niskim poziomie. 2. Jaka obecnie dostępna literatura pozwoli mi na opanowanie postaw, wyjaśni mi czym dokładnie są stosy, rejestry i jak na nich...
Witam serdecznie. Wie ktoś może w jaki sposób odczytuje się dane z tablicy w assemblerze? Oto fragment kodu: Atmega8 Kompilator AVR studio 4.19 [syntax=asm]button1: ldi R20, table*1 rjmp main button2: ldi R20, table*4 rjmp main table: .db 0, 26 .db 51, 77 .db 102, 128 .db 154, 179 .db 205, 230 .db 255[/syntax] W podanym fragmencie kodu button1 odczytuje...
Witam, Pierwszy błąd, który wychwyciłem to brak zachowania i odtworzenia rejestru stanu procesora SREG we wszystkich obsługach przerwań. Należy również zadbać o zachowanie używanych rejestrów (R0-R31). Zobacz ci się stanie np. w takim przypadku: CPI R16,10 ; tutaj przychodi przerwanie które zmienia stan SREG (znaczniki Z,C ...) BRNE xxx LDI...
Dzisiaj jedyne sensowne zastosowanie assemblera to małe wstawki do programów w innych językach. Może to dotyczyć jakiś specyficznych rozkazów dotyczących sprzętu (przełączanie trybów CPU, dostęp do jakiś specjalizowanych rejestrów itp) bądź pewne obliczenia łatwiejsze w assemblerze (np. bardzo duże liczby - w assemblerze jest dostęp do przepełnienia,...
W dokumentacji jest lista rozkazów i rejestrów z której można korzystać. Ten dokument raczej cały czas ci będzie potrzebny.
Zacznijmy od tego, że analizowanie tego typu przypadku jest nieco bezprzedmiotowe - jest tam dużo rzeczy zbędnych, wiele architektu nie pozwala na użycie rejestru stosu bezpośrednio - stąd add r7, sp, #0 Przeanalizujmy kod: [syntax=c]void foo(int32_t); void bar(int32_t*); int32_t __attribute__((noinline)) DSP_2(int32_t NewSample, int32_t *XCoef, int32_t...
... ; tu kod zatrzymujący licznik mov DPTR,#TABLICA ; iicjujemy wskażnik do tablicy mov A,#0 ;A ma teraz wartosc zero movc A,(at)A+DPTR ; pobieramy starszy bajt, teraz jest w A mov B,A ; zachowujemy go, np. w rejestrze B inc DPTR ; przesuwamy wskażnik do tablicy na nastepny bajt mov A,#0 ; tu trzeba wyzerować A movc A,(at)A+DPTR ; pobieramy nastepny...
1. GNU ARM to najzwyklejsza paczka taka jak CodeSourcery, WinARM czy Yagarto, więc po co tego używać i po co to w ogóle roztrząsać? 2. CodeSourcery Lite jest darmowe. Jeśli nie jest wystarczająco darmowe, to wystarczy ściągnąć sobie źródła GCC i skompilować samemu [; Jest to możliwe, skrypty z Codesourcery to znacząco ułatwiają. 3. Niczym 4. Bo kompilujesz...
Muszę uruchomić dodatkowy UART na tym procesorze kwarc to 18,432M potrzebuje informacji i programów w asemblerze. Jeszcze jedno jaką wartość wpisać do licznika jeżeli nie ko RZ ystam z wewnętrznych generatorów prędkości dla UARTA podstawowego. Wszystkie niezbędne informacje są w pdfach do tego procesora. Zajrzałeś tam ? Znajdziesz tam też wzory na...
zdrowie dotyczące Picoblaze. Myślę, że wina leży w tym, że dajesz instrukcje za pomocą LOAD zamiast rejesteru port. Należy zdefiniować "Przycisk" jako constant lub używać rejestru (s1, s2, itd.). Przycisk EQU "wartość" Port wejścia: LOAD s0, przyciski OUT s0, leds czytaj portu: IN s0, leds W Twoim miejscu, nie będę używać pblaz ide. To jest przestarzałe...
Witaj Lulubella . Co prawda zbyt wiele Ci nie pomogę (sam sie uczę ASM), ale jednak lepsze coś niż nic. A więc zacznijmy od początku. Niezbędnym dla rozwiązania Twego problemu jest utworzenie tablicy 100-tu element owej w pamięci flash mikrusa. Oto ta tablica .org $2500 oznacza umieszczenie tablicy od adresu 2500 * 2 Teraz przyszedł czas na odczytanie...
Niestety: If R6.4 = 0 Then nop End If ani nawet: If R6 = 0 Then nop End If się nie skompiluje. Pozostaje odczyt rejestru do zmiennej i testowanie zmiennej (O zgrozo - odczyt rejestru do zmiennej :D. Żeby potem i tak zmienna była odczytywana do rejestru i tam sprawdzana.), albo assembler: sbrc R6, 4 jmp Zrob_to nop nop nop nop jmp Zrob_tamto !Zrob_to:...
Do deklaracji robisz kod danych: .dseg .org 0x60 Kolejna linijka to przejście do początku SRAM. Następnie definiujesz zmienną bajtową: Nazwa: .byte 1 No i masz deklarację. Do poszczególne bity musisz wyłuskiwać komendą iloczynu bitowego z liczbą stałą np. dla pierwszego bitu będzie: lds r16, Nazwa andi r16, 0b00000001 I w r16 masz tylko wartość...
Witam, jestem w trakcie pisania aplikacji na mikrokontroler Motoroli M68HC08. Potrzebuję przechowywać aktualizowane co jakiś czas dane w 3 zewnętrznych rejestrach przesuwnych. Motka ma tylko jeden port równoległy. Chcę połączyć rejestry szeregowo, z jednej linii portu wyprowadzić zegar, z drugiej dane. Nie mam pojęcia jak to zaimplementować w assemblerze...Dane...
operacja DIV dzieli liczbę bez znaku znajdujące się w AX (wersja 8-bitowa), DX:AX(wersja 16-bitowa) EDX:EAX (wersja 32-bitowa) przez operand. IDIV dzieli liczbę ze znakiem znajdującą się w AX, DX:AX, EDX:EAX przez operand i umieszcza wynik dzielenia w AL/AX/EAX a resztę w AH/DX/EDX Odpowiadając wprost na pytanie - dzielenie przez 32-bitowy operand dzieli...
żeby była jasność bo może nie sprecyzowałem: nie szukam wynalazków typu visual studio... itp... bo to wszystko sprowadza się generalnie do straty czasu podczas konfiguracji oraz późniejszej pracy ... (chociaż coś czuje że bez tego sie chyba nie obejdzie) Dziwie sie w ogóle - że cały ten dramat pod postacią "mozliwości" instalacji OPENOCD, C/C++ SDK...
... 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...
Chyba tak "wprost" się nie da, ale można użyć następującej sztuczki: call a a: pop eax Wtedy w EAX masz wartość EIP dla adresu A.
...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...
.include "8515def.inc" .deftmp = r16 .defPWMValue = r18 .defKeyStatus = r19 .equMaxPWM = 19 .include "8515def.inc" start: lditmp, 0x5c outTCNT1L, tmp ldiKeyStatus, 0x3 rcallInitPWM InitPWM: ; tu jest błąd, bo w rejestrze TCCR1A bit 2 nie jest zdefiniowany i nie ; należy go ustawiać: powinno być 0x63 ; 0x63 oznacza ;...
Nigdzie nie ustawiasz portu jako wyjścia. W funkcji opóźnienie zmieniasz rejestry R16-R18 po czym jak wyjdziesz z funkcji wystawiasz wartości te na porty.
Prawdopodobnie chodzi o coś takiego ;) plik :glowny.c #include<def.h> main() { while(1==1) { pp(246,28,0x00); //wywołanie funkcji z parametrami (parametry przekazywane są do assemblera } } //**************************************... plik def.h extern void pp(unsigned char poz_x ,unsigned char poz_y ,unsigned char dana7); //**************************************...
Assembler wydaje mi sie prosty,operowanie odpowiednimi rejestrami na mojej atmedze 32 nie sprawiło mi do tej pory sporych trudności udało mi się przejść kurs assemblera na forbocie. Do tej pory nie napisałem żadnego poważnego projektu. Chcę się nauczyć obsługi wyświetlacza w assemblerze,skoru już go ruszyłem, jeżeli nie będzie mi odpowiadać,przesiądę...
Przeanalizowałem troszke kodów (AvrX, ArvLibC), i doszedłem do wniosku, że są to ustawienia domyślne kompilatora avr-gcc (napewno da się je zmienić, tylko kwestia posiedzenie w dokumentacji). Argumenty są odbierane kolejno w rejestrach 25:24, 23:22, 21:20, etc. Podejrzewam, że jeśli przekażemy do funcji argument jedno-batowy, to mozemy odebrać go w...
Skorzystaj z adresowania względnego, ustaw któryś z rejestrów wskazujących na adres swojego rejestru, a operuj na rejestrze INDFx
witam szanownych forumowiczów. Ze względów, że większość wyjść mikrokontrolera atmega 8535 mam już zajęte, a musze jeszcze podłączyć LCD oczywiście w trybie 4 bitowym, mam problem jak wysyłać dane do LCD w przypadku gdy 3 piny będą na porcie A a jeden na porcie B. Czy można tak zakombinować żeby nie odnosić się do każdego pinu oddzielnie tylko wklepać...
To wszystko prawda, aczkolwiek wydaje mi się, że różnie to widzą różne kompilatory. Ofszem Acc jest nazwą rejestru SFR i można ją używać jak każdej innej zmiennej czyli w rozkazach z adresowaniem bezpośrednim (direct). Oczywiście jeśli to możliwe to lepiej jest korzystać z rozkazów wykonywanych na akumulatorze. Ale czy każdy kompilator zrozumie inc...
Czasami rozkazy LPM,SPM dzialają z rejestrami ZL,ZH (R30,R31) ld r30,.... ld r31.......... LPM lub LPM r16,Z No właśnie u mnie "ZL" i "ZH" nie działają. Sam zauważyłem przeglądając inne strony ,że często zamiast nazwami rejestrów ludzie posługują się czymś takim. U mnie gdy próbuje czegoś takiego użyć zamiast nazw rejestrów kompilator wyrzuca błędy.
Ale 01h przerwania 21h czyta znak, a nie liczbę. Co więcej, DIV chyba nie działa na 8-bitowych rejestrach, więc bierze AX przez BL. Stąd AX = 0134h = 308, a to jest podzielne przez 7.
Witam Mam takie pytanko:do pisania programow pod assembler jaka lepiej rodzine prockow wybrac: '51 czy AVR.Chodzi np o to ze AVR nie maja 16-bitowego rejestru DPTR i duzo rzeczy trzeba tam robic na piechote. Przy okazji prosze o podanie mi odpowiedniego oprogramowania. pozdrawiam
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)...
odpowiednio dla pierwszej (inicjalizacja łacza) a AH -> 01100000 (rejestr przesuwny nadajnika jest pusty i rejestr buforowy nadajnika jest pusty) wysyłanie znaku AH -> 10100000 (przekroczenie czasu i rejestr buforowy nadajnika jest pusty) odbiór znaku AH -> 11100000
Niestety wymaga mimo wszystko troche więcej czasu od programisty, oraz znajomość wnętrza procesora (praktycznie nonstop pracujesz z datasheetem) chyba że masz dobrą pamięć i kojarzysz co w jakim rejestrze. I właśnie dlatego warto znać assembler, ale programować w C. Po co męczyć się, skoro można napisać ładnie i szybko, a kompilator przełoży to na...
pomoc kompilatorowi w przkazaniu i wlasciwym poslugiwaniu sie rejestrami To jest chore. Wolę pisać w assemblerze od a do z. W avr studio przynajmniej jest normalny assembler. Ten wie jak pisze "out cośtam,cośtam" o co mi chodzi. Próbowałem naprawde zaprzyjaźnić sie z AVR-GCC. NIe chce widzieć tego badziewia na oczy. To jest shit wśród kompilatorów.
Nie bój sie assemblera. Procesory RISC maja niewiele prostych rozkazów. Platformy Kolega pomylił. W przypadku ARMa ani "niewiele" ani "prostych"; samo określenie ARM mianem RISC też dość dyskusyjne. Asembler ARM początkującego może jedynie wystraszyć. Z tą liczbą rozkazów, to temat faktycznie dyskusyjny. Z80 700 rozkazów i 6502 z 15 wypada gorzej....
1. Który bajt jest bardziej znaczący a który mniej? (od lewej strony czy prawej) Nie dostaniesz jednoznacznej odpowiedzi. Ich adresacja zależy od architektury systemu. Poczytaj: http://en.wikipedia.org/wiki/Endianness Natomiast nie ma problemu z uzyskaniem jego wartości programowo. Przepisz wartość do któregoś z rejestrów - dla rejestru xX, xL to jego...
Od bajtu CB zaczynają się wszystkie rozkazy Z-80 dotyczące operacji na bitach: ustawianie (SET), zerowanie (RES), testowanie (BIT) oraz przesywanie bitów (RR,RL,SR,SL i pochodne). Bajt DD dotyczy operacji na rejestrach IX, a FD na rejestrach IY. Stąd operacje na bitach rejestrów IX rozpoczynają się od DD CB, a na bitach rejestrów IY rozpoczynają się...
[syntax=asm]00E51353 sub esp,0F0h [/syntax] Tutaj masz ustawiany rozmiar stosu na zmienne lokalne, dzieje się tak w każdej funkcji. Jest także ustawiana ramka stosu. Odnoszenie się do zmiennych odbywa się poprzez obliczanie ich pozycji względem wartości rejestru ebp. W linii (z włączonym "Show symbol names"): [syntax=asm]00E5136E mov dword ptr [i],2...
ale większość ludzi jest w stanie skumać, że nawet super optymalny program w asm na '51 nie będzie szybszy niż normalnie napisany program w C/C++ na Cortexa. Po prostu nie ma takiej możliwości fizycznie I tutaj nie masz racji...bo '51 to nie tylko AT89C51 i tego typu pochodne. Analog produkuje 12MIPS'owe '51 a ciekawe jest to że nie jest to mikrokontroler...
1. Ogólnie liczysz dobrze, ale procesor nie wyrobi się w 160-ciu cyklach (a dokłądniej mówiąc to liczysz trochę źle bo własnie nie uwzględniasz czasu potrzebnego na obsługę przerwania). Nie uzyskasz czasu 10us, nawet dla kwarca 16MHz. Musiał byś to napisać w assemblerze i użyć dyrektywy Nosave. 2. Nie. Jeżeli coś zadeklarujesz w programie to ta rzecz...
assembler darmowy assembler assembler tablicy assembler przerwania
schemat kontrolki rezerwy paliwa 25pt4423 dławik regulacja kontrast wyświetlacz
kablówka skrzynka matryca lsc320an02
Brak obrazu i dźwięku w Kruger & Matz KM0243FND-S4 Viessmann piecyk gaśnie i nie grzeje - przyczyny