Nauka programowania od czego zacząć?

In the darkest hour on Mon, 19 Sep 2011 18:40:15 +0200, Marcin Wasilewski snipped-for-privacy@adres.pl screamed:

Z80 też.

loop: [...] DJNZ loop

W przypadku wyżej zmniejsza B o 1 i skacze do loop jeśli B nie zawiera zera.

Reply to
Artur M. Piwko
Loading thread data ...

In the darkest hour on Mon, 19 Sep 2011 21:08:50 +0200, RoMan Mandziejewicz snipped-for-privacy@pik-net.pl screamed:

A taki C128 całkiem niezły BASIC już miał w ROM-ie (w odróżnieniu od C64).

Reply to
Artur M. Piwko

Użytkownik J.F napisał:

To zależy, nigdy nawet nie rozważałem czegoś takiego jak wyjazd z rodzinnego miasta o innym kraju nie wspominając, nie przykładałem się do nauki języków (czego obecnie żałuję), to co umiałem zostało mi z jednego roku zajęć dodatkowych w podstawówce jakieś 25 lat wcześniej plus gigabajty przeczytanych dokumentacji technicznych datasheetów, linuxowych manuali, obsługa pierwszych systemów komputerowych które były wyłącznie angielskie. Więc czytam, piszę, od biedy się dogaduję. Pierwsze słowa jakie usłyszałem to był szok bo było to zupełnie inne od tego co uczą w szkole, żeby kupić bilet autobusowy nazwę miejscowości musiałem napisać bo nie umiałem poprawnie jej wymówić. Ogólnie komunikatywny był bo test telefoniczny zdałem ale nadal jest kiepsko bo tu gdzie jestem używają cholernie bełkotliwego dialektu do którego nie umiem się dostosować (świetnie mi idzie po paru głębszych).

Akurat kontaktu z klientem nie mamy, wszelkie poważne firmy mają do tego ludzi którzy nie są techniczni ale za to są uprzejmi, ciągle się uśmiechają i ładnie wyglądają, pozory i wizerunek to najważniejsze w tym kraju.

Nie całkiem, ktoś kto dopiero przyjechał do UK takiej roboty nie dostanie (może poza pubem), za dużo specyficznych spraw z których istnienia nie zdawałby sobie sprawy, po ok 2-ch latach - ma szanse.

Jest masa sklepów polskich, znajomy z pracy opowiadał że był w jednym z kolegą irakijczykiem i ten chciał kupić kiełbasę co wyraził po angielsku do sprzedawczyni, babeczka zdębiała, nie zna ani słowa po angielsku.

Bardzo popularny tu jest outsourcing, nawet agencje rządowe tego używają do cięcia kosztów (tak, tu rząd potrafi oszczędzać, a wszelkie(?) machloje wyłażą na wierzch nawet jak są to niewielkie kwoty) więc używają prywatnych firm do tłumaczeń czy to osobiście czy przez telefon (wiem, używałem parokrotnie).

[...]

Pożyjemy zobaczymy, jak będzie szansa na porównywalne zarobki w porównywalnych warunkach a ja nadal będę wśród żywych to rozważę powrót.

Reply to
AlexY

Użytkownik "Remek" snipped-for-privacy@gmail.com napisał w wiadomości news:j592ta$lv5$ snipped-for-privacy@inews.gazeta.pl...

Naucz się najpierw wklejać linki tak aby się nie łamały, to sobie poczytam. Jak nie wiesz jak to zrobić to daj znać. Chętnie Ci wyjaśnię.

Ze zmiennymi ma to niewiele wspólnego, z jednego powodu - procesor rozumie tylko jedną rzecz - dane, w zależności od procesora mogą mieć różną długość, ale są to tylko dane.

Jakbyś tego nie nazwał i jak by tego nie nazwano w dokumentacji, z definicji zmiennej wynika, że jest to conajmniej nazwa+miejsce na dane. W assemblerze to co nazywasz zmienną może nie mieć wcale nazwy, a może mieć nadane naście etykiet. A jak się w assemblerze odwołujesz do czegoś w następujący sposób:

nazwa+8,

to niby do czego się odwołujesz? Do zmiennej o nazwie "nazwa", czy też do adresu oznaczonego etykietą "nazwa" powiększonego o 8?

Przeczytaj sobie to i odpowiedz na pytania ile to ma wspólnego z jak to nazywasz "zmienną w assemblerze":

formatting link
Szczególnie o zasięgu, czasie życia i widoczności.

A tak zdroworozsądkowo napisz w assemblerze kod, który po spełnieniu jakiegoś warunku utworzy Ci zmienną. Ale nie z poziomu bloków warunkowych dyrektyw assemblacji, tylko z poziomu kodu.

Np. jeśli jak to nazywasz zmienna o nazwie "test" przyjmie wartość 8, zdefiniuj z poziomu programu w assemblerze zmienną "test2". Co, nie da się?

