Esiste un libro canonico sull'assemblea x86? [chiuso]


25

Ci sono molti libri sull'assemblea. Tuttavia, di solito si occupano di ISA di cui non mi interessa, come MIPS o ARM. Non mi occupo di queste architetture; non c'è motivo per me di provare ad impararli.

Ma i libri di assemblaggio x86 sembrano ... inesistenti.

Diciamo ad esempio che sto cercando di creare un compilatore di giocattoli che generi file eseguibili portatili di Windows.

Esiste un libro là fuori che è lo standard di fatto per la descrizione delle migliori pratiche, metodologie di progettazione e altre informazioni utili sull'assemblaggio x86? Che dire di quel libro lo rende speciale?


Quanta esperienza di assemblaggio hai? Hai mai provato a utilizzare GCC senza ottimizzazione per compilare semplici programmi C in assembly, per poi riprogrammare il codice in un programma C?
Brian,

10
@Brian: avrei bisogno di conoscere il montaggio prima di poterlo fare.
Billy ONeal,

Ho visto una copia del set di istruzioni x86. Sono 2 volumi e probabilmente il libro più grande che abbia mai visto. Buon divertimento :)
AngryBird,

2
Billy, se non conosci affatto l'assemblea, allora ognuno di loro sarebbe piuttosto buono da cui partire per ottenere le idee generali. L'assemblaggio è estremamente vicino all'architettura, quindi le istruzioni di assemblaggio riflettono notevolmente i progetti specifici dell'architettura. Ho iniziato con l'assembly x86 e ho letto "Assembly Language for Intel-Based Computer" di Kip Irvine. Il libro è stato effettivamente associato a una lezione online in un college della comunità. Non sono sicuro del tipo di discente che sei, ma trovo che l'istruzione guidata funzioni meglio per l'apprendimento.
Brian,

@Brian: cosa intendi con "qualcuno di loro"? Non capisco cosa sia "loro" - qualsiasi libro? Qualche assemblatore? Qualche ISA? Ho già giocato con l'assemblatore MIPS; Non riesco a trovare nulla su x86 però.
Billy ONeal,

Risposte:


18

Ho usato Assembly Language per processori x86 come un libro di testo quando ero al college e l'ho trovato molto facile da capire. Ho la quarta edizione precedente e l'ho confrontata con la sesta edizione e non ho notato molti cambiamenti, quindi probabilmente potresti prendere una copia più vecchia a buon mercato. Le persone si lamentano del suo uso della propria libreria per l'I / O, ma ti dice come farlo nel modo "difficile" negli ultimi capitoli.


1
Ottimo libro!
Coder

Ho letto la quinta edizione del libro di Irvine quando era intitolato "Assembly Language for Intel-Based Computers". :)
Brian,

1
Penso che questo sia un suggerimento piuttosto negativo, dal momento che la maggior parte della seconda edizione è specifica del sistema esoterico degli autori di alto livello che è essenzialmente una versione bastardizzata di C. Non ho mai letto la prima edizione pubblicata. La versione dos che puoi trovare gratuitamente sul suo sito e che non è mai stata pubblicata è comunque un'ottima lettura. È anche più lungo del 50% circa e non ha nulla a che fare con l'HLA (che è una totale perdita di tempo).
Evan Carroll,

1
@EvanCarroll Sono confuso. Hai modificato il link nel libro sbagliato, quindi hai criticato il libro a cui hai modificato il link. È stato involontario?
Merlyn Morgan-Graham,

1
totalmente un mio errore. @ MerlynMorgan-Graham bene con te sia per averlo catturato sia per averlo corretto.
Evan Carroll,


9

The Art of Assembly Programming è un'eccellente risorsa che ha un bel po 'di programmazione x86.

Anche la documentazione ABI x64 è utile. Stavo cercando di trovare un link alla versione che si trovava sul sito Web di AMD, ma non riesco a trovarlo più, quindi immagino che questo dovrà farlo.

Qualcosa che può aiutare abbastanza [un po '] durante l'apprendimento è, invece di provare a scrivere un'app completa da zero nell'assembly, invece scriverne la maggior parte in C (o qualsiasi altro linguaggio compilato in realtà) e quindi chiamare un pezzo di codice assembly da quella. Una volta fatto ciò, capovolgilo, scrivi un programma di assemblaggio e richiama alcune funzioni C.

Modifica: risolto un errore di battitura.


1
Un altro suggerimento: scrivere un semplice programma in C, compilarlo in assembly, ripulirlo in modo che l'assemblatore possa assemblarlo, quindi migliorare la versione dell'assembly. È un buon modo per ottenere alcune funzionalità minime (leggere dalla tastiera, scrivere sulla console) andando rapidamente.
TMN,

4

Un ottimo libro per l'apprendimento dell'Assemblea x86 sono gli strumenti di ottimizzazione del processore Pentium . Mentre l'obiettivo principale del libro è l'ottimizzazione del codice assembly, insegna lungo l'assemblaggio Pentium lungo il cammino ed è anche un buon libro di riferimento.

È esaurito da tempo ma non è difficile da trovare usato.

Viene fornito con un dischetto contenente un "ottimizzatore del codice assembly". In realtà non ottimizza il codice, ma produce invece un elenco commentato che indica dove si trovano le inefficienze come le bancarelle della pipeline.

Lo strumento che viene fornito con un libro è una versione limitata di un prodotto più ricco di funzionalità che la società dell'autore vendeva, ma per motivi che non ho familiarità con loro sono da tempo fuori mercato. Non so perché - Penserei che uno strumento del genere venderebbe come hotcakes.

x86 in generale è un argomento molto complesso in quanto vi sono molte varianti supportate da diversi modelli di microprocessori. Una volta che conosci le basi, ti consigliamo di consultare i database di Intel o AMD per il chip preciso che stai prendendo di mira. Sfortunatamente il codice che gira veloce su un modello di CPU potrebbe non essere così veloce su un chip diverso.


Non andare davvero per la performance; voglio solo essere in grado di generare binari. Daremo ancora un'occhiata :)
Billy ONeal,

2
Sarà inoltre necessario imparare a utilizzare un determinato assemblatore, non solo i codici operativi dell'assembly. Ogni assemblatore fa le cose in modo totalmente diverso. Se hai intenzione di scrivere molto codice assembly, usa masm in quanto è stato sviluppato pensando ai programmatori umani. Se hai appena intenzione di scrivere piccoli frammenti di assembly inline, puoi usare gcc con GNU come assembly inline (chiamato anche gas). GNU come 'sintassi è completamente diversa da quella di masm. Come è stato scritto principalmente per l'uso come back-end per gcc, per fare la generazione di codice eseguibile, e quindi non fornisce molte delle funzionalità che i programmatori umani vogliono.
Mike Crawford,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.