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...
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
Jak wyślesz wartość al jako znak też dasz rade odczytać mając tablice kodów ascii, ale najprościej stworzyć napis 'xx',13,10,$ i pod dwa pierwsze znaki wstawić przekodowaną wartość al na liczbe szesnastkową w kodzie ascii.
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:...
Witam! Jako, że jestem zielony;) w programowaniu mikrokontrolerów PIC a dokładniej w asemblerze prosze pomoc. Podczas kompilacji w programie MPASM otrzymuje nastepujace bledy: Warning[205] C:\1\L.ASM 217 : Found directive in column 1. (error) Error[128] C:\1\L.ASM 217 : Missing argument(s) Message[302] C:\1\L.ASM 222 : Register in operand not in bank...
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ś.
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ć.
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...
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...
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
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ł...
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
No tak, ale on ma wyraźnie polecenie by rozrzucić te cyfry po trzech rejestrach.
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]
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
Siedzę na tym cały czas i nie mogę wymyślić ani znaleźć odpowiedzi w jaki sposób w tym programie będzie działać linia: mov esi, OFFSET linie + 4. Sprawdzam sobie rejestry w visual studio i wygląda to tak: http://obrazki.elektroda.pl/3068093500_1... Po wykonaniu ostatniej lini w DX dostaję wartość piątej cyfry w tablicy linii czyli 444,...
W manualu od strony 129 dla Atmega16 wszystko pisze odnośnie SPI
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ć.
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 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...
Jak na razie robię tak,że do każdej komendy dopisuje obok co robi ale zadanie na czym innym polega. jest np. OUT PORTA,R16 <--- pisze tutaj, że jest to ( pull-up na wejściu T0) Tak do każdego robię ale nie mam pojęcie jak to zrobić :(. Jaki jest efekt działania poniższego programu? Odpowiedz na to pytanie posługując się informacjami z ostatniej lekcji...
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
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...
:arrow: Sind, asembler a widzieliście rejestr DDRx w mikrokontrolerach PIC? :arrow: mikmas podaj dokładnie typ procesora.
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.
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
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.
Dodawanie to pewnie lepiej zrobić tak: założenie: R1,R3,R7 młodsze, 8-bitowe rejestry liczb 16-bitowych, mov a,R1 add a,R3 mov R7,a mov a,R0 addc a,R2 mov a,R6 Wynikowe przeniesienie jest zawarte w znaczniku C. Jeżeli bardzo chcesz to przenosić do rejestrów to możesz, ale po co? I na koniec głupie pytanie: nie używasz jakiegoś symulatora? Chyba było...
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)
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???
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?...
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!!
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...
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.
Mogłbyś napisać przykładowy kod, jak to rozwiązać ?
(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...
Jeśli wyrazisz taką ochotę to napiszę Ci pod asemblerem kawałek kodu, podaj tylko rejestry w które chcesz wklepywać dane Pozdro
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:...
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ę...
Po pierwsze należy się zapoznać z procesorem, na który ma być pisany program. Szczególną uwagę należy zwrócić na rejestry i organizację pamięci. Dopiero później można pisać program. Podejrzewam, że dowolna książka traktująca o 8051 zaczyna się zwykle od takich informacji. W moim przypadku sprawdziła się np. "Podstawy programowania mikrokontrolera 8051",...
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
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....
można jeszcze tak: clr c subb a,r0 jz skok ;gdy a==r0 ... skok: ... tyle że traci się zawartość akumulatora. Tak wogóle to warto ,tak dla nauki, popisać sobie troche takich procedurek w C (np Keil), zdisasemblerzyć to ;) i popatrzeć co to też kompilator wygenerował czasami wychodzą różne ciekawostki na które trudno samemu wpaść...
Bardzo to nieczytelne. A jaki to procesor ? Po rejestrach wygląda na '51
Wydaje mi się , że do takich porównań lepiej użyć XRL , niż SUBB . Piotrek
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>
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...
Tak to jest 8051 ale jak to zrobić, nie mam pojęcia, jeśli jest tu jakis spec od programowania to prosze o pomoc
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
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?
oki. dzieki za porady. juz sobie poradzilem. pozdr
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...
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...
Z tą dowlnością w używaniu rejestrów byłbym bardzo ostrożny. Nieodpowiednia zmiana - program się wysypie. Nie wolno używać w trybie zapisu bez wcześniejszego zapamiętania: Y ( soft stack pointer ), R4:R5 ( frame stack pointer ), R6 ( status register ), R8:R9 ( data pointer ), R23 ( translate register ), R12:R13:R14:R15 ( fp calculator ). W sumie można...
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.
(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....
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...
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
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.
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.
znam sposób ustawiania podzielnika transmisji ale w asemblerze - rejestr LCR określa podzielnik generatora i ogólnie format całej ramki
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.
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...
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 ;)
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...
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...
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ą.
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...
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.
Na ATmegi to bardzo wygodny jest C. Na ATtiny tylko asembler. Kontrolery te posiadają bardzo płytki stos sprzętowy(np ATtiny12L ma 3 poziomowy) i brak RAM-u (tylko rejestry). Dodatkowo, jak program ma być szybki to tylko asembler. Bascoma sobie daruj, to zabawka i na dodatek wyrabia złe nawyki.
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ć....
czyli po prostu narysowałem 3 rejestry jeden nad drugim, jakie zostały dodane do stosu, do danej chwili.
Zobacz sobie to https://serwis.avt.pl/files/kurs_c/22_Ku... https://serwis.avt.pl/files/kurs_c/23_Ku... https://serwis.avt.pl/files/kurs_c/24_Ku... https://serwis.avt.pl/files/kurs_c/25_Ku... https://serwis.avt.pl/files/kurs_c/26_Ku... https://serwis.avt.pl/files/kurs_c/27_Ku... https://serwis.avt.pl/files/kurs_c/28_Ku...
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...
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...
zasadniczą różnicą jest to, że przez rejestry jest możliwe adresowanie pośrednie, czyli wartość w rejestrze wskazuje adres danej, są to rozkazy z (at)
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...
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.
Pisząc w asemblerze masz swój własny styl (ulubione rejestry, nazwy itp.), najczęściej będący pochodną kursu, z którego się uczyłeś pisać. Teraz to co generuje kompilator najprawdopodobniej nie będzie się zgadzało z Twoim stylem... Jedyne wyjście to wzorując się na danej procedurze, "przekompilować to w głowie" ;)
Co do parametrów makra , to .... LEGENDA: (małpa) wtryniła się za (at) .macro push4r .if (at)0<32 push r(at)0 .endif .if (at)1<32 push r(at)1 .endif .if (at)2<32 push r(at)2 .endif .if (at)3<32 push r(at)3 .endif .endm ... push4r 0,' ',' ',31 Jak ktoś chce , można rozpisać na wszystkie 32 rejestry , tylko potem dawać np.29 spacji ... nie...
Na pierwszy rzut oka brakuje skopiowania rejestru SREG w przerwaniach i przywrócenia go przed RETI.
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...
Spójrz na swój kod rozbity na poszczególne kroki. Jeśli w programie występują powtarzające się fragmenty - należy użyć pętli. Na początek zrób rysowanie pojedynczej linii w pętli, np: 1. Załaduj do rejestru bajt jako wzorzec 1 linii figury z wyrównaniem do lewej, np 00110000B 2. Pętla 6 kroków - przesuń rejestr z bajtem wzorca o 1 bit w lewo z przeniesieniem...
Witam, Musze zrobic szybkie przerwanie od timera w atmega162. W związku z tym nie moge sobie pozwolic na korzystanie z pamięci SRAM i stosu, więc zostają tylko rejestry, wystarczą 3, w tym dwa wskaźnikowe np. X. No więc w właściwym programie te rejesrty nie mogą byc użyte, ani modyfikowane. Czy da się to zrobic w AVG-GCC? Przepisywanie dużego fragmentu...
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?
Ma ktos pomysl jak pogodzic wx-devcpp bloodsheda z asemblerem? pisze mu np: __asm__ __volatile__ ("out %dx, %al"); w dx mam adres rejestru w al wartosc jakiejs zmiennej, otrzymuje zawsze komunikat : suffix or operands invalid for 'out'. Problemu nei ma w VC++, tylko w devcpp. Z zapisem wartosci zmeinnej do rejestru nie ma problemu, wystarczy wskaznik...
Z manuala: TIMx_CR1: Bit 0 CEN: Counter enable 0: Counter disabled 1: Counter enabled Tim2 w ogóle nie ma rejestru PCKENR1
hmm...u mnie kompilator wskazuje to miejsce jako lokalizację błędu. Sprawdzałem czy stałe zadeklarowane dla tych rejestrów sterujących są w porządku i nie znalazłem błędu.
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
Bis -> niestety to nie to :( Starob -> Mam takt 6MHz więc licznik przepełnia się raz na 0,13s, więc przy inkremętacji rejestru R5 co taki czas, muszę coś zauważyć (chyba ;)
Poza tym, że w jednym i drugim instrukcja zajmuje jedną linię i ma format "opkod argument1, argument2", to innych podobieństw jest niewiele - różne architektury, różne zestawy instrukcji, rejestry itd. Pozdrawiam, Dr.Vee
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...
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...
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...
Znalazłem, na razie, dwa sposoby: Pierwszy, to używanie w przerwaniu wartości wpisywanej w rejestry Osccal lub Tcnt0 , oczywiście niewłaściwe, ale przydatne ;-) Drugi, to zerowanie w przerwaniu flagi komendą Cli , a potem powrót z przerwania nie komendą Reti , ale skok do poczatku programu gdzie ustawiam parametry przerwań i je odblokowuję. Nie rozumiem...
a nie możesz całej funkcji w assemblerze napisać? parametry przekazuje się via rejestry bardzo prosto, potem *.obj linkujesz do reszty i cacy.... który to keil (wersja)? nata
int port=0x378; // adres hex int wartosc=0; int main(int argc, char *argv[]) { __asm("mov _port,%dx"); //c++ traktuje int jako dlugie slowo zatem niewiem czy to tak bedzie dobrze ;] __asm("mov _wartosc,%al"); __asm("out %al,%dx"); //to zadziala tylko pod czystym dosem albo win95/98 } w beznadziejnej skladni AT&T wszystkie parametry dla rozkazow przesyla...
Asembler jest taki sam, ale nie takie same nazwy rejestrów i ich ilości, to samo z peryferiami, AT90 ma inne. Inna sprawa, że lista poleceń nie jest taka sama dla wszystkich procków: niektóre mają o połowie więcej komend! Przejście z AT90 ATtiny wymaga zmiany nazw tylko kilku rejestrów i na pewno poradzisz sobie :) Pozdrawiam
Witam Mam ogromna prośbę. Potrzebuje przeanalizować 2 programy które niestety nie działają poprawnie. Programy pisałem sam lecz niestety sa w nich pewne błędy które niestety nie mogę znaleźć. Po asemblacji działają jednak w programie symulacyjnym nie wyświetlają tego co powinny, wiec s to programy bardziej wychodzące z tego co ma robi dany program niż...
rejestry atmega8 atmega128 rejestry mcp23017 rejestry
uszkodzona głowica dysku uszczelka popychacz wyciek pompy paliwa
Ustawienie przednich lamp w Range Rover L322 2010 Gasik RC dla transformatora 200W: wartości rezystora i kondensatora