Stránka 1 z 2

assembler

Napsal: 21 led 2010, 21:54
od ntamara
Dobrý den.V programování mikrokontrolérů( PIC,ATMEL) jsem začátečník a tak bych potřeboval poradit jestli je výhodnější učit se assembler nebo vyšší programovací jazyk(Pascal,C).Jaká cesta je pro začátečníka jednodušší.Někdo tvrdí ,že programování v C je jednodušší a že nemá smysl učit se assembler,nekdo zase naopak.Jak to tedy je.
Děkuji za odpověď.

Napsal: 21 led 2010, 22:00
od mikollar
ak pochopis assembler budes pri C dokonale rozumiet co kde ako vyuzivas a budes to vediet efektivnejsie pouzit

Napsal: 21 led 2010, 22:00
od forbidden
Základy assembleru bys měl znát, i když budeš programovat v nějakým vyšším jazyku. Základy se naučíš za týden, to tak moc času není, abys to tomu nemohl věnovat. Navíc, když budeš chtít využít schopnosti mcu naplno, nic jinýho, než optimalizovaný assembler ti nepomůže.

Napsal: 22 led 2010, 00:52
od Zmije
Ve škole do nás nejprve hustili pascal, potom c a nakonec asm, dnes bych řekl, že to měli vzít přesně naopak a na pascal se uplně vykašlat. Jak pracují pointry, přerušení, volání podprogramů jsem pochopil až v asm, proto doporučuji jím začít, vpodstatě stačí pochopit práci s pamětí, zásobníkem, podprogramy a přerušení.

Napsal: 22 led 2010, 21:15
od mtajovsky
Zmije << mohu potvrdit. Sám jsem začínal s asm na minipočítačích a mikrech, pak C/C++ a dnes Java a .NET. Jeden můj kolega řekl, že kdo nikdy neprogramoval v asm, tak vlastně neví, co se v počítači děje.

Napsal: 22 led 2010, 21:17
od Andrea
mtajovsky píše:...kdo nikdy neprogramoval v asm, tak vlastně neví, co se v počítači děje.

A to je v Javě potřeba?

Napsal: 22 led 2010, 21:24
od mtajovsky
Andrea píše:
mtajovsky píše:...kdo nikdy neprogramoval v asm, tak vlastně neví, co se v počítači děje.

A to je v Javě potřeba?


A to jsem řekl? Nicméně odpověď je - je to ku prospěchu. A v C velmi ku prospěchu.

Napsal: 22 led 2010, 21:31
od Andrea
mtajovsky píše:
Andrea píše:A to je v Javě potřeba?

A to jsem řekl?

To už se smím ptát jen na to, co někdo řekl?

Napsal: 22 led 2010, 21:38
od mtajovsky
Klidně se ptejte na co chcete.

Napsal: 22 led 2010, 21:43
od rnbw
Java programatori spravidla vobec nevedia, co ich program v skutocnosti robi. Preto nemaju problem napisat nejaku prasacinu typu "vyberiem z databazy niekolko tisic poloziek a urobim z nich objekty". Potom su trivialne programy pomale na x GHz CPU a y GB RAM.

Napsal: 22 led 2010, 22:00
od mtajovsky
No to je právě ono. Zrovna dnes se mi dostal do ruky kousek kódu v Javě, který jsme zdědili po nějakých Indech. Má prohledávat string a nahrazovat Escape sekvence. No a na každý takový výskyt tam byl substr(), což znamená opětovné přidělování paměti. A přitom naprosto zbytečně. Až mě to bolelo za ty servery. To by člověk, který programoval v asm, nikdy neudělal, protože ví, co to obnáší. A to pak takhle napsaná aplikce musí běžet v clusteru ze 60 serverů a výkon je stejně v :rit: .

Napsal: 22 led 2010, 22:05
od Andrea
Se stydim :oops: Sice víc jak 15 let programuju v assembleru, ale co obnáší substr() fakt netuším :oops: Ale zase je pravda, že bych to nikdy nepoužila, páč taková instrukce v assembleru neni :wink:

Napsal: 22 led 2010, 22:10
od rnbw
Keby som videl kod tych hroznych veci, s ktorymi sa stretavam, tak by to asi na mne zanechalo trvale nasledky... :roll:

Napsal: 22 led 2010, 22:11
od mtajovsky
Andrea << "Z toho si nic nedělejte, jsou jiní, kteří 15 let používají v Javě substr() a zase netuší co je to assembler. "; :D

Napsal: 22 led 2010, 22:16
od Andrea
To bude určitě něco podobnýho tomuhle

Kód: Vybrat vše

;------------------------------------------------------------------------------
; Duplikace stringu
; V EAX vraci adresu duplikatu nebo 0 pri chybe
;------------------------------------------------------------------------------
PUBLIC   StrDup
StrDup   PROC pStr:DWORD
   push ECX
   push ESI
   push EDI

   call StrLen, pStr
   push EAX
   call LocalAlloc, LMEM_FIXED, EAX; Alokuje pamet na cilovy string
   pop ECX            ; ECX = delka stringu
   or EAX,EAX
   jz lo_err
   mov EDI,EAX         ; EDI = adresa ciloveho stringu
   mov ESI,pStr         ; ESI = adresa zdrojoveho stringu
   rep movsb         ; Zkopiruje string

lo_ret:   pop EDI
   pop ESI
   pop ECX
   ret

lo_err:   xor EAX,EAX
   jmp lo_ret

StrDup   ENDP

ale nebude se kopírovat celej string :ponder: