Avatar billede stephanryer Nybegynder
05. september 2006 - 13:25 Der er 9 kommentarer og
2 løsninger

Assembly-programmering for en begynder

Jeg har lige fikset en lille stump kode, der finder primtal. Dette har jeg lavet i .NET.

Jeg kom derefter til at tænke på, hvor hurtigt det ville gå hvis progammerede det tilsvarende i assembly og på en måde kørte det på en maskine helt uden styresystem.

- På hvilket lav-niveau er det realistisk at programmere et sådan program?
- Er det utopisk af mig at tro jeg vil kunne køre det uden styresystem?
- Hvis nu jeg udviklede det i assembly og kørte det i XP ville forskellen så være stor i forskel til programmet udviklet i .NET, som jo kører på en vitual machine?
- Og hvor kan man komme igang med dette, hvis man er helt ny i assembly?

Alle relevante kommentarer værdsættes.

På forhånd tak.
Avatar billede jakoba Nybegynder
05. september 2006 - 14:28 #1
med Assembler kunne du sandsynligvis gøre programmet 10-100 gang hurtigere. Det er værd at notere at det rent faktisk ikke er så vældig meget. Istedet for "alle primtal op til 10^8" ville du så finde "alle primtal op til 10^10". Du kan sædvanligvis få langt større effekt ud af at optimere din algoritme.

- På hvilket lav-niveau er det realistisk at programmere et sådan program?
  Helt ned på assembler niveau

- Er det utopisk af mig at tro jeg vil kunne køre det uden styresystem?
  Stort set ja. Styresystemet gør en hulens masse ting som du så ville blive nødt til at programmere selv. Styre harddisken fx. men et assembler program kan også sagtens køre under Windows.

- Hvis nu jeg udviklede det i assembly og kørte det i XP ville forskellen så være stor i forskel til programmet udviklet i .NET, som jo kører på en vitual machine?
  Ja, Lidt mere end jeg nævnte først, Den Virtuelle Maskine er en ekstra omkostning.

- Og hvor kan man komme igang med dette, hvis man er helt ny i assembly?
  Som sedvanligt vil jeg anbefale du starter med et LILLE projekt. Skær ambitionsniveauet helt ned til benet før du overhovedet går igang, ingen kønne vinduer, ingen brugerinput, bare en masse tal i en fil, så har du gode chancer. Here er et par sites:
http://www.programmersheaven.com/zone5/index.htm
http://www.xs4all.nl/~smit/asm01001.htm  gode forklaringer.

Ofte når et program skal optimeres med assembler vælger man nogle få dele af programmet og skriver bare dem som subrutiner i assembler. Som regel bruger programmet 90% af sin tid i 10% af koden så ved at optimere bare de 10% kode tjener du 90% af den mulige forbedring. Og samtidig kan du så bruge alle de fancy biblioteks funktioner til at tegne vinduer osv. Jeg ved ikke hvordan det gøres i .net, men jeg er 100% sikker på at .net også har et lavniveau interface (ligesom JNI i Java)

mvh JakobA
Avatar billede stephanryer Nybegynder
05. september 2006 - 16:10 #2
Hej Jakoba. Respekt for den fyldestgørende kommentar.

"Som sedvanligt vil jeg anbefale du starter med et LILLE projekt."
- Ja helt klart. Jeg havde ikke engang tænkt mig at skrive til en fil. Kun skrive til dos-prompten eller på anden måde vise tekst.

"Ofte når et program skal optimeres med assembler vælger man nogle få dele af programmet og skriver bare dem som subrutiner i assembler"
- Yes, har ingen ambitioner om at lave store programmer. Kun lige få fyret den samme algoritme af, som jeg har lavet i .NET for at se forskellen.

"Jeg ved ikke hvordan det gøres i .net, men jeg er 100% sikker på at .net også har et lavniveau interface"
- Jeg har slet ikke tænkt mig at kombinere det jeg vil lave i assembly med noget som helst andet. Jeg gør det her af nysgerrighed :)

Jeg kigger lige på linksene.
Avatar billede stephanryer Nybegynder
05. september 2006 - 16:37 #3
Prøver at følge den her tutorial du gav et link til "http://www.xs4all.nl/~smit/asm01001.htm", men jeg mangler vist en compiler eller assembler eller?

Ved du hvad det er jeg skal have? Synes ikke at kunne finde noget specifikt information om en sådan på siden.
Avatar billede stephanryer Nybegynder
05. september 2006 - 16:45 #4
Har fundet det her link: http://shsc.info/BeginnersPCAssembly#titelanker1

Det er en noget nyere side, hvis sidste opdatering skete for ikke mange dage siden :)
Avatar billede stephanryer Nybegynder
05. september 2006 - 16:46 #5
lol, det har ik noget med assembly at gøre ;) Der var jeg lidt for hurtig.
Avatar billede arne_v Ekspert
05. september 2006 - 18:07 #6
- På hvilket lav-niveau er det realistisk at programmere et sådan program?

prim tal kan sagtens kodes i assembler

- Er det utopisk af mig at tro jeg vil kunne køre det uden styresystem?

lidt afhængig af definition af styre system vil der vel altid være
et styre system !?!?

- Hvis nu jeg udviklede det i assembly og kørte det i XP ville forskellen så være stor i forskel til programmet udviklet i .NET, som jo kører på en vitual machine?

Sandsynligvis ikke.

Forskellen mellem assembler og normal HLL er som oftest meget lille.

Forskellen mellem AOT og JIT compilering er som oftest meget lille.

Hvis der skal være markant forskel, så skal du finde "en fidus", et eller andet
som du kan i assembler osm compileren ikke kan finde ud af.

- Og hvor kan man komme igang med dette, hvis man er helt ny i assembly?

Man starter med hello world og tager den så derfra. Ofte er det en fordel
at starte med at kalde noget assembler kode fra HLL, fordii nogen assembler
varianter er det lidt tricky at lave et hoved program.
Avatar billede stephanryer Nybegynder
05. september 2006 - 18:33 #7
"Hvis der skal være markant forskel, så skal du finde "en fidus", et eller andet
som du kan i assembler osm compileren ikke kan finde ud af."

Ok, så dropper jeg mit lille eksperiement. Troede bare det var generelt at der var stor performance at hente ved selv at kode det i assembler.

Læg begge et svar.
Avatar billede arne_v Ekspert
05. september 2006 - 19:33 #8
For 10-20 år siden har jeg tit siddet og svedt over at finde en
10% gevindst.

Nogle enkelte gange kan man finde 200%, hvis man kan finde et shortcut.

Men det er sjældent.

Og et svar.
Avatar billede jakoba Nybegynder
06. september 2006 - 14:56 #9
Til windows maskiner bruger de fleste MASM.
http://webster.cs.ucr.edu/AsmTools/MASM/index.html

god og gratis. En søgning på
      MASM download
giver næsten 100.000 hits, hvor de fleste er steder du kan downloade den.

Men den findes i et utal antal versioner, så se dig for at du ikke kommer til at hente en oldgammel en der kun supporterer fx Intels 80186 chip. der er sket meget siden MASM var ung :-))
Avatar billede jakoba Nybegynder
06. september 2006 - 14:59 #10
nå ja. takker.
Avatar billede stephanryer Nybegynder
06. september 2006 - 15:00 #11
ok, well læg et svar Jakoba.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester