Instrukcja 'goto $+1' w Asemblerze PIC - Co to oznacza w praktyce?
Asembler PIC`a
From: "~Filut~" <pawel_at_nospam_filuts.waw.pl>
Subject: Asembler PIC`a
Date: Tue, 7 May 2002 21:27:23 +0200
Co oznaczajš instrukcję typu "goto $+1" - domyślam się, ale wolę się zapytać
Poniżej przykładowy kod:
movlw 0x2F
movwf d1
movlw 0x76
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0
;2 cycles
goto $+1
Pozdrawiam - Filut
From: Marek Lewandowski <nospam_at_nospam_poczta.onet.pl>
Subject: Re: Asembler PIC`a
Date: Tue, 07 May 2002 21:54:29 GMT
~Filut~ wygenerował manualnie w wiadomości <ab99q1$em6$1_at_nospam_news.tpi.pl>
udostępnionej publicznie dnia Tue, 7 May 2002 21:27:23 +0200 co
następuje:
Co oznaczajš instrukcję typu "goto $+1" - domyślam się, ale wolę się zapytać
stawiam na skok do instrukcji pod adresem o 1 większym od aktualnej
wartości PC (PC wskazuje na najbliższš następnš komendę, czyli będzie
to po prostu "skip")
--
Marek Lewandowski ICQ# 10139051
locustXpoczta|onet|pl
http://locust.republika.pl
[! Odpowiadaj pod cytatem. Tnij cytaty. Podpisuj posty. !]
From: "Michał Sz." <szipluk_at_nospam_friko.onet.pl>
Subject: Re: Asembler PIC`a
Date: Wed, 8 May 2002 19:26:30 +0200
Trafileś w 10-tke !
A ja zapytam czy jest gdzies w sieci jakiś board w ojczystym jezyku gdzie
porusza się problemy z np. PIC-ami
Michał
From: "BaGRoS" <BaGRoS_at_nospam_wp.NOSPAM.pl>
Subject: Re: Asembler PIC`a
Date: Wed, 8 May 2002 19:38:29 +0200
U=BFytkownik "Micha=B3 Sz." <szipluk_at_nospam_friko.onet.pl> napisa=B3 w =
wiadomo=B6ci news:abbn9q$d8c$1_at_nospam_news.onet.pl...
Trafile=B6 w 10-tke !
=20
A ja zapytam czy jest gdzies w sieci jaki=B6 board w ojczystym jezyku =
gdzie
porusza si=EA problemy z np. PIC-ami
=20
Micha=B3
A asembler opisany i z przyk=B3adami po polsku znajd=EA?
Ew. ksi=B1=BFka jaka=B6?
BaGRoS
From: Andrzej Ekiert <treike_at_nospam_zeus.polsl.gliwice.pl>
Subject: Re: Asembler PIC`a
Date: Wed, 08 May 2002 21:37:50 +0200
BaGRoS wrote:
A asembler opisany i z przykładami po polsku znajdę?
Ew. ksišżka jakaś?
Ksišżka jest napisana (przez wykładowcę Politechniki ślšskiej), seria
"próbna" koło 100 egzemplarzy już wyszła. Prawdziwe wydanie jest w
przygotowaniu. Jak tylko się pojawi będę o tym informował na Forum.
--
Polskie Forum Microchipa
http://www.ekiert.com/microchip/
:wq
From: Andrzej Ekiert <treike_at_nospam_zeus.polsl.gliwice.pl>
Subject: Re: Asembler PIC`a
Date: Wed, 08 May 2002 21:35:02 +0200
Michał Sz. wrote:
A ja zapytam czy jest gdzies w sieci jakiś board w ojczystym jezyku gdzie
porusza się problemy z np. PIC-ami
Ej, to jest pytanie do mnie !
(patrz niżej)
--
Polskie Forum Microchipa
http://www.ekiert.com/microchip/
:wq
From: Grzegorz Redlarski <gred_at_nospam_kki.net.pl>
Subject: Re: Asembler PIC`a
Date: Thu, 09 May 2002 01:07:19 +0200
Tue, 07 May 2002 21:54:29 GMT Marek Lewandowski
<nospam_at_nospam_poczta.onet.pl> napisal:
~Filut~ wygenerował manualnie w wiadomości <ab99q1$em6$1_at_nospam_news.tpi.pl>
udostępnionej publicznie dnia Tue, 7 May 2002 21:27:23 +0200 co
następuje:
Co oznaczajš instrukcję typu "goto $+1" - domyślam się, ale wolę się zapytać
stawiam na skok do instrukcji pod adresem o 1 większym od aktualnej
wartości PC (PC wskazuje na najbliższš następnš komendę, czyli będzie
to po prostu "skip")
Problem w tym, co znaczy "aktualnej". AFAIK dla procesorów przyjmuje
się na ogół, że PC zwiększa się (odpowiednio do długości instrukcji)
przed wykonaniem instrukcji, czyli PC ma wartość po pobraniu
instrukcji (wskazuje na kolejnš). Dla asemblera "aktualny" oznacza
zwykle stan PC przed odczytaniem instrukcji. Tak więc np. dla '51
sjmp $ ;nieskończona pętla
zostanie przetłumaczone na cišg bajtów: 80h, -2
Jeśli dla PIC-a jest tak samo, to "goto $+1" będzie znaczyło tyle co
NOP, ale wykona się 2x wolniej.
Dla '51 "ljmp $+1" byłoby skokiem w środek instrukcji - wykona się
instrukcja o kodzie, którym będzie drugie słowo instrukcji (pierwszy
bajt adresu skoku), czyli to co zostanie zrobione, będzie zależało od
tego, w którym miejscu programu znalazła się ta instrukcja.
Przyznam się, że kiedyś popełniłem podobny błšd. Tak się trafiło, że
ta "wylosowana" instrukcja w niczym nie przeszkadzała i program
działał prawidłowo. Wysypał się po wstawieniu jednej instrukcji
w_zupełnie_innym miejscu programu.
gr
From: JS <jar0sz_at_nospam_polbox.com>
Subject: Re: Asembler PIC`a
Date: Thu, 9 May 2002 20:38:09 +0000 (UTC)
W artykule <nmbjdu84uddt0ivrhe9upf8b8idt2ndm8u_at_nospam_news.tpi.pl>
Grzegorz Redlarski napisał:
Jeśli dla PIC-a jest tak samo, to "goto $+1" będzie znaczyło tyle co
NOP, ale wykona się 2x wolniej.
Dla '51 "ljmp $+1" byłoby skokiem w środek instrukcji - wykona się
instrukcja o kodzie, którym będzie drugie słowo instrukcji (pierwszy
bajt adresu skoku), czyli to co zostanie zrobione, będzie zależało od
tego, w którym miejscu programu znalazła się ta instrukcja.
MZ takie zapisy sš trochę nieeleganckie. Lepiej użyć etykiety:
err_stop: bra err_stop ; i wszystko jasne :)
Przynajmniej nie trzeba pamiętać, ile bajtów ma bra (2).
Acha, przykład (dużo powiedziane ;)) jest na HC11, bo w miarę możliwości
staram się trzymać z dala od '51.
--
Pozdrawiam
Jarosław Szynal
From: "jerry1111" <jerry1111_at_nospam_wp.pl>
Subject: Re: Asembler PIC`a
Date: Fri, 10 May 2002 10:38:08 +0200
Acha, przykład (dużo powiedziane ;)) jest na HC11, bo w miarę możliwości
staram się trzymać z dala od '51.
Oooooo!!!!
Witam kolege o podobnych pogladac ;)))
jerry
From: Grzegorz Redlarski <gred_at_nospam_amg.gda.pl>
Subject: Re: Asembler PIC`a
Date: Fri, 10 May 2002 12:25:28 +0200
On Thu, 9 May 2002 20:38:09 +0000 (UTC), JS <jar0sz_at_nospam_polbox.com> wrote:
Jeśli dla PIC-a jest tak samo, to "goto $+1" będzie znaczyło tyle co
NOP, ale wykona się 2x wolniej.
Dla '51 "ljmp $+1" byłoby skokiem w środek instrukcji - wykona się
[...]
MZ takie zapisy sš trochę nieeleganckie. Lepiej użyć etykiety:
err_stop: bra err_stop ; i wszystko jasne :)
Elegancja, to kwestia gustu. Przybywa etykiet co ma swoje wady.
Ponadto, taki "$" przydaje się w makrodefinicjach.
Przynajmniej nie trzeba pamiętać, ile bajtów ma bra (2).
Pamiętać nie trzeba, bo to kompilator wylicza. Wyjaśniłem to w
poprzednim poście.
gr
From: JS <jar0sz_at_nospam_polbox.com>
Subject: Re: Asembler PIC`a
Date: Mon, 13 May 2002 16:11:19 +0000 (UTC)
W artykule <abemnh$5af$1_at_nospam_news.tpi.pl> JS napisał:
Acha,
-Ach! Ale wpadka ...
-Aha.
--
Pozdrawiam
Jarosław Szynal
From: "Greg S." <greg_sz_at_nospam_dsuper.net>
Subject: Re: Asembler PIC`a
Date: Thu, 09 May 2002 12:09:53 -0400
~Filut~ wrote:
Co oznaczajš instrukcję typu "goto $+1" - domyślam się, ale wolę się zapytać
Poniżej przykładowy kod:
$ to aktualny adres licznika adresow (PC - PRogram Counter)
adres poczatku biezacej intrukcji.
standard w prawie wszystkich assemblerach na prawie wszystkie procesory
czasem tez $ jest prefiksem do danych heksadecymalnych ale wtedy po $ sa cyfry
hex.
Ciao
Grze..Szy..
From: Grzegorz Redlarski <gred_at_nospam_amg.gda.pl>
Subject: Re: Asembler PIC`a
Date: Fri, 10 May 2002 12:25:28 +0200
On Thu, 09 May 2002 12:09:53 -0400, "Greg S." <greg_sz_at_nospam_dsuper.net>
wrote:
$ to aktualny adres licznika adresow (PC - PRogram Counter)
adres poczatku biezacej intrukcji.
Dla DSP Motoroli (ASM56000) zamiast "$" jest "*", ale to jeden z chyba
bardzo nielicznych wyjštków.
standard w prawie wszystkich assemblerach na prawie wszystkie procesory
czasem tez $ jest prefiksem do danych heksadecymalnych ale wtedy po $ sa cyfry
hex.
No i w wyżej wspomnianym asemblerze $ służy właśnie do hex.
gr
From: "Greg S." <greg_sz_at_nospam_dsuper.net>
Subject: Re: Asembler PIC`a
Date: Mon, 13 May 2002 23:43:44 -0400
Grzegorz Redlarski wrote:
Dla DSP Motoroli (ASM56000) zamiast "$" jest "*", ale to jeden z chyba
bardzo nielicznych wyjštków.
Pamietam kiedys programowalem w Assemblerze na duze komputery IBM 360/370 i Riad to
tez chyba * byla bizacym adresem. A jak IMB co wymyslil to juz byl standard. Tak
wiec pewnie jeszcze wiele innych to stosowalo.
Pozdro
Grze..Szy..