[x86-64] Goede boeken?

Pagina: 1
Acties:

  • RSpliet
  • Registratie: Juni 2003
  • Laatst online: 27-11-2025
Allereerst mijn excuses voor het vorige topic dat ik heb geopend met mijn 'relatief kort durende' zoektocht naar Assembler boeken. Nu heb ik daarna wat zitten, nee liggen, nadenken, en kwam ik tot de conclusie dat als ik nog wat wil hebben aan mijn Assembler/Assembly progsels, dat ik beter kan gaan beginnen op het x86-64 platform. Wrom dat? Da's nieuw. * RSpliet roept ala Bert Visser "Wow, Roy, vertel meer. Ik Hang aan je lippen!" :9.
Vandaar dus dit topic. Helaas wil ik een boek in boekvorm (duh) en niet in PDF/e-book vorm, wat dus het gigantische document op AMD.com een volledige no-go maakt. Wat kan ik gebruiken om x86-64 instructies te leren. Welke boeken zijn geschikt? Zijn er uberhaupt nu al boeken over? Zijn er leuke tutorials die ik tot er naslag in boekvorm is, kan gebruiken?

Oja, en zijn er goede uitleggen over wat ik wel en niet moet verwachten van Assembly (jaja, dat t erg moeilijk is weet ik wel, maar PHP van alleen een naslagwerk leren ook ;))?

[ Voor 11% gewijzigd door RSpliet op 16-02-2004 15:44 ]

Schaadt het niet, dan baat het niet


  • BoomSmurf
  • Registratie: Maart 2003
  • Laatst online: 23:42

BoomSmurf

Am-Ende!

Waar je x86-64 boeken vandaan haalt, geen flauw idee. Je kunt natuurlijk altijd die gigantische PDF uitprinten ;)

Over wat je wel en niet moet verwachten, assembly is iets dat je eigenlijk vrijwel alleen maar gebruikt voor compilerbouw en optimalisaties - al is het natuurlijk altijd goed om er veel van te weten, dit draagt aardig bij aan je kennis van de CPU op laag niveau :) Je kan er retesnelle dingen mee maken, maar vergeet niet dat het al heel veel werk kost om hele kleine dingen voor elkaar te krijgen.

Verder, zover ik weet - ik heb me er niet echt in verdiept - is x86-64 puur een extensie van x86 waar een aantal 64 bit registers, wat instructies (de 64 bit equivalent van MOV om een voor de hand liggend voorbeeld te noemen) en nog een paar van die dingen aan zijn toegevoetd. Dit moet vrij makkelijk terug te vinden zijn. Mijn mening is dan ook dat je eerst x86 assembly goed onder de knie moet krijgen (dmv bijvoorbeeld een goed boek) en dat dat dan vrij makkelijk uit te breiden is naar de AMD64 extensies. Maar zoals ik al zei heb ik me er niet echt in verdiept en zo het ook kunnen dat het niet zo is :-)

  • RSpliet
  • Registratie: Juni 2003
  • Laatst online: 27-11-2025
* RSpliet grijpt deze kans stiekem aan om dit topic een flinke knal omhoog te verkopen ;)

Extentie op, mooi, dan heb ik die boeken van intel.com niet voor niks besteld :). Programmeren op laag niveau lijkt me leuk(en moeilijk natuurlijk, WHO CARES!) maar waar moet ik aan denken als ik een bootable toepassing wil schrijven van redelijk niveau (zeg ffies, iets dat een Fat-schijf kan lezen... lijkt mij redelijk straightforward.) Gaat dat niet in de megabytes(gigabytes? 640K is enough for everyone!) lopen? Wat ik mij erbij voorstel is het direct aanspreken van apparaten zodat ze wat gaan doen. Dit met commando's als idd MOV om een blokje geheugen te verplaatsen. Dat schiet niet echt op, en is het handig een library voor een ander formaat te schrijven die dat ding leest, en de bijbehorende commando's uitvoert :p. Meer toelichting plz! :p En boeken ook altijd welkom :).

