eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaNauka programowania od czego zacząć?Re: Nauka programowania od czego zacząć?
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!uni-berlin.de!not-for-mail
    From: Waldemar Krzok <w...@z...fu-berlin.de>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Nauka programowania od czego zacząć?
    Followup-To: pl.misc.elektronika
    Date: Wed, 21 Sep 2011 20:55:57 +0200
    Organization: Freie Universitaet Berlin
    Lines: 97
    Message-ID: <9...@m...uni-berlin.de>
    References: <5...@n...onet.pl> <j4vkb2$bgr$1@opal.futuro.pl>
    <j55bji$ile$1@inews.gazeta.pl> <j55jmj$r4h$1@opal.futuro.pl>
    <j55lt4$lis$1@inews.gazeta.pl> <j55ra9$mes$1@news.onet.pl>
    <j563sb$o9o$2@inews.gazeta.pl> <j575tk$kuj$1@news.onet.pl>
    <j5782t$mg9$1@inews.gazeta.pl> <j57q92$pcu$1@news.onet.pl>
    <j592ta$lv5$1@inews.gazeta.pl> <j59qr8$2qa$1@news.onet.pl>
    <j5ajeq$407$1@inews.gazeta.pl> <j5ale3$gjl$1@news.onet.pl>
    <9...@m...uni-berlin.de> <j5cm6m$isn$1@news.onet.pl>
    <9...@m...uni-berlin.de> <j5ctjp$brc$1@news.onet.pl>
    Mime-Version: 1.0
    Content-Type: text/plain; charset="ISO-8859-2"
    Content-Transfer-Encoding: 8Bit
    X-Trace: news.uni-berlin.de
    XK5jXY8K+OP4bT1+TMLn3Q3pglMgvmZe5DfNYSwyh6K1wTcktIOZS0LZ3E
    Cancel-Lock: sha1:Fo4Tm3Nim9xdzQZVXn4+4MOUBME=
    User-Agent: KNode/4.4.10
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:617979
    [ ukryj 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: