Inicjalizacja segmentów pamięci w Keil: dlaczego tablica Matrixes jest pusta?
inicjacja segmentow
From: "mud" <mr_mud_at_nospam_poczta.onet.pl>
Subject: inicjacja segmentow
Date: Tue, 30 Oct 2001 10:12:44 +0100
Cze!
Pisalem na pl.misc.elektronika o keil`u: "Jak "wkrecia" asemblera do c ...".
Udalo mi sie to zrobic, ale powstal problem z inicjacja pamieci:
w kodzie C mam:
const unsigned int
Matrixes[12]=
{0x5654,0xaa58
,0x5994,0x6954,0xa558,0x6564,0x5564,0xaa54,0x5554,0x6554,0x5554,0xaaa8};
w asmie po kompilacji:
RSEG ?DT?MAIN ;segment data
Matrixes: DS 24
.
.
.
RSEG ?C_INITSEG ;segment code
DB Matrixes
DW 05654H
DW 0AA58H
DW 05994H
DW 06954H
DW 0A558H
DW 06564H
DW 05564H
DW 0AA54H
DW 05554H
DW 06554H
DW 05554H
DW 0AAA8H
czyli wartosc tablicy. I tu powstaje pytanie: kompilator rezerwuje pamiec w
segemencie data, a pozniej inicjuje ja danymi w segmencie code???
W debug`u Matrixes wskazuje na adres pod ktorym sa same zera. Dlaczego tak
sie dzieje? Czy mozna bezpiecznie przeniesc ta tablice do segemntu codu z
poziomu C?
Moj label startowy wyglada tak:
$DEBUG
;eksporty:vector startowy
public ?C_STARTUP
;importy:funkcja startowa
EXTRN CODE (main)
;reset
org 0x00
?C_STARTUP:
LJMP main
end
From: "megaraptor" <megaraptor_at_nospam_wp.pl>
Subject: Re: inicjacja segmentow
Date: Tue, 30 Oct 2001 11:20:47 +0100
Użytkownik mud <mr_mud_at_nospam_poczta.onet.pl> w wiadomości do grup dyskusyjnych
napisał:9rlqng$lqg$1_at_nospam_news.tpi.pl...
Cze!
Pisalem na pl.misc.elektronika o keil`u: "Jak "wkrecia" asemblera do c
...".
Udalo mi sie to zrobic, ale powstal problem z inicjacja pamieci:
w kodzie C mam:
const unsigned int
Matrixes[12]=
{0x5654,0xaa58
,0x5994,0x6954,0xa558,0x6564,0x5564,0xaa54,0x5554,0x6554,0x5554,0xaaa8};
w asmie po kompilacji:
RSEG ?DT?MAIN ;segment data
Matrixes: DS 24
.
.
.
RSEG ?C_INITSEG ;segment code
DB Matrixes
DW 05654H
DW 0AA58H
DW 05994H
DW 06954H
DW 0A558H
DW 06564H
DW 05564H
DW 0AA54H
DW 05554H
DW 06554H
DW 05554H
DW 0AAA8H
czyli wartosc tablicy. I tu powstaje pytanie: kompilator rezerwuje pamiec
w
segemencie data, a pozniej inicjuje ja danymi w segmencie code???
W debug`u Matrixes wskazuje na adres pod ktorym sa same zera. Dlaczego tak
sie dzieje? Czy mozna bezpiecznie przeniesc ta tablice do segemntu codu z
poziomu C?
Moj label startowy wyglada tak:
$DEBUG
;eksporty:vector startowy
public ?C_STARTUP
;importy:funkcja startowa
EXTRN CODE (main)
;reset
org 0x00
?C_STARTUP:
LJMP main
end
Jeżeli chcesz umieścić tablice w pamięci kodu:
int code tablica[12] = ........
Możesz zrobić sobie wskażnik do tablicy w pamięci kodu, który to będzie
przechowywany w pamięci data:
int code* data wskaznik;
Jest to wskażnik do danej typu int umieszczonej w pamięci kodu. Ale sam
wskażnik przechowywany jest w pamięci typu data.
Natomiast zainicjowana tablica umieszczona w pamięci data,xdata,idata,pdata
zawsze musi być inicjowana z segmentu kodu.
Pozdrawiam
D.D.
From: "mud" <mr_mud_at_nospam_poczta.onet.pl>
Subject: Re: inicjacja segmentow
Date: Tue, 30 Oct 2001 13:23:40 +0100
to co zrobic ze zmienna static w funkcji?
From: "megaraptor" <megaraptor_at_nospam_wp.pl>
Subject: Re: inicjacja segmentow
Date: Tue, 30 Oct 2001 13:30:00 +0100
Użytkownik mud <mr_mud_at_nospam_poczta.onet.pl> w wiadomości do grup dyskusyjnych
napisał:9rm5vh$g7d$1_at_nospam_news.tpi.pl...
to co zrobic ze zmienna static w funkcji?
Co innego jest typ const a co innego static.
O ile dobrze pamiętam typ static zabezpiecza przed ponowną inicjacją
zmiennej.
jeżeli po wyjściu z funkcji zmienna przyjmie np. wartosć 4 to po ponownym
wywołaniu
funkcji zmienna ma tę samą wartość jaką miała po jej poprzednim opuszczeniu.
Chyba dobrze pamiętam.
D.D.
From: Ireneusz Niemczyk <i.niemczyk_at_nospam_multispedytor.com.pl>
Subject: Re: inicjacja segmentow
Date: Tue, 30 Oct 2001 14:53:20 +0100
Panowie, na temat inicjacji dosyć wiarygodny opis znajdziecie na
http://encyklopedia.pwn.pl/30313_1.html :-)
--
PZD, Irek.N.
mspanc
From: "megaraptor" <megaraptor_at_nospam_wp.pl>
Subject: Re: inicjacja segmentow
Date: Tue, 30 Oct 2001 14:54:59 +0100
Użytkownik Ireneusz Niemczyk <i.niemczyk_at_nospam_multispedytor.com.pl> w wiadomości
do grup dyskusyjnych napisał:3BDEB0D0.96D5D9F5_at_nospam_multispedytor.com.pl...
Panowie, na temat inicjacji dosyć wiarygodny opis znajdziecie na
http://encyklopedia.pwn.pl/30313_1.html :-)
--
> PZD, Irek.N.
> mspanc
Hehehe. O tym to ja wiem. Tylko co mam napisać ? Jak już gość tak zaczął to
niech mu będzie.
Pozdrawiam.
D.D.
From: "mud" <mr_mud_at_nospam_poczta.onet.pl>
Subject: Re: inicjacja segmentow
Date: Wed, 31 Oct 2001 13:07:50 +0100
anyway thx!
Użytkownik Ireneusz Niemczyk <i.niemczyk_at_nospam_multispedytor.com.pl> w wiadomości
do grup dyskusyjnych napisał:3BDEB0D0.96D5D9F5_at_nospam_multispedytor.com.pl...
Panowie, na temat inicjacji dosyć wiarygodny opis znajdziecie na
http://encyklopedia.pwn.pl/30313_1.html :-)
--
> PZD, Irek.N.
> mspanc
>