avr-gcc, wstawki asemblerowe



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "gr" <mc_at_nospam_brak.pl>
Subject: avr-gcc, wstawki asemblerowe
Date: Tue, 14 Jun 2005 05:51:44 +0200



Mam tablice:
unsigned char *P;
i chcialbym przebiec po niej wskaznikiem Z, ale nie potrafie podstawic
wskaznika tablicy pod rejestr. Probuje to zrobic tak:
asm (" ldi r30, P ");
No ale zostaje jeszcze starszy byte adresu tablicy P, ktory trzeba podstawic
pod r31.Czy ktos wie jak to zrobic ? Probowalem rowniez tak:
asm (" ldi r30, low(P) ");
asm (" ldi r30, high(P) ");
...ale kompilator nie wie co to low i high.

pozdrawiam
gr



Poprzedni Następny
Wiadomość
Spis treści
From: "dziadek Ben" <ja44_at_nospam_op.pl>
Subject: Re: avr-gcc, wstawki asemblerowe
Date: Tue, 14 Jun 2005 19:13:33 +0200


asm (" ldi r30, low(P) ");
asm (" ldi r30, high(P) ");
...ale kompilator nie wie co to low i high.

Strzelam:
a może by tak?
asm (" ldi r30,#low(P) ");
asm (" ldi r30,#high(P) ");

dziadek Ben



Poprzedni Następny
Wiadomość
Spis treści
From: "Piotrek Sz." <zumek.WYTNIJ_at_nospam_gazeta.pl>
Subject: Re: avr-gcc, wstawki asemblerowe
Date: Tue, 14 Jun 2005 18:35:31 +0000 (UTC)


dziadek Ben <ja44_at_nospam_op.pl> napisał(a):

..
Strzelam:
a może by tak?
Ja też ;)
asm("ldi r30,lo8(P)");
asm("ldi r30,hi8(P)");

Piotrek

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Poprzedni Następny
Wiadomość
Spis treści
From: "Piotrek Sz." <zumek.WYTNIJ_at_nospam_gazeta.pl>
Subject: Re: avr-gcc, wstawki asemblerowe
Date: Tue, 14 Jun 2005 18:35:46 +0000 (UTC)


dziadek Ben <ja44_at_nospam_op.pl> napisał(a):

..
Strzelam:
a może by tak?
Ja też ;)
asm("ldi r30,lo8(P)");
asm("ldi r31,hi8(P)");

Piotrek

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Poprzedni Następny
Wiadomość
Spis treści
From: Zbych <abuse_at_nospam_onet.pl>
Subject: Re: avr-gcc, wstawki asemblerowe
Date: Tue, 14 Jun 2005 21:05:34 +0200


gr wrote:

Mam tablice:
unsigned char *P;
i chcialbym przebiec po niej wskaznikiem Z, ale nie potrafie podstawic
wskaznika tablicy pod rejestr. Probuje to zrobic tak:
asm (" ldi r30, P ");
No ale zostaje jeszcze starszy byte adresu tablicy P, ktory trzeba podstawic
pod r31.Czy ktos wie jak to zrobic ?

Lepiej będzie jak napiszesz całą funkcję w asemblerze i przekażesz do
niej wskaźnik jako parametr. Przy takim kodzie jak podałeś, to nawet nie
ma pewności, czy wskaźnik będzie fizycznie istniał w jakiejkolwiek
komórce pamięci, rejestrze. Np. taki kod

P=(unsigned char *)128;
*(++P)=8;
*(++P)=9;

daje w wyniku (przy optymalizacji na rozmiar):
.LM4:
ldi r24,lo8(8)
sts 129,r24
.LM5:
ldi r24,lo8(9)
sts 130,r24

czyli wskaźnik tak naprawdę nie istnieje :-), a na pewno nie jest
przekazywany asemblerowi jako stała P, tylko jako liczba i nie bardzo
można użyć wyrażenia lo8/hi8(P).