memory...

0

Witam.
Mam po prostu metlik w glowie:)
ma taki kodzik w C (pod dosa)

int main()
{
int a = 5;
cout << &a;
getch();
return 0;
}

Nie robi on nic inego jak wyswietla adres zmiennej a. Za kazdym razem(przynajmniej na moim kompie) jest to 1245064. Tak wiec postanowilem sobie odczytac wartosc owej komorki 1245064. Oczywiscie pomijajactaki trywialny sposob jak:

{
int a = 5, *b;

cout << &a << endl;
b = &a;
cout << *b;
getch();
return 0;
}

Po prostu chcialbym miec taka funkcje, ktora pozwolilaby mi odczytac wartosc dowolnej komorki pamieci. Tak wiec postanowilem szukac szczescia w assemblerze...

...ale po przypomnieniu sobie tematu o pamieci komutera okazalo sie, napotkalem na bardzo powazna niezgodnosc:( Otoz jak juz wyzej wspomnialem moja zmienna ma zarezerwowany obszar pamieci 1245060 - 1245064(12FF88h) a z informacji na stronie
http://student.uci.agh.edu.pl/~mikopec/kurs/indeks.html rozdzial pamięć wynika, ze moge zapisywac/odczytywac informacje tylko w obrebie jednego 1MB (1048557 bajtow - FFFFFh). Tak wiec o co chodzi?
Pytania:

  1. Moja zmienna jest poza pamiecia tego 1MB w ktorym moge zapisywac/odczytywac informacje?
  2. Za pomoca jakiej funkcji moge odczytac wartosc tej komorki (1245064) oraz kazdej innej?
  3. O co w tym wszystkim chodzi?

BTW. Mile widziane wszelkiego rodzaju sprostowania i wyjasnienia:)

0

Nie wiem, jak z zapisywaniem, al odczytywać możesz z dowolnego miejsca.
int main(){
unsigned int a,b;
b=0;
b--;
for (a=0; a<b; a++) {
if(a % 1920 == 0) getch(); // 1920 to 80x24 czyli rozmiar ekranu
cout << a
;
}
return 0;
}
Program bedzie zapełniał cały ekran zawartością pamięci, i czekał na klawisz, potem wypisując kolejną część. to b-- to jak masz uint, to da ci największego inta.

0

Jeżeli chodzi o assembler to ten jeden MB to jest base memory, jeżeli chcesz odwołać się do prawdziwej pamięci RAM to musisz użyć sterownika XMS np himem.sys

0

A może tak:

{
int a = 5, *b;

cout << &a << endl;
b = 1245064;
cout << *b;
getch();
return 0;
}

Tylko nie wiem, czy wymaga to rzutowania :) Ale to sobie chyba sprawdzisz :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1