Domanda

I miei obiettivi si concentrano sullo sviluppo di applicazioni software e forse sullo sviluppo di applicazioni Web, ma molto probabilmente su applicazioni desktop.Sto intraprendendo un percorso per acquisire maggiore familiarità con C/C++, ma dovrei andare molto più in basso, nell'assembly?Oppure non avrei alcun beneficio per i miei obiettivi a lungo termine?

È stato utile?

Soluzione

Probabilmente non porterà molti benefici a meno che tu non abbia un'applicazione diretta per questo.Se hai una conoscenza generale, C/C++ è un buon punto di partenza.

Detto questo, le sfide poste dall’assemblaggio sono molto interessanti e richiedono una mentalità piuttosto diversa per portare a termine le cose.

Ho passato un po' di tempo ad imparare l'assemblaggio dello Z80 programmando il file TI-86 calcolatrice.Il set di istruzioni dello Z80 è piuttosto piccolo e la novità di programmare una calcolatrice in assembly è molto divertente.

ticalc.org ha molte buone risorse Programmazione dell'assieme TI.

Altri suggerimenti

Sono davvero sorpreso di vedere così tante risposte "no" a questa domanda.Penso che tu Dovrebbe imparare l'assemblaggio.

Non mi aspetto che lo farai mai utilizzo assemblaggio direttamente come parte del vostro lavoro.Ma non ne consegue che non dovresti impararlo.

L'assemblea di apprendimento ti insegnerà cosa sta succedendo all'interno del computer.Ti aiuterà a capire cosa sta effettivamente facendo il software.

È davvero una questione di professionalità.Diventerai un ingegnere informatico professionista?O hai intenzione di fare un copia e incolla?Certo, quest'ultimo può pagare le bollette, ma essere un professionista è molto più soddisfacente.

Sentire qualcuno dire: "No, non preoccuparti di imparare l'assemblaggio", suona alle mie orecchie come "Ecco il libro di ricette per costruire ponti.Non è necessario conoscere la fisica o l'ingegneria per costruire un ponte.Basta seguire queste ricette." No, grazie.

Buongiorno,

Ho imparato l'assemblatore PDP quando ho fatto il mio Elect.L'Ing.laurea alla fine degli anni '70.L'ultimo dialetto assembler che ho realmente utilizzato aveva quattro diverse modalità di indirizzamento della memoria.L'ultimo dialetto che ho guardato aveva 17 modalità!

Non sono sicuro di cosa ti offra veramente l'assemblatore di apprendimento al giorno d'oggi.Allora era una parte essenziale di un flusso CS tra i miei eletti.ing.grado.

Per quanto riguarda l'apprendimento del C++, mi siedo e lavorerei "C++ accelerato" che si avvicina al C++ a pieno titolo e non come "C con altri bit".

Per quanto riguarda C, lavorerei semplicemente con l'ultima versione di "Linguaggio di programmazione C" (alias) K'n'R

Spero che questo ti aiuti.

Saluti, Rob