Schaadt het niet, dan baat het niet


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

Ze lijken toch wel in boekvorm te bestaan, getuige het plaatje ergens op de AMD site:
Afbeeldingslocatie: http://www.amd.com/us-en/assets/content_type/Additional/X86-64_Books_150x130.jpg
Ik heb ook wel eens mensen gezien op een ander forum die de boeken besteld hadden en ook gekregen, maar nu staat er overal 'only on CD-ROM'. Misschien dat ze de papieren versie niet meer zomaar weggeven (intel geeft je ook een CD-ROM als de boeken niet op voorraad zijn). Bovendien was het bestellen van die boeken alleen mogelijk in de US en Canada dus zowieso geen optie hier.
S3v3n_0f_n1n3 schreef op 16 februari 2004 @ 15:36:
Oja, en zijn er goede uitleggen over wat ik wel en niet moet verwachten van Assembly (jaja, dat t erg moeilijk is weet ik wel, maar PHP van alleen een naslagwerk leren ook ;))?
Wat je niet moet verwachten en veel mensen toch blijven doen is 'assembly => dus efficient'. Wat wel meestal geldt is 'assembly & hele goede programmeur => efficient'. Totdat je je flink hebt verdiept in assembly zal je code vrijwel altijd slechter draaien dan een C(++) programma. Wat je ook niet moet verwachten is dat assembly 'lower level' is dan C. Tenminste, wel op taalniveau, maar niet in mogelijkheden. Directe toegang tot hardware en dergelijke is al lang niet meer mogelijk met de huidige besturingssystemen (en dat is maar goed ook). Je kunt met assembly niet meer dan met C, je kunt dingen wel op andere manieren doen.

Afgezien daarvan kan assembly je een heel goed beeld geven van de CPU, geheugen, efficientie etc. Dus ik raad het zeker aan er eens naar te kijken, het is wel erg leerzaam.

Kijk anders ook even op mijn site, daar staat een basistutorial en nog wat uitgebreidere (meer op win32 gerichte) tutorials.

www.madwizard.org


  • RSpliet
  • Registratie: Juni 2003
  • Laatst online: 27-11-2025
madwizard schreef op 18 februari 2004 @ 19:43:
Directe toegang tot hardware en dergelijke is al lang niet meer mogelijk met de huidige besturingssystemen (en dat is maar goed ook).
Ik wil dus juist ZONDER tussenkomst van een OS leren programmen. Vermoedelijk kom ik dan tot de conclusie dat ik toch beter C kan leren, maar daar heb ik net een extra stimulans voor nodig denk ik (sjeez, wat ken ik mezelf goed :p).

Schaadt het niet, dan baat het niet


  • madwizard
  • Registratie: Juli 2002
  • Laatst online: 26-10-2024

madwizard

Missionary to the word of ska

S3v3n_0f_n1n3 schreef op 18 februari 2004 @ 20:17:
[...]
Ik wil dus juist ZONDER tussenkomst van een OS leren programmen. Vermoedelijk kom ik dan tot de conclusie dat ik toch beter C kan leren, maar daar heb ik net een extra stimulans voor nodig denk ik (sjeez, wat ken ik mezelf goed :p).
Sorry had je post idd wat beter moeten lezen |:(. Zonder OS heb je uiteraard wel volledige controle, maar daar heb ik weinig ervaring mee. Ik geloof dat er wel ergens een post als 'hoe schrijf ik een OS' rondhangt hier, daar staat vast wel wat nuttige info in.

www.madwizard.org


Verwijderd

ik heb assembly geleerd uit computer systems a programmers view.
dit behandeld niet alleen assembly maar, ook de architectuur van proccesors en waarom de ene manier van code schrijven sneller is dan de andere.
Dit boek behandeld meer assembly uit het oogpunt: ik schrijf c code maar een bepaald deel van mijn code werkt niet efficient even kijken wat voor assembly mijn compiler er van gemaakt heeft en of ik dat beter kan.

Er staat uiteraard niks in over x86-64 maar als je eenmaal assembly kan is de stap naar x86-64 assembly vrij klein. Dit kun je dan wel terug vinden in de docementatie van amd.

Verder is het alleen nuttig om te leren als je of je eigen OS wilt maken en/of je eigen compiler of je systeem programmeur wilt worden.
Als je nog geen c kan zou ik dat eerst maar leren.

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

S3v3n_0f_n1n3 schreef op 16 februari 2004 @ 15:36:
Oja, en zijn er goede uitleggen over wat ik wel en niet moet verwachten van Assembly
Dat je over elk klein dingetje uren gaat doen :) Dat als je ook maar een simpel programma wilt maken, het zeker enkele duizenden regels gaat worden. Dat het waarschijnlijk niet veel sneller, of zelfs langzamer, draait dan wat je C compiler uitspuugt. Dat je een heel goed beeld krijgt van hoe de machine werkt, en dat is wel weer nuttig als je later met C pointers ed. werkt.

Om snelle code te schrijven is heel veel werk (maar wel leuk). Voor de pentium gaat het bv zo:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  Fld   [ebp.Xpoint]    ;127
  Fsub  [esi.Xpoint]    ;128-130
  Fld   [edi.Ypoint]    ;129
  Fsub  [esi.Ypoint]    ;130-132       ;y2y1,x3x1,iy3y1 
  Fxch  st(1)           ;130           ;x3x1,y2y1,iy3y1 
  Fmul  st(0),st(2)     ;131-133       ;dxl,y2y1,iy3y1
  Fld   [esi.Ypoint]    ;132
  Fadd  [Flt2Fix]       ;133-135
  Fld   [edi.Ypoint]    ;134
  Fadd  [Flt2Fix]       ;135-137
  Fxch  st(1)           ;135           ;y1,y2,dxl,y2y1,iy3y1
  Fld   [Co1]           ;136           ;1,y1,y2,dxl,y2y1,iy3y1
  Fxch  st(2)           ;136           ;y2,y1,1,dxl,y2y1,iy3y1

  Fstp  [Y2]            ;138-139
  Fstp  [Y1]            ;140-141       ;1,dxl,y2y1,iy3y1

  Fdiv  st(0),st(2)     ;142-180       ;iy2y1,dxl,y2y1,iy3y1
;------------Calculate Ceiled Y values and poly length while FDIV-------------
  mov   eax,dword ptr [Y2]
  mov   ebx,dword ptr [Y1]

  add   eax,0FFFFh                      ;Ceil
  add   ebx,0FFFFh


Je moet steeds bijhouden wat er in je FPU staat, hoeveel tikken alles inneemt, en wat er bij elkaar in de pipeline gaat en dus overlapt. Tientallen vervelende regeltjes, die je C compiler heel goed kent. En dan hebben we het nog niet eens over chip specifieke extensies als mmx, 3dnow, etc.

Kortom, je kan iets van assembler leren als achtergrond informatie over hoe de machien werkt, maar dan zou ik daarna toch echt over stappen op C++. En als je dat wilt hoef je niet de allernieuwste specificatie te hebben.

  • JeroenB
  • Registratie: November 1999
  • Laatst online: 30-04 12:16
Koop gewoon een goed x86-boek. Ik heb toevallig de documentatie van Intel's IA32E 64-bit extensies zitten lezen (alleen de introductie en wat gebladerd door de rest) en de conclusie is dat het voor een programmeur exact hetzelfde blijft werken als voorheen. Er zijn wat nieuwe prefixes en in de 64-bit mode gaat de adressering een tikkeltje anders (we kunnen niet meer bij AH! AARGH! hehe) maar als je je verdiept in x86 dan is x86-64 maximaal 1% extra werk achteraf.

Als je, zoals ik hierboven lees ook wilt programmeren op systeemniveau, dan zijn de boeken van Tanenbaum erg goed. Modern Operating Systems en Operating Systems: Design and Implementation.

[ Voor 1% gewijzigd door JeroenB op 19-02-2004 14:02 . Reden: IA43E? Dat moest IA32E zijn :) ]

Pagina: 1