Instrukcja 'goto $+1' w Asemblerze PIC - Co to oznacza w praktyce?

Asembler PIC`a





Poprzedni Następny
Wiadomość
Spis treści
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




Poprzedni Następny
Wiadomość
Spis treści
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. !]

Poprzedni Następny
Wiadomość
Spis treści
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ł



Poprzedni Następny
Wiadomość
Spis treści
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


Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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



Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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




Poprzedni Następny
Wiadomość
Spis treści
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


Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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..


Poprzedni Następny
Wiadomość
Spis treści
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


Poprzedni Następny
Wiadomość
Spis treści
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..