Haluaisin oppia jonkun ohjelmointikielen.
Olen ajatellu C ja ASM.
Tiedän että ASM on vaikea kieli, mutta jossain on sanottu, että se on helpompi oppia ekana kielenä kuin myöhemmin sitten. Tämän takia olen kääntynyt ASMin kannalle!
Mielipiteitä?
Olen ajatellu C ja ASM.
Tiedän että ASM on vaikea kieli, mutta jossain on sanottu, että se on helpompi oppia ekana kielenä kuin myöhemmin sitten. Tämän takia olen kääntynyt ASMin kannalle!
Mielipiteitä?
Vastaukset 19
Vanhimmat
assemblerin opiskelu on täyttä hulluutta ekaksi kieleksi jos aikoo hyötyä taidoistaan tai tehdä jotain käytännöllisiä sovelluksia!!! ohjelmoinnin perusteet onnistuu parhaiten oikealla kielellä, esim visual basic, etkä saa näin huonoja vaikutteita ja tapoja mitä assembler on täynnä. c taas on ekaksi kieleksi liian vaikea.
opettele siis vb.
vb ? no cobol olisi parempi.
Ja aloita assemblerilla, tutustu sen verran että tiedät mitä sillä tehdään, ja ymmärät siitä jonkin verran, vakavasti ei kannata opiskella, mutta jotain siitä pitää tietää.
Vaihda sitten "oikeaan" kieleen C/C tai vastaava, etsi sitten optio joka näytää assembly listauksen, niin saat hyvän käsityksen mitä pinnan alla tapahtuu.
Toinen vaihtoehto on java, python, joissa on "roskienkeruu" systeemi. Voi olla parempi opetella kieli jossa kaikki pitää vapauttaa. Yllätys voi olla melkoinen esim java koodari C maailmassa.
Mikä ikinä kielesi onkaan opettele heti debuggerin käyttö, jo heti ensimäisestä "Hello, world" ohjelmasta.
MITEN prosessori toimii - OPETTELE.
Ei sillä ole tarkoitus tehdä mitään suurta ja aikaa vievää, mutta joskus sillä voi tehostaa C/C koodia.
Hyvä = erinomainen kieli assemblyn jatkeeksi - on C/C .
http://www.xs4all.nl/~smit/asm01001.htm
http://www.kegel.com/academy/tutorials.html
vb:llä kyllä voi helposti tehdä yksinkertaisia ohjelmia, mutta vb:stä ei hirveästi ole hyötyä muiden ohjelmointikielien suhteen.
kannattaa aloittaa jollain helpolla silti. itse aloittelin delphillä ja sen loogisesta rakenteesta oli selkeästi hyötyä kun myöhemmin opetteli javaa ja c :aa.
»visual basic, etkä saa näin huonoja vaikutteita ja tapoja mitä assembler on täynnä»
Oiskohan nimenomaan juuri niinpäin, ettei vb:llä tosiaankaan kannata aloittaa ihmeellisten tapojen opettelua (ihan lähtien siitä että laskeminen alkaa ykkösestä:)
Ei ihan oikeasti, vb on ohjelmointikielten joukossa sama kuin Windows käyttöjärjestelmissä: ihan omituinen tapaus, ilman järjen hiventäkään.
> java, python
Ne nyt on tuollaisia tulkkaavia roskakieliä a'la Quick Basic. Vai että Pyyttoni - HAHAAA!
Assembly ja C ovat kummatkin aivan liian vaikeita ensimmäiseksi kieleksi. C on käsittämättömän iso ja monimutkainen kieli, ja sen opettelemiseen kokonaisuudessaan voi mennä vuosia. Assembly on taas niin matalan tason kieli, että sen opetteleminen vaatii hyvin tarkkoja ja syvällisiä tietoja prosessorin ja muistin toiminnasta, rekistereistä, tietokonearkkitehtuurista yleensäkin jne.
Suosittelen sinulle C:tä. Se on korkeamman tason kieli kuin assembly, mutta matalampi kuin C . Kun osaat C-kielen, voit kohtuullisen helposti siirtyä siitä joko ylemmäs C :aan tai sitten alemmas assemblyyn.
C-kielen hyvät puolet:
- Ehkä kaikista kielistä laajimmin tuettu. C-kääntäjiä löytyy käytännössä kaikille käyttöjärjestelmille ja laiteympäristöille.
- Monikäyttöinen. C:llä voi tehdä kaikkea mahdollista aina laiteohjaimista korkean tason graafisiin sovelluksiin.
- Riippumattomuus. C-ohjelmat eivät tarvitse toimiakseen mitään ulkopuolista tulkkia, frameworkia tai virtuaaliympäristöä (kuten esim. Java). Tämä on suuri etu silloin kun haluat tekemiesi ohjelmien toimivan muuallakin kuin omalla koneellasi.
- Keveys ja nopeus. C:llä tehdyt ohjelmat ovat suhteellisen pieniä, eivätkä kuluta paljoa muistia tai levytilaa. Mutta mikä parasta, ne ovat nopeita ja tehokkaita. Nopeus esim. Javaan verrattuna on joidenkin lähteiden mukaan jopa monikymmenkertainen.
Lisäksi C-ohjelmointi voi parhaimmillaan opettaa paljon käyttöjärjestelmän ja etenkin laitteiston toiminnasta, mikä auttaa siinä vaiheessa jos mahdollisesti haluaa siirtyä assemblyyn.
Suosittelen Javaa, koska samalla oppii väkisin myös oliot.
Ensin aloitat C:n opiskelun ja kun alkaa sujua alat pikkuhiljaa tutustumaan C :n lisä härpäkkeisiin.
olet tehnyt, niin opettele ALKEET assemblystä. SE EI OLE VAIKEA KIELI - onpahan vain sitä bitintalutusta ihtiään.
77 : for(it = start; it != end; it )
00161 8b 55 d8 mov edx, DWORD PTR _start$[ebp]
00164 89 55 d0 mov DWORD PTR _it$[ebp], edx
00167 eb 09 jmp SHORT $L15672
$L15673:
00169 8b 45 d0 mov eax, DWORD PTR _it$[ebp]
0016c 83 c0 01 add eax, 1
0016f 89 45 d0 mov DWORD PTR _it$[ebp], eax
$L15672:
00172 8b 4d d0 mov ecx, DWORD PTR _it$[ebp]
00175 3b 4d f0 cmp ecx, DWORD PTR _end$[ebp]
00178 74 23 je SHORT $L15674
; 78 : cout
Esitettiin että ohjelmien kirjoittaminen voisi olla kansalaistaito, ja Basic olisi uuskieltä. 80-luvulla matalantason tietotekniikkaa suunnattiin jopa lapsille, koska ei vielä ollut valmisohjelmia:
http://www.tedfelix.com/books/simon-1985c.jpg
http://www.tedfelix.com/books/simon-1985d.jpg
teet sen nytkin.
PERUSTEISTA KAIKKI ALKAA.
nyt "perusteita" on tullut paljon lisää.
http://www.embedded.com/
Jos haluatte olla OSAAJA.
Paskaas näitä aina uudestaan lässyttää:
http://www.cs.helsinki.fi/u/janmatti/hacker-howto-fi.html
http://www.cs.helsinki.fi/u/janmatti/hacker-howto-fi.html#skills1
Ja taas tarjotaan pyyttonia. Naurettava kieli. Häviää jopa vb6:selle 10:0 tehokkuudessa ja ylipäätään kaikessa.
- pyyttoni. HAHAA!
Python häviää VB6:lle vain siinä, että VB6 tuli jo "valmiiksi" (vai pitäisikö sanoa, päätyi umpikujaan), eikä sen kehitystä enää jatketa.
Objectpascalia käytetään windows -ympäristössä Delphissä, linuxissa nykyisin lähinnä FreePascal Lazarus -yhdistelmässä. Kaupallisista linuxtuotteista kyseeseen tulee vain Kylix, mutta sitä ei ilman linuxgurun taitoja saa uusissa linuxeissa toimimaan, uusin mihin sen saa edes pienellä virittelyllä, on Debian Sarge. Etchiin asennusyritys tuottaa n. 20 virheilmoitusta.
Delphi taas asentuu windowsiin ongelmitta. Lisäksi, Delphissä on mahdollisuus tehdä myös assemblerkielisiä aliohjelmia tähän tapaan:
function RdTsc64 : Int64; assembler;
asm
db 0fh, 31h // RDTSC -> EDX:EAX
end; // Delphissä 64- bit funktion tulos palautetaan rekisteriparissa EDX:EAX
tuota voi sitten kutsua aivan normaalin delphifunktion tapaan, vaikka onkin koodattu assemblerilla:
var
dT, A,B : Int64;
i : Integer;
begin
//
A := RdTsc;
//
for i := 1 to 1000000 do begin
asm
Nop;
Nop;
Nop;
Nop;
Nop;
Nop;
end;
end;
//
B := RdTsc;
//
dT := B - A;
// Aikaa kului dT kellojaksoa.
// Konsoliohjelmassa:
WriteLn('Aikaa kului ', dT:14, ' kellojaksoa.');
// gui -ohjelmassa:
Memo1.Lines.Add('Aikaa kului ' IntToStr(dT) ' kellojaksoa.');
// Gui -ohjelmassa joudut pudottamaan formille TMemo -komponentin, jos se on 1. TMemo formilla, se nimetään automaattisesti "Memo1", muussa tapauksessa muuta ylläolevaan Memo1:n tilalle ko. komponentin nimi.
end;
Kuten huomaat, yksi objectPascalin suurimmista eduista on koodin selkeys. Myöskään osoittimiin (Pointer) ei ole pakko tutustua heti ensimmäisenä, toisin kuin C -kielessä joissa ilman pointereita ei päästä alkua pidemmälle.
Toki Delphin ObjectPascalistakin pointerit löytyy, esim. näin:
var
A : Integer;
PA : ^Integer;
begin
PA := @A; // osoitin PA osoittaa nyt muuttujan A sisältöön.
end;
huomaa: jos käytät pointereita merkkijonojen yhteydessä, sinun tulee ymmärtää Delphin merkkijonototeutus hyvin! Muussa tapauksessa saat aikaan "mystisiä" virheitä viittaamalla vanhentuneisiin muistiosoitteisiin !
Harva nykyään tekee kokonaisia ohjelmia assemblerilla. Mutta assemblerin osaamisesta on silti hyötyä, esim. juuri hankalien virheiden selvittämisessä: esim Delphissä on debuggerissa tällainen:
View/ Debug Windows / CPU, jolloin pääset debuggaamaan ohjelmaa yksi konekielikäsky kerrallaan.
Lisäksi, kun olet oppinut ensin alkeet, niin assemblerin osaamisesta on se lisähyöty, että voit katsoa, millaista koodia kääntäjä mistäkin lauserakenteista tekee, eri ratkaisutavoilla voi olla huomattaviakin suorituskykyeroja.
Vaikket koskaan koodaisi kokonaista ohjelmaa assemblerilla, sen osaamisesta on muuta hyötyä myös muiden kielten yhteydessä (poikkeuksena Java, jota ei yleensä käännetä konekieleksi, vaan tavukoodiksi, jota tulkkaa Java Runtime).
Assemblerin avulla voit myös tutkia käännettyä C tai C -koodia. Joskus C -koodarit innostuvat määritelemään omia tyyppejä siinä määrin, ettei aina ole selvää se, milloin laskee yhteen kokonaislkuja, milloin liukulukuja... assembly -listauksesta näkee tämänkin selvästi.
python