A tu masz coś na temat stałej, bo z tym też masz problem:

formatting link
Stała jest często mylona z literałem, który jest zapisem danej wartości w danym punkcie programu. Także dyrektywa #define w językach C i C++ nie jest stałą, lecz poleceniem dla preprocesora aby ten odpowiednio zmodyfikował tekst kodu źródłowego przed przekazaniem go kompilatorowi - czyli zastąpił odpowiednią nazwę odpowiadającym jej tekstem.

I na koniec to:

formatting link
Jak widzisz w assemblerze nie ma stałych i zmiennych a właśnie takie literały, które są zamieniane na adresy pamięci podczas assemblacji. Z poziomu programu w assemblerze zmiennej ani nie utworzysz, ani usuniesz, bo ich zwyczajnie nie ma.

Reply to
Marcin Wasilewski

W dniu 2011-09-20 01:42, Jacek Radzikowski pisze:

a tam tak daleko szukać. Wystarczy że się anglik z południa zaplącze na prowincję w Northumbrii i też może mieć poważne problemy ze zrozumieniem co do niego mówią..

Reply to
Michał Baszyński

Użytkownik "Marcin Wasilewski" napisał:

Pouczaj twórcę klienta pocztowego, którego uzywam. Niech tak zrobi program, aby nie łamał linków. Mnie to g ... obchodzi. Zresztą z takiego linka tez można skorzystać. Nie wiedziałes?

długość,

A Ty uparcie swoje brednie. Czy ja pisałem co rozumie procesor??? Pisałem o terminologii języka asemblera. Jesteś tępakiem. Przykro mi. Lądujesz w KF i już możesz nie odpisywać.

Remek

Reply to
Remek

Użytkownik "Remek" snipped-for-privacy@gmail.com napisał w wiadomości news:j5ajeq$407$ snipped-for-privacy@inews.gazeta.pl...

W OE też się to da zrobić, ale jak to napisałeś poniżej "tępak" taki jak ty tego nie zrozumie.

Tak samo jak i ze zmiennej w assemblerze. Jak się poskleja to pewnie i można. Tylko, że to jest brak kultury w stosunku do odbiorcy.

No widzisz i dalej nie zrozumiałeś, że assembler to język programowania który operuje bezpośrednio na logice sprzetu. Nie może umożliwiać pracy ze zmiennymi, jeśli procesor tego nie potrafi.

Idź na informatykę i nabierz trochę szerszego spojrzenia, to może pewne rzeczy zauważysz i to ty... przestaniesz być tępakiem.

A co argumenty się skończyły? Okazało się, że jednak w assemblerze nie da się utworzyć zmiennej z poziomu programu? No patrz, a w każdym języku programowania posiadającym obsługę zmiennych jest to bezproblemowe. Ciekawe, czemu w assemblerze się tego nie da zrobić.

Reply to
Marcin Wasilewski

W dniu 16.09.2011 09:44, John Smith pisze:

W repozytoriach ubuntu i debiana (testing) jest TurtleART inspirowany logo.

Dyfer

Reply to
Dyfer

Użytkownik "Marcin Wasilewski" snipped-for-privacy@adres.pl napisał w wiadomości news:j5ale3$gjl$ snipped-for-privacy@news.onet.pl...

Dlaczego uważasz, że to miliony użytkowników programów pocztowych powinny się uczyć jak wklejać linki, a nie powinien tego raz załatwić jego autor ? Według mnie obecnie obowiązująca koncepcja oprogramowania przeznaczonego do użytkowania przez wszystkich (za takie uważam programy pocztowe) zakłada intuicyjność użycia, a nie konieczność wcześniejszego zaliczenia odpowiedniego szkolenia. Akurat w przypadku takich programów brak zaliczenia takiego szkolenia nie powinien być traktowany jako brak kultury (brak wiedzy nie równa się brakowi kultury). Jeśli skopiowany ze schowka link wygląda nie połamany to zakładanie, że intuicja powinna użytkownikowi podpowiedzieć, żeby nie wierzył temu, co widzi, świadczy jednoznacznie o inteligencji czyniącego takie założenie. Nie wiem kiedy w Windows (Linuksa nie znam) wymyślono kopiowanie przez schowek. Było chyba dość czasu, aby każdy program klienta pocztowego potrafił obecnie rozpoznać, że to, co wkłada to link (zresztą rozpoznaje bo wyróżnia) i wstawił go tak, aby się nie łamał. Aby nie było niejasności. Nie wiem jak wkleić inaczej niż normalnie kopiując. Może raz na rok zdarza mi się wkleić jakiś ciut dłuższy link. Skąd mam wiedzieć który się już połamie? Mam podejrzenie, że jakbym nawet doszedł do tego to przy następnej potrzebie za rok będę musiał dochodzić do tego od nowa. Mam inne rzeczy na które powinienem przeznaczać czas, a nie na obchodzenie według mnie oczywistej niedoróbki programu. P.G.

Reply to
Piotr Gałka

Użytkownik Marcin Wasilewski napisał: [..]

Zmienną tworzy programista w komórce (obszarze) pamięci (zapisywalnej z poziomu wykonywanego programu) którą sobie wybierze. Taka specyfika assemblera i nie ma co tu się rozwodzić nad wyższością jednego języka czy drugiego ani ujmować funkcjonalności bo już samo nadanie etykiety jakiejś komórce może być zadeklarowaniem zmiennej. Do czego programista tej komórki użyje to tylko jego wola ograniczona jedynie wyobraźnią i dostępnym zestawem poleceń procesora, za to kocham assembler.

Reply to
AlexY

Am 20.09.2011 20:18, schrieb Marcin Wasilewski:

Najpierw zdefiniuj co znaczy "utworzyć", bo tego nie ma ani w assemblerze, ani w językach wyższego poziomu.

Waldek

PS

nawiasem mówiąc, Fortran w swojej pierwotnej wersji też był rodzajem assemblera.

Reply to
Waldemar Krzok

Użytkownik "Waldemar Krzok" snipped-for-privacy@zedat.fu-berlin.de> napisał w wiadomości news: snipped-for-privacy@mid.uni-berlin.de...

To niech ci będzie zainicjować, czy też zadeklarować bądź zdefiniować*.

*) Piszę w C, więc wiem czym się różni deklaracja od definicji, żeby się nowy wątek nie rozwinął.

Takie DIM A, czy też int a; int a=15;.

Tylko wywoływane z poziomu programu np. po spełnieniu jakiegoś warunku wewnątrz programu. a nie z poziomu procesu assemblacji. W assemblerze się tego nie da zrobić. To co Remek nazywa zmiennymi to są zwyczajne etykiety, zamieniamne podczas assemblacji na adresy pamięci zarezerwowanego bloku.

Polecam: (post soku11)

formatting link

Reply to
Marcin Wasilewski

Użytkownik "Piotr Gałka" snipped-for-privacy@CUTTHISmicromade.pl napisał w wiadomości news:4e799c03$ snipped-for-privacy@news.home.net.pl...

Uważam, że OE to syf, ale jeśli się go już z wyboru używa (ja też używam OE) to należy się postarać aby nie utrudniać życia innym czytającym.

Jeśli ktoś się uważa za guru informatyki i nawet potrafi zmienne z poziomu programu w assemblerze obsługiwać to powinien takie rzeczy wiedzieć.

Oto instrukcja:

  1. wpisujesz "<",
  2. wklejasz link,
  3. na końcu dajesz ">" i enter,

pomimo, że <> znikną, to link nie będzie się łamał. Dla bezpieczeństwa można tak robić z każdym linkiem. Po kilkunastu razach samo wejdzie Ci w nawyk.

Reply to
Marcin Wasilewski

Am 21.09.2011 14:44, schrieb Marcin Wasilewski:

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), z 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.

Muszę lecieć, ale wieczorem mogę dalej na ten temat pisać

Waldek

Reply to
Waldemar Krzok
[...]

U mnie nic nie znika.

Nieprawda - są czytniki, które nadal łamią nawet tak zapisane linki.

Ale po co? Nie lepiej używać czytnika, który nie psuje linków?

j.w.

Reply to
RoMan Mandziejewicz

Użytkownik "RoMan Mandziejewicz" snipped-for-privacy@pik-net.pl napisał w wiadomości news: snipped-for-privacy@pik-net.pl...

Bo nie używasz OE.

No i?

Czytającemu wszystko jedno co używasz, mu zależy tylko na tym aby link był cały. Ja np. potrafię spowodować aby był cały w OE i tego używam, bo się przyzwyczaiłem.

A na dowód, że link się nie łamie:

formatting link

Reply to
Marcin Wasilewski

Użytkownik "Marcin Wasilewski" snipped-for-privacy@adres.pl napisał w wiadomości news:j5cmls$kld$ snipped-for-privacy@news.onet.pl...

Spotkałem się z tym z rok temu, ale potem widziałem informację, że to działa ale nie u wszystkich. Myślałem, że piszesz o jakiejś innej możliwości - coś typu "wklej specjalnie". P.G.

Reply to
Piotr Gałka

Użytkownik "Waldemar Krzok" snipped-for-privacy@zedat.fu-berlin.de> napisał w wiadomości news: snipped-for-privacy@mid.uni-berlin.de...

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.

formatting link

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.

Reply to
Marcin Wasilewski

Użytkownik "Waldemar Krzok" snipped-for-privacy@zedat.fu-berlin.de> napisał w wiadomości news: snipped-for-privacy@mid.uni-berlin.de...

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. Z kolei 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.

formatting link

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.

Reply to
Marcin Wasilewski

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

Reply to
Waldemar Krzok

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.