Názory ke článku Assembler - Úvod
Pokud chcete využívat prostředí assembleru i na cestách tak si můžete sosnout disketovou verzi zde http://ramsoft.borec.cz/weblog/os-s-assemblerem-na-diskete.html a dát jí třeba i na flash klíčenku ...
7. 7. 2005
Tento kurz <b>není</b> vhodný pro ty co se nechtějí "hrabat" v elektronice a jejího porozumění.
Jedná se totiš o programování strojů a zařízení. Například pro modely letadel, pro ovládání robotů, v automatizaci - jeřáby, výrobní linky.
Využití je i u osobních počítačů, dalo by se to naprogramovat třeba tak aby se to chovalo jako HUB či SWITCH, ukazatel na lcd vytížení, zaplnění HDD, různé HW hodnoty.
Samozřejmě používá se také jako zábava : efekty do výloh, různé blikátka, já sám jsem si vytvořil rozsáhlý ovladač pro disco osvětlení a effekty řízený kombinovaně uživatelem a hudbou.
Tak že pokud je vám elektronika blízká
<b>S CHUTÍ DO TOHO !!!</b>
"Tento kurz není vhodný pro ty co se nechtějí "hrabat" v elektronice a jejího porozumění."
Tento kurz má zavádějící název.
Ale taky mě bude zajímat.
(název: Programování microcontrolérů Atmel)
jelikož se učí assembler - tak jeho název je snad plně objektivní a dostačující.
Ať se jmenuje jak chce, ale souvislosti s obsahem webu (vesměs programování na PC), při pohledu na název Assembler, očekávám (trochu) něco (trochu) jiného.
Nevím jaký máte pohled na assembler, možná jste jen někde zaslechl a nadchnul se protože to je otec veškerého programování, bez kterého by veškeré jazyky nevznikly ať už to je webové nebo programové programování.
Slovo assembler zavádí k těm nejhlubším základům.
Dost by mě zajmalo co (trochu) jiného jste si představoval...
Představoval jsem si assembler pro procesory v PC.
Ne pro Atmel, ne pro PIC, ne M6502, Z80, ...................
Každej typ procesoru má jinej assembler. (si myslim)
Jiné počty a pojmenování registrů, takže i rozdílné instrukce, atd..
Ale jak už jsem napsal výš, tahle oblast mě zajímá taky,
takže - do toho.
Veškeré procesory se dají programovat přes assembler, záleží od typu proc. použitý kompilátor který je nastavený na požadovaný typ.
Atmel jsem uvedl, protože mám od toho dokumentaci.
Ještě by mě zajmalo na co by vám byl naprogramovaný procák v pc ?
Neprogramoval by se procák ale BIOS, ale stejně na co jste to chtěl použít ?
Hmm, no ono by to šlo..
ALE proč si to ztěžovat, na to máme Céčko, pascal, delphi aj.
Assembler se nedá použít na vytvoření programu pro systém, protože systém příjmá jiný kód, už né šestnáctkový, ale např 32bitový a každý systém má jiné kódování, proto se nedá udělat aplikace na každý systém.
A tedy abyste mohl dělat programy v assembleru musel byste pro to sehnat kompiler na nějaký systém aby to byl soubor EXE, krom toho si myslím, že to už je moc složité a v paxi nevyužitelné.
A proč ne? Samozřejmě chápu, že tento kurz si bere za cíl programovat pro méně složité elektrotechnické věci, ale na nějakých stránkách jsem viděl, že v Assembleru jde používat windosouvské tlačítka, okna, jdou v něm dělat i grafické hry a pak to jednoduše přes kompiler (ten jde lehce sehnat) exportovat do exe.
tak o tom, že by někdo v assembleru programoval hry jsem jeste neslysel. Ostatne ja bych se tu nechtel ucit programovat hry,ale prave se dostat do te endove hranice programovani - od uplneho zacatku.. to ze muzu udelat win okenka, tl. - to muzu ve VB udelat behem chvilky.. (nebo v kteremkliv jinem jazyce) Udelejte si v pascalu grafickou hru, apod.. jde to, ale proc, kdyz to jde jinak - jinymi jazyky.
Ještě před nedávno (pár let), se ve strojáku psali všechny slušnější hry. Jinak se nebylo možný dosáhnout požadovaného výkonu.
10. 7. 2005
samožřejmně že jdou dělat v "assembleru" hry. A kdysi se i dělali ale lidi jsi tady hodne pletou pojmy. V assembleru se neda programovat je to jenom compiler, programuje se za pomocí instrukcí a za pomocí třeba jazyka symbolických adres :O.
19. 7. 2005
Zdravim vsechny,
reakce nekterych lidicek v debate o serialu o assembleru me trosku pobavily, ale mnohem vice rozesmutnily. A proto se ptam, proc si vazeni ctenari nepockate na pokracovani serialu o assembleru od Cura(aby jste se dozvedeli, co vse, a jak jde assembleru vyuzit pri programovani i na PC). Misto toho, ze tu postujete komentare o jazyku, ktery jste, alespon podle nekterych vasich reakci, videli opravdu jen z rychliku,a to mnohdy v hodinach elektroniky, kdyz jste pomoci nej presouvali data z jednoho registru do druheho ve stare, ale dobre 8086:-)
Predstavy o tom, ze se dnes v asm neprogramuje na platformach ibm-comp., ze se vyuziva jen pro detinske elektronicke hricky je prinejmensim stejne detinska.
Jazyk symbolickych instrukci jimz asm je, mel programatorovi umoznit jednodussi psani algoritmu, protoze misto 16tkoveho strojoveho kodu "E2 F4 58" mohl napsat "move ax,bx". Asm je tedy jen standartizovanou formou strojoveho kodu (0b,1b-cemuz rozumi
19. 7. 2005
vsechny stroje,pristoje na teto planete!), ktera misto 1,0 vyuziva symbolickych instrukci. A mimochodem co myslite, ze provede vas c++ kompiler s textovym("symbolickym")kodem ? No jiste, prelozi ho do jazyku symbolickych instrukci a nakonec do binaru! Asm neni a nikdy nebyl prekladac ani interpet, jen standart, ktery programatorum rikal jak si zjednodusit praci s binarnim(hex) zapisem algoritmu. Kod lze napsat v poznamkovem bloku a do binaru ho kompilovat pomoci mnohych znamych kompileru podporujicich asm.
Predevsim mistru OLDOVI220 bych chtel s radosti oznamit, ze ano veskere vstupni/vystupni operace s nim lze ovladat, a to nejen na atmelu ci tovarni lince (a velmi casto se take ovlada), ale i na systemech se srdcem Intel(comp.). Mimochodem Bios s nim lze ovladat mnohem rychleji a efektivneji nez se zkompilovanym kodem z c++. A pokud si oldo myslis ze tvuj staricky dos mel command programovan v c++ tak se pekelne mylis, neb jadro delal Bill se svymi posluhovaci prave v as
19. 7. 2005
m. PROC ?? Protoze asm po zkompilovani generuje neuveritelne a neporovnatelne efektivnejsi,MENSI a tudiz mnohem rychleji bezici kod (s 1/100 naroky na pamet oproti stejnemu kodu z c++). PROC ?? Protoze pri psani algoritmu pouzivas symboly pro instrukce, ktere jsou primo implementovany procesorem(odtud jazyk symbolickych instrukci:-)). A jeste bych te OLDO chtel poprosit, nez zacnes postovat neco o asm, a o jeho dnesni nepouzitelnosti pro PC, prosim zagoogluj si trosku alespon na internetu( kdyz uz ne v knihovne:-)) a zkus si o nem a o obrovske komunite lidi kolem nej, nejprve neco zjistit.
Co se tyce vyuziti asm pod win, je samozrejme mozna, a v dnesni dobe je uz k dispozici mnoho doplnujicich knihoven, ktere muzete nalinkovat do kodu,a ty vam spolecne s winapi umozni delat pomerne efektivni app., i kdyz dluzno rici ze pod windows jsou dnes jasne dominantni vyssi prog. jazyky s 2cd instalacemi a tunami funkci, ktere vlastne vubec nepotrebujete a tim padem i se zbytecne slozitym a tu
19. 7. 2005
diz neefektivnim a pomalym kompilerem, ktery nejen ze neumi, ale ani nemuze vytvaret tak jednoduche a efektivni binary jako asm.
Takze paklize nekdo z Vas programatoru, ma ambice nekdy vytvorit neco skutecne uzitecneho ( pracujiciho jakoukoliv formou s hardwarem pocitace ) pak by jste meli naslouchat Curovi, a ucit se! Protoze jinak vase pociny ( budou-li cele programovany v tech megalomanskych vpj ) dopadnou jak sedlaci u chlumce ( ve vsech vyse zminovanych parametrech ) nebo hure, jak billovi sy$temy :-))
Programovani zdar! a peknej den vsem :-) A tobe Curo hodne sily a zdaru a nenech se odradit nekterymi z nas !! :-) G.
20. 7. 2005
Proc? Treba excellentni free 3D engine Crystalspace ma kriticke casti prepsane v assembleru kvuli rychlosti... a myslim se prepsani casti programu v ekterych jde o rychlost, do assembleru neni spatny napad.
Crystalspace to dela tak, ze nema binarky, ale musi si to clovek zkompilovat pomoci mingw a msys. tam se zkompilujou i asm veci.
Jinak serial VELMI vitam, zacinam se hrabat v elektronice (ano, beginner, lama, n00b, klidne se mi smejte ale zlepsim se) a asm budu potrebovat...
... jinak kluci a Dnech vedya techniky, co meli na Miraku robotya vyhravaj s tim mezinarodni souteze, pouzivaj taky procesory Atmel a tusimze rikali ze to programujou v cecku, ze assembler nemaji radi.
21. 7. 2005
dle mne s nim lze udelat cokoli.jen casova narocnost.neprehlednost.je to zaklad myslim ze kazdy kdo by chtel porozumnet pc,by si to mel projit.
Assembler je dnes pro ty, kdo chtějí opravdu, ale opravdu hodně do hloubky. Neříkám že základy ne, ale rozhodně je nesmysl chtít v tom programovat aplikace. V assebmleru se sice dá udělat vše, ale má to jedno omezení. Čas. Váš čas.
Ovladače, pokusy, ukázky a jiné nízkoúrovnové věci, to ano, Ale programy? Proč mrhat vlastním časem když se to dá udělat mnohonásobně rychleji v nějakém vysokourovnovem jazyce?
A rychlost a náročnost na pamět? při dnešních strojích jistě zcela zanedbatelná věc...
23. 7. 2005
cauec vsem,
to: petr.v.l
jak rekl petr.v.l, projit by si asm mel kazdy kdo to mysli s programovanim na pc vazne.
to: geon
presne jak si rekl, asm -> low level [hardware], ale nejen pro nej se dnes delaji programy v asm. Mozna te to prekvapi, ale i vertex shadery(&pixel shadery) starajici se o zobrazeni sceny nejnovejsich high level programed pecek (U3,Doom...) v tve nvidia based karte jsou psany v asm(samozrejme upravena verze), a dokonce i části real time renderovacich algoritmu jsou psany v asm...A co se tyce tveho nazoru o tom ze dnes uz maji programatori k dispozici tak rychle systemy, ze uz se nemusi starat o velikost kterou zaberou v pameti jejich textury & sortovaci algoritmy & atd... ci o rychlost daneho algoritmu nebo celeho programu, tak mi dovol abych s tebou jako programator nesouhlasil. Minimalne kazdy druhy grafik( a nejen on) by se ti vysmal, kdybys mu tohle rekl, obzvlaste 3d grafik tvorici 3d rt engine. Muzu te ujistit ze ani dnes neskoncila hon
23. 7. 2005
ba za optimalizovanym kodem, protoze jinak by sis ani na gf6800 s 1gb ram nezahral ani farcry, natoz u3 :-) . A k tomu ze aplikace programujeme v high level jazycich: ovsem ze ano. protoze to je rychlejsi. ovsem pri programovani neceho komplexnejsiho nez windows kalkulacky, velmi casto programator potrebuje pridat do kodu rychlou rutinu pro pristup k nejake periferii, ci napr. ke gr. karte ( napr. prave k ver. shaderu atp. ...) a tam prichazi na radu prave asm, a kvuli tomuto je stale pouzivany a v rychlosti a efektivite ( + male velikosti kodu ) nema v tomto oboru soupere. Prosim to neber jako vytku :-) kazdy ma pravo na svuj nazor a ja te tu nechci presvedcovat, proste ti jen chci ukazat nektere moznosti, a kdyz si zagooglujes ohledne asm a dnesnich technologii ve vyvoji softu, pak budes moci posoudit sam kde je sila asm, a zjistis ze je pouzivan dokonce i pri vyvoji "next generation" :-))
( jasne ze ne cely hry :-))) to by to vypadalo :-))) )
mejte se vsichni fajn a z
26. 7. 2005
Nepletete si to trochu s makry v C?
Na wiki strankach maji informaci, ze assembler je volitelne pouzit.
Vetsina kompilatoru vam muze prevest kod na asm, ktery pak muzete analyzovat. Kompilator to samozrejme dela nejefektivneji jak jen to jde. Zalezi na navrhu a nastaveni optimalizaci. Navic assembler opravdu muze omezovat na pouziti pro danou platformu x86, Mac, Sparc..
Dobre napsany prog v C je prenositelny pokud existuje na danem systemu kompilator vyhovujici standardu, ktery take specifikuje nektere funkce (pristup k souborum, k pameti apod.)
Zkuste si nekdy vzit jednoduchy C program, k nemu napr. MSVC a zjistit si parametry pro cc.exe.
Znalosti assembleru se daji vyuzit napriklad pro resource engineering, kdyz potrebujete analyzovat binarni soubor a nemate k dispozici zdrojove kody - kdyz uz chcete resit veci pod os.
Kdyz uz tu pisete o EXE, predpokladam uvazujte ze jde o PE soubor.
26. 7. 2005
Nekdo tomu rika OpenGL :-D, ale o to nejde, prizpusobeni kodu pro forced vyuziti napriklad SSE nebo MMX instrukci se dela dost jednoduse a nepouziva se komplet assembler.
C++ ac se to nezda, je DOST mlade, standard je skoro novy. Kompilatory nejsou jeste zcela vychytane, ale presto velmi dobre pouzitelne.
Kompilator generuje bin kod s hromadou debug testu, ono totiz neni moc dobre, pokud vam spadne aplikace uprostred niceho a tak nabira na vaze.
Jak uz tu psal GEON, je dobre umet perfektni high level jazyk, jako napriklad Python, o kterem se pise, ze bezi na vsem kde je kompiler. Coz plati take pro vase skripty. :-)
Tohle vsechno uz je dost off topic, ale ja o graficke karte nezacal ;-).
Jinak z pohledu programatora na PC je ASM proste mrtvy jazyk jako latina.
No, nebudu reagovat na tema prispevku, ale na prispevek :)
Kurz assembleru je tu pro ty, kteri se ho chteji naucit. Ja osobne ano. O tom, ze nekdo(ne-primo vy) rika, ze je mrtvej, ci nekdo naopak, ze je potrebnej si myslim svoje. pro me je to velmi cenny jazyk a hotovo. ostatne, kdo stanovuje, co je mrtve? ctenari, ne.. vedci?ne.. LIDI! a lidi delaj chyby.. kazdy nazor, dobry nazor.. jsem rad za nej. je tu svoboda nazoru :) a je blbost rikat cloveku, at se neco neuci, kdyz chce. (toto neni mysleno jako utok na predchozi prispevek, ale jako defensiva (ci ofensiva) obecne)
26. 7. 2005
"velmi casto programator potrebuje pridat do kodu rychlou rutinu pro pristup k nejake periferii, ci napr. ke gr. karte ( napr. prave k ver. shaderu atp. ...)"
To se dnes dela pres ovladace, nevim kde jste vzal tento nazor. Primy pristup k HW programy se v modernich OS nepouziva z duvodu moznych problemu (ruzny HW, sdileni zdroju) a je to jen dobre. Pokud by tomu tak nebylo, nemohl byste delat nekolik veci stabilne najednou.
Programy pro DOS vyuzivaji simulaci, apod.
No, nevim, mozna se pletu, ale pokud neco napisu v asm (assembler), tak je to zduvodu jedineho, a tou je rychlost, kterou se jednotlive instrukce provadi. V porovnani s programy napsanymi pro stejny ucel v jinem "vyssim" prog. jazyce je program, spise kod, v asm velice rychly. A to jde predevsim pri programovani nejakych elektro spotrebicu ci stroju. Jinak s programovanim pro procesory. Jde to, je rychlejsi, ale narocnejsi na programovani. Holt asm je porad jazyk nizsi urovne.
17. 1. 2006
Jenom prilozim do kotle...slyseli ste nekdy o bootovani systemu? bez asm by ste moc daleko nedobootovaly.Ovladace HW, taky bez asm dost obtizny.
nazory typu ze asm neni pro PC...HOVADINA!
a kdyz vidim nazev serialu Assembler, hned mi tukne a ocekavam , ze se bude ucit asm pro PC a nenapadlo by me, ze zrovna pro spu pro elektroniku, asi chybi upresneni v nazvu serialu. Vetsiny cyuky o prog. na tomhle zinu je o prog. pro PC.
A na druhou stranu, proc se s asm patlat pro elektroniku kdyz se to da stejne dobre psat v C, kvuli rychlosti? tak proc by se to ze stejnyho duvodu nemohlo pro PC?
Tak já zase nechápu jaký je rozdíl programovat PC a elektroniku, ale pokud chcete přes assembler programovat "PC" tak si klikněte na JSA, kde je popsán i význam slova assembler.
Ešte by som chcel pripomenúť, že asm sa používa pri tvorbe antivírou, presnejšie, k analýze a štúdiu chovania vírusov :).
21. 12. 2008
S programovanim mam jen velmi malo zkusenosti a s asm vubec zadne. Zajimalo by me, za jak dlouhou dobu bych se mohl naucit v asm pracovat s tim, ze bych se mu venoval asi 3 hodiny dene?
19. 12. 2009
Reagoval na komentář od uživatele Curo :
udelat smysluplnou hru v pascalu v grafickem rezimu bez assembleru... hmm tak to bych chtel videt.
Mimo to Tomix chtel zrejme rict ze by chtel umet ASM na vyuziti ruznych vychytavek v PC jako psani operacnich systemu atd. Coz je velmi zabavne a ma to sve kouzlo ikdyz svuj pracne nepsany OS nikdy neprodate a jevlastne k nicemu..
12. 2. 2016
TITLE MASM Vstup_vystup(main.asm)
INCLUDE Irvine32.inc
.data
Retaz DB 100 dup(?)
DlzkaRetazca DD ?
.code
; nacitam si vetu a ulozis si do dlzky retazca dlzku vety
Nacitaj PROC uses edx edi ecx eax
mov edx,OFFSET Retaz
mov ecx,20
mov edi,0
call ReadString
mov DlzkaRetazca,eax
ret
Nacitaj ENDP
; procedura pre hladanie prave dvoch samohlasiek v jednom slove
Hladaj PROC uses edi eax esi ebx edx
mov edx, offset Retaz
mov edi,0
mov esi,0
mov ebx,0
mov ecx, DlzkaRetazca
Cyklus:
cmp Retaz[edi], 0
je Koniec
cmp Retaz[edi],20h; medzera
je Medzera
cmp Retaz [edi],'a'
je Samohlaska1
cmp Retaz [edi],'A'
je Samohlaska1
cmp Retaz [edi],'e'
je Samohlaska1
cmp Retaz [edi],'E'
je Samohlaska1
cmp Retaz [edi],'i'
je Samohlaska1
cmp Retaz [edi],'I'
je Samohlaska1
cmp Retaz [edi],'o'
je Samohlaska1
cmp Retaz [edi],'O'
je Samohlaska1
cmp Retaz [edi],'u'
je Samohlaska1
cmp Retaz [edi],'U'
je Samohlaska1
cmp Retaz [edi],'y'
je Samohlaska1
cmp Retaz [edi],'Y'
je Samohlaska1
inc edi
jmp Cyklus
Samohlaska1: ; ak sa tam anchadaz samohlaska tak si inc ebx co mi reprezentuje pocet samohlasok
inc ebx
inc edi
jmp Cyklus
Medzera:
cmp bx,2 ; porovnam ci nieje samohlasok Prave 2
je Inkrementuj ; ak ano tak skocim na Inkrementuj
inc edi; ak nie tak vynulujem bx co je pocet samohlasie v dalsom slove
mov bx,0
jmp Cyklus
Inkrementuj:
inc esi; esi mi reprezentuje pocet slov vo vete prave s dvommi samohlaskami
mov bx,0
inc edi
jmp Cyklus
Koniec:
call CRLF
mov eax, esi ; presuniem pocet slov do eax a dam vypis
call WriteInt
call CRLF
ret
Hladaj ENDP
main PROC
call Nacitaj
call Hladaj
exit
main ENDP
END main
12. 2. 2016
TITLE MASM Vstup_vystup(main.asm)
INCLUDE Irvine32.inc
.data
Retaz DB 100 dup(?)
DlzkaRetazca DD ?
.code
; nacitam si vetu a ulozis si do dlzky retazca dlzku vety
Nacitaj PROC uses edx edi ecx eax
mov edx,OFFSET Retaz
mov ecx,20
mov edi,0
call ReadString
mov DlzkaRetazca,eax
ret
Nacitaj ENDP
; procedura pre hladanie prave dvoch samohlasiek v jednom slove
Hladaj PROC uses edi eax esi ebx edx
mov edx, offset Retaz
mov edi,0
mov esi,0
mov ebx,0
mov ecx, DlzkaRetazca
Cyklus:
cmp Retaz[edi], 0
je Koniec
cmp Retaz[edi],20h; medzera
je Medzera
cmp Retaz [edi],'a'
je Samohlaska1
cmp Retaz [edi],'A'
je Samohlaska1
cmp Retaz [edi],'e'
je Samohlaska1
cmp Retaz [edi],'E'
je Samohlaska1
cmp Retaz [edi],'i'
je Samohlaska1
cmp Retaz [edi],'I'
je Samohlaska1
cmp Retaz [edi],'o'
je Samohlaska1
cmp Retaz [edi],'O'
je Samohlaska1
cmp Retaz [edi],'u'
je Samohlaska1
cmp Retaz [edi],'U'
je Samohlaska1
cmp Retaz [edi],'y'
je Samohlaska1
cmp Retaz [edi],'Y'
je Samohlaska1
inc edi
jmp Cyklus
Samohlaska1: ; ak sa tam anchadaz samohlaska tak si inc ebx co mi reprezentuje pocet samohlasok
inc ebx
inc edi
jmp Cyklus
Medzera:
cmp bx,2 ; porovnam ci nieje samohlasok Prave 2
je Inkrementuj ; ak ano tak skocim na Inkrementuj
inc edi; ak nie tak vynulujem bx co je pocet samohlasie v dalsom slove
mov bx,0
jmp Cyklus
Inkrementuj:
inc esi; esi mi reprezentuje pocet slov vo vete prave s dvommi samohlaskami
mov bx,0
inc edi
jmp Cyklus
Inkrementuj1:
inc esi;
jmp Pokracuj
Koniec: ; na konci musim este zistit ci v poslednom slove neboli dve samohlasky
cmp bx,2 ; porovnam ci nieje samohlasok Prave 2
je Inkrementuj1 ; ak ano tak skocim na Inkrementuj
Pokracuj:
call CRLF
mov eax, esi ; presuniem pocet slov do eax a dam vypis
call WriteInt
call CRLF
ret
Hladaj ENDP
main PROC
call Nacitaj
call Hladaj
exit
main ENDP
END main