2 Problemy: assembler i sieć.

0

1.Od niedawna pisze w c++. Używam dev-cpp, ale mam z nim pewien problem: zawsze gdy chce skompilować program zawierający wstawke assemblerowską wyskakuje mi błąd :-( np. przy użyciu instrukcji mov: Error ... too many memory references for `mov' . Co z tym zrobić?? Da się używać wstawek assemblerowskich w większej ilości bez konieczności pisania przy każdej instrukcji:asm() ??
2.Jak napisać program który wczytuje z klawiatury adres IP i dane, a następnie wysyła dane do komputera o podanym IP??

0
  1. nie znam się na asm
  2. wstawki mają składnię AT&T, możesz spokojnie dać więcej instukcji:
int main(){
    __asm (
        "movl $1, %eax;"
        "movl $0, %ebx;"
        "int $0x80;"
        );
    }
  1. bez asemblera :] pod windowsem to na przykład winsock.h jest.

Dopisane:

@quetzalcoatl: odpowiedź 2w1: tak jakoś wyszło :)

0

sprawdz czy przypadkiem kompilator nie ma racji.. MOV operuje na rej<-rej, mem<-rej, rej<-mem, ale nie potrafi zrobic mem<-mem

Ranides - wyprzedziles mnie o wlos :) zmeiniles zdjecie?:)

0
  1. bez asemblera :] pod windowsem to na przykład winsock.h jest.

A kto powiedział że bez assemblera? Prawde mówiąc to wolałbym żeby to było z wykorzystaniem wstawek assemblerowskich ale.... nikt nie odpisał :-( :
http://4programmers.net/Forum/364707#id364707
A jak ktoś wie jak to zrobić w C++/assembler/Turbo pascal to niech zarzuci jakiś link albo kawałek kodu :-)

0

co do drugiego pytania polecam
http://rainbow.mimuw.edu.pl/SO/Linux/index09.html
oraz rozdział poprzedni.
wszystko sprowadza się do stworzenia gniazd w programie serwera i klienta oraz ich ustawieniu.

0

A kto powiedział że bez assemblera?

No JA powiedziałem, lol ;)

A konkretniej:

  1. po ch** pisać obsługę czegoś, co jest doskonale zaimplementowane.
  2. pod Windows jeśli masz do wyboru asm i API, to wybieraj API
  3. nawet jak chcesz napisać ręcznie obsługę sieci, to asm dalej do niczego nie jest potrzebny!
  4. jak jesteś naprawdę uparty, i chcesz odkrywać koło na nowo, to oglądnij sobie:
    http://download.4programmers.net/kliser.zip

w/w program ma sens, bo pracuje w DOSie i nie może korzystać z API. Twój pracujący w podobny sposób pod Windows będzie parodią.

0
Ranides napisał(a)
  1. pod Windows jeśli masz do wyboru asm i API, to wybieraj API

Heh, pod Windows /w szczególności NT/ są ładnie dobrane ograniczenia - asm w praktyce nie może więcej niż dowolny inny język. Oczywiście tylko w zwykłych programach. Bo całą potęgę asma idzie jedynie w sterownikach zastosować. Btw. programując w asm pod Windows używa się WinApi :>
a teraz powtórzę to co pisałem już wielokrotnie:
asembler to język jak każdy inny, w normalnym programowaniu nie ma praktycznie żadnej przewagi za wyjątkiem wydajności. Sam asm nie jest cudowną bronią dającą władzę absolutną
Ale aby uzyskać znaczącą wydajność, lepszą od kodu kompilatorów intela trzeba być wirtuozem. Prawdziwe programowanie niskopoziomowe czy reverse engineering to już inna sprawa.
Wśród programistów panuje mit asemblera, języka o niezwykłej potędze, którym można wszystko. Ale ci sami ludzi którzy go stworzyli zdawali sobie również sprawę z jego potęgi i wprowadzili odpowiednie ograniczenia. W procesorach IA-32 można zabronić sprzętowo dostępu do portów, części instrukcji, pamięci, nawet samego wykonywania odpowiednich obszarów. I Microsoft jaki by nie był potrafi /przynajmniej w NT/ jako tako to zastosować.
Asm jest dla ludzi mających pojęcie o elektronice i matematyce - można w nim stosować większość metodologii, niemal dowolne techniki i biblioteki ale to nadal czysta matematyka. W asm łatwo o błąd o poważnych skutkach... Nawet ja mimo mojego uwielbienia dla asma i świetnej jego znajomości aktualnie piszę sporo rzeczy w C++, ćwiczę lispa, pythona i fortrana /f. to w sumie bardziej w planach dopiero/. Nie ma języka uniwersalnego, każdy ma swoje zastosowania, język tylko narzędzie... tak samo jak brzeszczot, tasak czy skalpel - wszystko narzędzia do cięcia ale chyba nie chcielibyście hm... operacji plastycznej brzeszczotem\tasakiem? :P Ta, wiem wszystko się da...

0

Dawno temu czytałem zdanie: "asm może wszystko, ale nikto go nie zna". Obecną cechą programowania jest pewna nadmiarowość, co przy gigahercowych procesorach nie ma już wiekszego znaczenia. Userowi wisi czy poczeka 15 ms, bo pisałeś w asm czy 45 ms bo pisałeś w C++. Dawno temu bawiłem się w porównanie funkcji matematycznej (korzystała z sinusa). Różnica pomiędzy gotowcem a moim asm była tak mała, że po ch.. się męczyć. Przy obecnej komplikacji programów trzeba korzystać z gotowych rozwiązań. Bez tego sie cofasz. To tak jak byś chciał zbudować maszynę. Idziesz do sklepu i kupujesz śrubki. Bo po co je toczyć, ale żeby toczyć to trzeba stal wytopić, którą trzeba wykopać... Mam nadzieję, że rozumiesz.

0

A może nieodpowiedni rozmiar zmiennej ew. adresowanie nie podałeś kodu ?

deus:
Bo całą potęgę asma idzie jedynie w sterownikach zastosować

I właśnie tak , asembler nic tu nie zmienia , jesli nie napiszesz programu który może
korzystać z przerwań i portów to wstawki asm w NT są zabawne .
Chyba że chcesz poprawiać kod wygenerowany przez kompilator .

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