eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaNauka programowania od czego zacząć?Re: Nauka programowania od czego zacząć?
  • Data: 2011-09-21 18:55:57
    Temat: Re: Nauka programowania od czego zacząć?
    Od: Waldemar Krzok <w...@z...fu-berlin.de> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Marcin Wasilewski wrote:

    > Użytkownik "Waldemar Krzok" <w...@z...fu-berlin.de> napisał w
    > wiadomości news:9du5jlFhnpU6@mid.uni-berlin.de...
    >
    >> No trochę tu przesadzasz, no i definiujesz znów niedokładnie. Napisałeś
    >> że znasz różnicę deklaracji od definicji, ale jakoś zanika ta wiedza
    >> zaraz potem.
    >
    >> Assembler i język wysokiego poziomu są prawie równoważne (język WP da się
    >> sprowadzić do assemblera, na odwrót niekoniecznie).
    >
    > Nie no bez jaj. To co wykonuje procesor to kod maszynowy, assembler
    > polega głównie na tym, że zamiast wpisywać np. $FFFF to wpisujesz NOP,
    > itd. Skolei procesor to taka zaawansowana technologicznie maszyna stanów,
    > gdzie kolejne sekwencje zer i jedynek wyzwalają dany stan.
    > Tak więc wszystko MUSI się dać sprowadzić do kodu maszynowego bo TYLKO to
    > potrafi wykonać procesor. A zatem da się też zapisać w postaci programu w
    > assemblerze. Nazywa się to disassemblacją i istnieje do tego wiele
    > programów robiących to mniej lub bardziej automatycznie.
    >
    > http://pl.wikipedia.org/wiki/Deasembler
    >
    >> czego wynika, że w assemblerze istnieją zmienne. Deklaracja takowej
    >> zmiennej to przydzielenie jej pamięci (czy z "naklejką", czy bez to nie
    >> gra roli), definicja to wpisanie do tego obszaru pamięci jakiejś
    >> wartości. Inicjacja to wariant definicji i też w assemblerze jest do
    >> zrobienia w trakcie kompilacji lub, jak piszesz z wewnątrz programu.
    >
    > To proszę bardzo wklej mi kawałek kodu w assemblerze równoważny temu:
    >
    > if (a==b)
    > {
    > int c=5;
    > };
    >
    > Tu nie chodzi o to, że w assemblerze możesz sobie napisać:
    >
    > zmienna dc 10
    >
    > Tylko abyś mógł tą zmienną stworzyć z poziomu kodu.
    >
    > Powiem Ci jak to działa w C. Program wynikowy w C posiada kod inicjujący,
    > który m.in
    > przydziela pamięć na tzw. stertę (heap) i to w niej tworzy zmienne
    > globalne (zmienne lokalne tworzone są na stosie). Tylko, że potrafi to
    > robić w miarę wykonywania programu. Zmienne mogą w tej stercie pojawiać
    > się i znikać w czasie działania programu. W zależności od przebiegu
    > programu mogą nie pojawić się wcale. W przypadku gdy miejsce na stercie
    > się kończy, kod odpowiedzialny za kontrolę tego potrafi dla sterty
    > przydzielić dodatkową pamięć. Podczas inicjowania tablic potrafi na nią
    > przydzielić dynamicznie pamięć.
    >
    > W assemblerze podczas assemblacji tworzone są tzw. chunki "code" (z
    > kodem dla procesora), "data" blok ze zdefiniowanymi danymi. Oraz czasami
    > chunk z danymi nt. zarezerwowanych obszarów, które są rezerwowane z
    > poziomu systemu (dletego, że nie ma sensu aby w pliku był obecny fizycznie
    > obszar 1024K zawierający same zera). I to wszystko. Te bloki są statyczne
    > - powstają wraz z uruchomieniem programu i istnieją do momentu aż ten
    > program się przestanie wyknywać. To co wielu nazywa zmienną w assemblerze
    > to właśnie taki kawałek pamięci.
    >
    > Różnica jest taka, że kod wynikowy w C podczas wykonywania programu
    > dynamicznie takie zmienne inicjuje, czy też deallokuje. W assemblerze to
    > jest zdefiniowany blok pamięci z danymi i nic więcej.
    >
    > I naprawdę mam już dosyć tematu. Jeśli ktoś nadal uważa, że assembler
    > potrafi operować na zmiennych, to OK. Jego sprawa. Ci którzy pojmują, że
    > assembler to język niskiego poziomu zdają sobie sprawę, że assembler
    > obsługuje tylko to co potrafi obsłużyć dany procesor, gdyż jest zależny od
    > sprzętu. Wszelkie makra, etykiety itp. służą tylko temu aby ułatwić życie
    > programiście, gdyż tak naprawdę zamiast etykiet, można by było podawać od
    > razu adresy w pamięci.
    >
    > Języki wyższego poziomu posiadają pewną warstwę abstrakcji i nie
    > opisują
    > bezpośrednio sprzętu.
    > Za to odpowiedzialne są kompilatory, które zamieniają składnię języka na
    > kod zrozumiały dla procesora, dodając m.in. kod inicjujący, kontrolny i
    > końcowy. Osobną grupą są interpretery (np. wiele języków z rodziny BASIC,
    > ale też np. PHP), które nie są kompilowane, a wykonywanie programu polega
    > na interpretacji kodu źródłowego, przez specjalny interpreter który jest
    > niezbędny do uruchomienia programu.


    Tak dla informacji: studiowałem m.in. informatykę, a tam budowę
    kompilatorów. Również napisałem (co prawda prosty ale mimo to) kompilator na
    zaliczenie jak i disassembler i pisałem i stosowałem.
    To, co ty napisałeś może być faktycznie zadeklarowane na heap-ie, ale też na
    stacku. Dynamiczne int c = 5 może być zaimplementowane w tym przypadku w
    assemblerze jako mov 4[bp],ax. Zmienne statyczne na heapie, też warunkowo
    deklarowane, są najczęściej rezerwowane za pomocą funkcji alloc systemu
    operacyjnego.

    Waldek
    --
    My jsme Borgové. Sklopte štíty a vzdejte se. Odpor je marný.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: