Snel asm leren

Moderators: jkien, Xilvo

Gebruikersavatar
Berichten: 829

Snel asm leren

hallo,

weet iemand een paar goeie sites om op een zeer korte tijd deftig ASM te leren. Ik kan al programmeren in OO-talen dus het probleem zit niet bij algoritmes, ik zoek gewoon informatie over de opdrachtenset en de flags ervoor en dat soort dingen

mvg

Vladimir Lenin
"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."

--Vladimir Lenin-- (Владимир Ильич Ульянов)

Gebruikersavatar
Berichten: 4.810

Re: Snel asm leren

Het hangt toch allemaal af van welke hardware je wil gaan gebruiken? Op zich is ASM niet zo verschillend van gewoon programmeren, je hebt enkel veel minder tot je beschikking.

Gebruikersavatar
Berichten: 2.364

Re: Snel asm leren

Als je gewoon assembler wilt gebruiken voor de IA-32, kan ik je verwijzen naar de intel pagina. Hier staan alle denkbare instructies. De boeken kun je overigens ook gratis bestellen.
“Quotation is a serviceable substitute for wit.” - Oscar Wilde

Gebruikersavatar
Lorentziaan
Berichten: 5.079

Re: Snel asm leren

Wikipedia heeft wat nuttige links

Waarom is C (aka "portable asm") niet laag genoeg?
Any sufficiently analyzed magic is indistinguishable from science.

Any sufficiently advanced technology is indistinguishable from magic.



There is no theory of protecting content other than keeping secrets – Steve Jobs

Gebruikersavatar
Berichten: 5.679

Re: Snel asm leren

Waarom wil je dat eigenlijk leren? Er zijn vandaag de dag echt uiterst weinig praktische situaties waarin asm echt zin heeft.

(gewoon iets leren om het leren, of omdat het leuk, is natuurlijk een prima valide reden, daar niet van ;) )
In theory, there's no difference between theory and practice. In practice, there is.

Berichten: 202

Re: Snel asm leren

Als je echt iets leuks wil maken, moet je eens kijken naar antlr: http://www.antlr.org/ hiermee kun je je eigen vertaler maken voor een zelf te maken programmeertaal. Hiermee kun je dan ook een codegenerator maken voor bijvoorbeeld ia 32.

Berichten: 158

Re: Snel asm leren

Waarom wil je dat eigenlijk leren? Er zijn vandaag de dag echt uiterst weinig praktische situaties waarin asm echt zin heeft.
Dat vind ik onzin. Asm is in de eerste plaats ontzettend handig om het binnenste van een computer te snappen. Dat een computer werkt met getallen en indirectie, en niet met symboolnamen en functies. Dat de processor niks weet van variabelen, maar een paar registers heeft waar je wat mee kan doen. Hoe simpele recursie op het laagste niveau moet worden opgelost door middel van een stack, en waarom een byte van 255 optellen bij een byte met waarde 255 een byte met waarde 254 geeft. Hoe kommagetallen er binair uit zien, of negatieve getallen in diverse notaties. Little endian, paging en segmentatie, noem maar op. Maar wat ik met deze opsomming vooral probeer aan te geven is dat je al heel veel moet weten voordat je snapt wat je doet als je in asm gaat programmeren. Asm op zichzelf is supersimpel, want elke regel is een variant op het patroon "Label: instructie operands ; Commentaar".

Op de opleiding Informatica moet je in het eerste jaar al een Commodore 64 emulator schrijven in asm, niet voor niets.

Helaas kan ik je geen verwijzingen naar het studiemateriaal geven omdat dat van de opleiding is, maar wel een link naar een Engelse tutorial (in NASM) die op het eerste gezicht voldoende informatie bied om het goed te kunnen leren. De asm zelf wordt niet alleen behandeld, maar ook een aantal van de dingen die ik hierboven noemde:

http://www.drpaulcarter.com/pcasm/

Waarom asm in NASM programmeren? NASM heeft een logischere (Intel) syntax dan veel andere bekende assemblers (zoals GAS, de GNU assembler), geeft duidelijker aan waar een eventueel probleem in de code zit (weer in tegenstelling tot GAS), en is ook beschikbaar voor Windows.
"Niet gehinderd door enige kennis van zaken..."

Berichten: 185

Re: Snel asm leren

Ik ben heel blij dat er nog mensen zijn die Asm leren. Als Adm zou uitsterven, zou er een nieuw soort computer-analfabetisme ontstaan. Er zou geen programmeur meer zijn die de computer anders kan aansturen dan als een blackbox.

Alles wat in hogere talen geprogrammeerd kan worden, kan ook in Asm geschreven worden. Asm is in principe totaal bugvrij te schrijven, zolang je maar elke subroutine grondig test en op bugvrije hardware werkt.

Elk fatsoenlijk Asm programma is veel sneller dan welk gecompileerd programma dan ook, om van scripts nog maar te zwijgen. Je kunt dll's schrijven, of objects om te gebruiken in je OOPS taal.

Het internet stikt van de voorbeelden en tutorial sites. En als je even doorbijt kun je in Asm net zo snel schrijven als in C.

Masm32 (microsoft assembler, de meest gebruikte) kun je gratis downloaden vanaf http://www.masm32.com/

XP Platform SDK is ook gratis te downloaden van

http://www.microsoft.com/msdownload/platfo...FULLInstall.htm

win32api.big.zip is ook een verstandige download: http://www.carabez.com/downloads.html

succes

Maggy

Gebruikersavatar
Berichten: 4.810

Re: Snel asm leren

Alles wat in hogere talen geprogrammeerd kan worden, kan ook in Asm geschreven worden. Asm is in principe totaal bugvrij te schrijven, zolang je maar elke subroutine grondig test en op bugvrije hardware werkt
Alle code kan in principe bugvrij gemaakt worden, alleen is dat praktisch onmogelijk. Grote projecten in asm (die echt niet vaak meer voorkomen) krijgen ook vroeg of laat met bugs te maken, hoe hard je ook je best doet.

Even met assembler werken is wel tof, maar je moet je er zeker geen maanden op leren om het te begrijpen. Overigens kan je naar mijn mening niet veel "assembler" leren omdat veel hardware echt van mekaar verschilt. Je kan wel wat trucjes leren en wat zaken leren die bijna overal voorkomen (zoals registers) maar dat wil nog niet zeggen dat je zomaar overweg kan met nieuwe hardware. Vaak wordt wel genoeg documentatie geleverd bij hardware om je weg te vinden zelf mocht je nooit assembler gezien hebben.

Gebruikersavatar
Berichten: 5.679

Re: Snel asm leren

virtlink schreef:Dat vind ik onzin. Asm is in de eerste plaats ontzettend handig om het binnenste van een computer te snappen. Dat een computer werkt met getallen en indirectie, en niet met symboolnamen en functies. Dat de processor niks weet van variabelen, maar een paar registers heeft waar je wat mee kan doen.

(...)

paging en segmentatie, noem maar op.
Ik ben heel blij dat er nog mensen zijn die Asm leren. Als Adm zou uitsterven, zou er een nieuw soort computer-analfabetisme ontstaan. Er zou geen programmeur meer zijn die de computer anders kan aansturen dan als een blackbox.
En hoe is dat, in alledaagse praktijksituaties vandaag de dag, precies van belang?

Volgens dat argument zou het net zo belangrijk zijn dat je als programmeur elektrotechniek en micro-elektronica studeert, want dan leer je pas écht hoe een computer werkt. En als je die lijn doortrekt, dan eigenlijk ook natuurkunde en quantumfysica.
Hoe simpele recursie op het laagste niveau moet worden opgelost door middel van een stack, en waarom een byte van 255 optellen bij een byte met waarde 255 een byte met waarde 254 geeft. Hoe kommagetallen er binair uit zien, of negatieve getallen in diverse notaties. Little endian,
De zaken die je hier noemt zijn inderdaad nuttig in allerlei praktijksituaties, maar dan gaat het meer om een conceptueel begrip dan kennis van assembler. Diezelfde kennis is net zo nuttig wanneer je voor intel als voor andere platforms programmeert (zoals game consoles, en tot voor kort de Mac, enz), en echt programmeren in Asm staat daar eigenlijk los van. De dingen die je omschrijft zijn mij ook vaak genoeg van pas gekomen in puur C++ situaties.

Ik ben het wel met je eens dat het programmeren in assembler je vanzelf met deze concepten vertrouwd maakt (evenals pointers bijvoorbeeld, er zijn verdomd veel programmeurs die daar geen hol van begrijpen). Maar dan wordt Asm meer een middel (een leermethode) dan een doel.

Vroeger was Asm ook handig (of zelfs noodzakelijk) om bepaalde hardware aan te kunnen sturen, zoals geluids- en videokaarten enzo. Dat is met de komst van Windows en drivers ook veranderd, nu zit daar een laag tussen en spreek je met apparaten op een universele manier. En eerlijk is eerlijk, dat is wel zo handig en scheelt een onwijze bult werk en tijd.
Alles wat in hogere talen geprogrammeerd kan worden, kan ook in Asm geschreven worden.
Dat is per definitie zo, want Asm is de enige taal die je computer kan uitvoeren. Iedere compiler zet een random taal om in Asm.
Asm is in principe totaal bugvrij te schrijven, zolang je maar elke subroutine grondig test en op bugvrije hardware werkt.
Dat geldt natuurlijk voor iedere taal. Bij Asm kost het alleen een veelvoud van de tijd, en is dus een stuk moeilijker om dat consistent vol te houden. En in de praktijk, waar een programma binnen een bepaalde tijd af moet zijn, is dat helemaal onrealistisch.

Programmeren in Asm kost veel, veel meer tijd, en de kans op foutjes is groter, en die zijn bovendien moeilijker op te sporen.
Elk fatsoenlijk Asm programma is veel sneller dan welk gecompileerd programma dan ook,
Sorry, maar dat is echt volstrekte onzin. Ten eerste maakt het voor 99.99% van alle programma-onderdelen geen drol uit of het uit geoptimaliseerde assembler bestaat of een domme conversie vanuit een "hogere" programmeertaal. Ten tweede is het zeer twijfelachtig of je tegenwoordig nog wel betere Asm kunt maken dan wat compilers produceren. Heb je wel eens gekeken wat Visual C voor Asm produceert met alle optimalisaties aan? Dat is tamelijk ziek hoor, daar valt als programmeur (ook met de nodige expertise) nauwelijks nog tegenop te optimizen.

Processors van vandaag de dag zijn dusdanig ingewikkeld dat je met zoveel facetten rekening moet houden (pairing, caching, penalties, noem maar op), dat een beetje complex programma al zo'n monnikenwerk zou zijn om in Asm te bouwen, daar is haast geen beginnen aan. Laat staan dat je het ook nog net zo goed wilt optimizen als een compiler doet, dat kost nog eens een veelvoud van het werk en benodigde expertiese.
om van scripts nog maar te zwijgen.
Scripts worden doorgaans niet gecompileerd, dus dat is niet helemaal eerlijk te vergelijken. Maar zelfs daar zul je het in de praktijk zelden merken (scripts runnen vaak online en dan is de bandbreedte vaker de bottleneck dan de uitvoersnelheid van het script).

Pas als je intensieve dingen gaat doen in een scriptje (iets wat zwaar moet rekenen of veel data verwerken), dan wordt het merkbaar trager dan een 'echt' programma. Maar dat geldt zo'n beetje voor alle programma's gecompileerd in iedere willekeurige gecompileerde taal (met een fatsoenlijke compiler).
Je kunt dll's schrijven, of objects om te gebruiken in je OOPS taal.
(Net als boven) vanzelfsprekend, want andere talen waarin dat kan worden naar Asm omgezet.

Andersom is het ook zo: alles wat je in Asm kan, kan ook in C, en omgekeerd. En alles wat je in x86 (intel) Asm kan, kan ook op een motorola cpu, en omgekeerd.
Het internet stikt van de voorbeelden en tutorial sites. En als je even doorbijt kun je in Asm net zo snel schrijven als in C.
Ik durf te wedden dat ieder programma dat een béétje complex is (dus geen hello world, al geldt het daar ook voor) een veelvoud van tijd kost om te maken in Asm.

Ik wil niet de zuurpruim uithangen en Asm afkraken ofzo. Ik heb er jaren 100% in geprogrammeerd dus ik weet waar ik het over heb. Evengoed kan het best leuk (en op sommige momenten zelfs nuttig) zijn om Asm te leren, maar vergis je niet in hoeveel tijd en moeite dat gaat kosten, en hoeveel je er echt aan hebt. Als het je om het nut gaat, ben je tegenwoordig volgens mij beter af door je te verdiepen in andere programmeeraspecten.

Een fraai voorbeeld vind ik MenuetOS, een of andere freak die een compleet OS heeft gebouwd in 100% Asm. Oooh man wat moet die gast daar veel tijd in hebben gestoken! Compleet windowed, met netwerk support en browsers en alles. Erg leuk, veel hulde en respect voor zijn prestatie. En ook volslágen zinloos ;)
In theory, there's no difference between theory and practice. In practice, there is.

Berichten: 158

Re: Snel asm leren

Andersom is het ook zo: alles wat je in Asm kan, kan ook in C, en omgekeerd.
Goed, in asm schijf ik de volgende regel code om een ingedrukte toets op te vangen in een interrupt service request handler: (Hierna staat het in het register AL en mag ik er alles mee doen wat ik wil.)

Code: Selecteer alles

in al, 0x60
En nu hetzelfde in C?

Je kan niet alles in asm ook in C. Natuurlijk maken higher level languages de kansen op fouten kleiner, en door hun ontwerpstructuur maken ze het programmeren makkelijker en sneller. Maar jij zegt domweg dat asm tegenwoordig nutteloos is om nog te leren. Latijn is net zo nutteloos, want niemand spreekt het. Toch krijg je het zelfs op de middelbare school. Het gaat in beide gevallen dan om de basis, het achterliggende.
"Niet gehinderd door enige kennis van zaken..."

Gebruikersavatar
Berichten: 5.609

Re: Snel asm leren

Al aan redcode gedacht? Praktisch gebruik is 0, maar het is een zeer intellectuele uitdaging om een virus te schrijven dat efficiënter andere virussen uitmoordt dan het zelf uitgemoord wordt ;)

Verslavend. En het ligt vrij dicht bij assembler. En het stimuleert om echt efficiënt te beginnen programmeren.
What it all comes down to, is that I haven't got it all figured out just yet

And I've got one hand in my pocket and the other one is giving the peace sign

-Alanis Morisette-

Berichten: 185

Re: Snel asm leren

Overigens kan je naar mijn mening niet veel "assembler" leren omdat veel hardware echt van mekaar verschilt.
Laten we ervan uitgaan dat de meeste programmeurs hooguit twee types processoren in huis hebben die ze mogelijk willen aansturen in ASM, namelijk een x86 in hun PC en een in hun mobiel of PDA. Ja, die twee verschillen fors van elkaar. Maar het is heus mogelijk de volledige Asm van beide in je kop te krijgen. De volledige C++ reference uit je kop leren raad ik iedereen van harte af.
En hoe is dat, in alledaagse praktijksituaties vandaag de dag, precies van belang?
Ik weet niet hoeveel spaken een wiel van mijn fiets heeft, ik weet vrijwel niets over de samenstelling van het rubber van mijn banden en zelfs mijn fietsbel laat ik maar liever dichtgeschroefd. Maar ik ben wel blij dat er nog altijd voldoende mensen zijn die weliswaar geen van alle individueel ALLES van grondstoffen tot complete fiets weten, maar gezamenlijk beschikken ze wel over AL die kennis. Een van de verschillen tussen een Batavus van 1000 euro en een chineese cheapo fiets is dat er wat minder metallurgische kennis in die laatste zit, resultaat een roestbak.

De Romeinen waren qua wetenschap en techniek het meest ontwikkelde Europese volk van hun tijd (dankzij geimporteerde kennis uit de rest van Europa, voor-Azie en Egypte). Na de val van het Romeinse rijk verdween de meeste kennis weer... in Europa. Gelukkig waren de moslimlanden en Azie juist wel heel zuinig op de bestaande kennis en werd die daar fiks uitgebreid anders was het hier in de Renaissance ook niks geworden. In de tweede helft van onze middeleeuwen kwam er in de moslimlanden weer een eind aan de wetenschappelijke ontwikkeling door een veelheid aan factoren.

http://en.wikipedia.org/wiki/Islamic_science#Decline

Die geschiedenis kan zich op computergebied maar al te gemakkelijk herhalen.
Volgens dat argument zou het net zo belangrijk zijn dat je als programmeur elektrotechniek en micro-elektronica studeert, want dan leer je pas écht hoe een computer werkt. En als je die lijn doortrekt, dan eigenlijk ook natuurkunde en quantumfysica.
goedkope manier van het onderwerp belachelijk maken. Mijn fietsenmaker op de hoek hoeft geen metallurg te zijn, maar zonder bekwame metallurgen reed ik nu op een roestbak.
Vroeger was Asm ook handig (of zelfs noodzakelijk) om bepaalde hardware aan te kunnen sturen, zoals geluids- en videokaarten enzo. Dat is met de komst van Windows en drivers ook veranderd, nu zit daar een laag tussen
En hoe bouw je die laag? Hoe bouw je compilers? Hoe simuleer je andere hardware op je PC?
Dat is per definitie zo, want Asm is de enige taal die je computer kan uitvoeren. Iedere compiler zet een random taal om in Asm.
Asm is een voor mensen leesbare en schrijfbare programmeertaal die goed te structureren en te documenteren is. Je computer kent bits, bytes en words, meer niet. Heus geen Asm, laat staan dat er iets van je comments in de uiteindelijke machinetaal gehandhaaft blijft.

Heb je wel 's een gecompileerd programmaatje gedisassembled? Dat leest in de regel niet echt makkelijk terug.
Dat geldt natuurlijk voor iedere taal.
Bugs die al in compilers, libraries etc zitten blijven heel lang doorspoken en vermenigvuldigen zich naar elke volgende generatie programmeertalen die niet van de grond af in Asm maar in een bestaande hogere taal ontwikkeld zijn.
Sorry, maar dat is echt volstrekte onzin. Ten eerste maakt het voor 99.99% van alle programma-onderdelen geen drol uit of het uit geoptimaliseerde assembler bestaat of een domme conversie vanuit een "hogere" programmeertaal.
Ik was op mijn IBM PC van 4,77 MHz niet veel minder productief dan nu op mijn dual Xeon van 3 GHz, afgezien van het regelmatig wachten op disk swaps.
Scripts worden doorgaans niet gecompileerd, dus dat is niet helemaal eerlijk te vergelijken. Maar zelfs daar zul je het in de praktijk zelden merken (scripts runnen vaak online en dan is de bandbreedte vaker de bottleneck dan de uitvoersnelheid van het script).
Paintshop en Photoshop werken veel met scripts, offline. Heel veel mensen gebruiken Greasemonkey in Firefox. etc. En ik moet eerlijk zeggen dat ik ook zelf nog regelmatig een macrootje of Python scriptje gebruik om mijn computer te laten werken terwijl ik in mijn bedje lig.
Andersom is het ook zo: alles wat je in Asm kan, kan ook in C, en omgekeerd.
Het kostte me weinig moeite om dit te vinden, pag 96:

http://books.google.nl/books?id=HLztYyTUt_...ble&f=false
Ik wil niet de zuurpruim uithangen en Asm afkraken ofzo.
goh, hoe kan het dan dat ik die indruk wel kreeg?

Gebruikersavatar
Berichten: 5.679

Re: Snel asm leren

En nu hetzelfde in C?
Hier:

Code: Selecteer alles

#include <conio.h>

char c = _getch();
Verschil is alleen dat die van mij ook werkt op een Mac, Playstation, PDA, en straks ook op nieuwe PCs waarvan de CPU alleen nog maar 64bit Asm slikt ;)
Je kan niet alles in asm ook in C.
Ik kan een volledige cpu-emulator/virtualisator (zoals VMWare en VirtualBox enzo) in C maken. Die voert dan per definitie alles wat je in asm kan, uit in C.
Maar jij zegt domweg dat asm tegenwoordig nutteloos is om nog te leren.
Nou, ik zeg niet dat het compleet nutteloos is, er zijn tegenwoordig alleen veel andere zaken die eigenlijk nuttiger zijn, waar je in de praktijk meer profijt van hebt. Als je Asm voor de lol leert is dat geen argument. Maar als het je gaat om het praktisch nut dat je ervan hebt, dan kun je je tijd vruchbaarder gebruiken of efficiënter investeren. En Asm is zéker geen heilige graal voor het maken van übersnelle of foutloze programma's.
In theory, there's no difference between theory and practice. In practice, there is.

Gebruikersavatar
Berichten: 19

Re: Snel asm leren

... deftig ASM te leren. Ik kan al programmeren in OO-talen dus het probleem zit niet bij algoritmes
hi, van u verwacht ik hier de vraag "wat kan ik nou met asm?" wanneer u oop taal kent, deze vraag, in combinatie, met een idee over het toepassen van asm, kan een aanleiding zijn voor een antwoord op de vraag hoe "beter" asm kennis opdoen :P

en zonder dat tik je gewoon in google 'asm turotials' en daar ben je. ;)
'Anticipate charity by preventing poverty' (Mimoun Rambam)

Reageer