Ora, se mi avessero chiesto della nanoprogrammazione...(-:

"Vale la pena imparare un dialetto assembleare?"

Ho programmato l'assemblaggio in modo professionale.M68k con fax e scanner.Anche i VxD di Windows (driver di dispositivo virtuale) erano presenti in Windows 3/3.1 giorni prima che avessero un vero kernel.

Quando si codifica l'assembly per eseguire normali attività di tipo software (copia della memoria, concatenazione di stringhe, chiamata di gestori di interruzioni, ecc.), è piuttosto interessante.A volte si codifica l'assembly in modo che venga chiamato dal codice C per eseguire alcune attività specializzate il più velocemente possibile su un determinato processore.Ciò può essere più interessante perché stai cercando modi per sfruttare ogni ciclo offerto dal processore.Ti interessa cosa c'è nella cache L1 del processore.Ti preoccupi di allineare i dati in memoria per evitare colpi di cacheline (se ricordo il termine).Ti interessa l'architettura del processore a doppia pipeline e l'utilizzo delle giuste 2 o 3 o 4 istruzioni nell'ordine giusto in modo che 2 o 3 o 4 cose accadano con un singolo tick di clock (-uno- di quegli HZ nell'XgHz del processore).

Quando codifichi un assembly per guidare hardware personalizzato, ora stai facendo cose come riempire un buffer di memoria da 16 byte, impostare un'operazione DMA e inviare quei dati a un controller che sta facendo qualcosa come guidare il tamburo di una stampante laser.E il tamburo gira e non può essere fermato e vuole i prossimi 16 byte entro i prossimi 5us.Naturalmente ciò può essere fatto in C o C++.Ma gli esempi sono infiniti.

Forse tagliare l'ultima metà della tua domanda "Vale la pena imparare un dialetto di assemblaggio?" E fai "vale la pena imparare?"

Se ami la programmazione, il modo in cui definisci il "valore" coinvolge alcune componenti dell'amore per la programmazione.In questo senso, non ho mai imparato qualcosa nella programmazione e non ho pensato che ne valesse la pena.Anche se non l'ho usato molto dopo.

Nello stesso senso, direi quasi che più una cosa è difficile da imparare, più “vale” la pena.

Ma a parte tutte queste stronzate, credo che valga la pena di avere almeno un po' di background sull'assemblaggio.Vai avanti e scopri come scrivere l'assembly per sostituire alcune semplici routine stdlib come strcpy, memmove ecc.Quindi prova a ottimizzarli, chiamandoli da C un milione di volte durante il cronometraggio.

Non inizierei a imparare l'ASM.Se vuoi imparare il C/C++, inizia con quello.Man mano che la qualità del tuo codice matura, potresti scoprire di avere bisogno di ASM.Il 99% delle volte non lo farai, ma ogni tanto potresti averne bisogno.

Inoltre, è utile conoscere ASM in termini di comprensione di cosa sta facendo C/C++ dietro le quinte.Ma ancora una volta, finché non diventerai più avanzato, probabilmente non ne avrai bisogno.

L'ho fatto e penso che mi abbia aiutato in quel momento.Non mi aiuta più giorno per giorno, ma penso che dipenda dal tuo lavoro.

Ho imparato l'assemblatore 20 anni fa su un Commodore e di nuovo all'Università su un mainframe IBM.Non posso dire che mi aiuti nel mio lavoro attuale.

Sono d'accordo con Marco.Penso che sia simile all'apprendimento di MSIL quando si scrive in C#, VB.NET o un altro linguaggio .NET.È utile sapere cosa succede dietro le quinte, ma potresti passare tutta la vita a creare applicazioni che funzionano e non averne mai bisogno.

NO.A meno che tu non voglia farlo per divertimento, non hai davvero bisogno di imparare l'assemblaggio.

Ci sono alcune cose per cui devi conoscere l'assemblaggio, come la creazione di driver, lo sviluppo del sistema operativo, lo sviluppo di exploit, ma a parte questo, personalmente credo che tu possa tranquillamente programmare per sempre senza saperlo.

Se hai bisogno di imparare l'assemblaggio, lo saprai: non lo imparerei tanto per il gusto di impararlo.

Se stai scrivendo C++ non gestito, a volte è prezioso conoscere almeno l'assembly x86 di base, i sistemi di numeri binari, ecc.Mi occupo principalmente di sviluppo C/C++ e occasionalmente ho bisogno di eseguire il debug del codice di produzione per errori così specifici per la rappresentazione del codice macchina prodotta dal compilatore che l'unico modo per trovare e quindi correggere il bug è leggere l'assembly decompilato e accertare perché il compilatore lo ha generato come tale.

Per ulteriori informazioni sull'assemblaggio, vedere la domanda: Qual è il modo migliore per imparare l'Assemblea?Nello specifico, per qualcuno che ha esperienza in linguaggi dinamici.

Il montaggio non è molto difficile.Una volta acquisita familiarità con C, trascorri un giorno o due imparando l'assemblaggio di base.La sua utilità in termini di debug è straordinaria, inoltre è divertente poter scrivere codice che batte l'equivalente C in termini di velocità di un fattore 10, 15 o più.

Non suggerirei di imparare un "linguaggio assembler moderno".

Tuttavia conoscendone un po ' MOS6510 Assemblatore e sfogliando lo smontato C64 Kernel, aliasè il sistema operativo e l'interprete BASIC, mi ha aiutato molto a capire cosa sta succedendo all'interno di un computer, cose come interruzioni e pagine di memoria.

Questo potrebbe aiutarti a darti suggerimenti su come scrivere codice ottimizzato in altri linguaggi.Gran parte di questo, tuttavia, è già stato fatto dai compilatori moderni, quindi lo suggerirei solo se sei interessato a cosa succede all'interno di quella scatola nera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top