2011-12-15 14 views
7

Spesso sento persone intorno a me che amano discutere di scrittura in linguaggio assembly e che è uno di quei motivi per cui voglio anche imparare a scriverlo. Attualmente sto imparando assembly e C insieme.Hai mai avuto bisogno di scrivere codice reale in linguaggio assembly?

Quindi, la mia domanda è quando hai mai bisogno di scrivere assembly in codice reale?
È solo bello imparare?
Ci sono dei veri utilizzi quando si scrive codice in C?

Tutti i commenti o le risposte utili saranno apprezzati!

+1

L'assembly non è più molto utile IMO, ma quando lo è, leggerlo è spesso più utile che scriverlo. – zneak

+1

Lo avrai bisogno ogni volta che il compilatore non lo taglia. Come il codice che si occupa di dati video, simulazioni scientifiche, alcune cose nel gioco, specialmente se si ha un budget di ciclo molto stretto, cose menzionate da Bashwork, ecc. È meno raro di quanto alcune persone riescano a capire. È raro nelle noiose applicazioni aziendali che ti risucchiano la vita quando le scrivi. – harold

risposta

4

È raro. Non ho mai avuto a 23 anni + di carriera. Ma io lavoro principalmente nello spazio applicativo del DB Client Server, ci sono lavori in cui lo userete molto o almeno avete bisogno di sapere come funzionano effettivamente i processori.

Tuttavia è stata la prima cosa che ho imparato, senza contare l'elettronica digitale di base, e direi che l'apprendimento è stato di grande aiuto per la mia carriera e la programmazione di hobby.

5

Stavo per scrivere un post lungo, ma ha deciso di riassumere invece:

  1. codice embedded, boot loader, backend compilatore
  2. sì, vi aiuterà a capire ed eseguire il debug di codice compilato
  3. l'unica volta che l'ho usato in c è per leggere il registro dell'orologio in tempo reale
8

Nonostante il fatto che la scrittura del codice in assembly sia diventata sempre più rara, è ancora molto buona da imparare n assemblea semplicemente per capire come funzionano le cose sotto il cofano. I moderni compilatori di ottimizzazione di C/C++ consentono di scrivere codice in C che si traduce in istruzioni di assemblaggio di altissima qualità, spesso superando ciò che si potrebbe scrivere manualmente a scapito di rendere il risultato meno leggibile (ad esempio inserendo istruzioni vuote per ottimizzare l'uso di Pipeline della CPU).

Se si scrive un compilatore per una nuova architettura, una libreria di livello molto basso o un sistema incorporato con rigidi vincoli di risorse, potrebbe essere necessario utilizzare l'assembly. Per tutto il resto, C e C++ andranno altrettanto bene o meglio.

2

Ho avuto molte occasioni in cui avevo bisogno di scrivere codice asm sul posto di lavoro, dove in C o non si potevano fare certe cose (ad esempio accedere a registri speciali della CPU o usare le istruzioni del sistema della CPU), o il codice C compilato era troppo lento o troppo grande (il compilatore non era abbastanza buono).

Tuttavia, la frazione del codice asm o del tempo trascorso a scriverlo era piuttosto insignificante.

Learning asm è buono. Ti fa "vedere" attraverso il tuo codice C, prevedere quali istruzioni e in quanti si trasforma in, stimare approssimativamente la velocità di parti di codice. Nel processo impari un numero di ottimizzazione e altri trucchi e alcuni algoritmi/metodi che puoi trasferire nel tuo codice C. Basta dare un'occhiata a quelle numerose domande sui puntatori C o sulla conversione di numeri tra aritmetica binaria e decimale o arbitraria di precisione. Conoscere asm aiuta con queste e altre cose.

3

L'uso professionale del linguaggio assembly è abbastanza comune nel mondo embedded. Ci sono molte applicazioni intorno a noi in cui i microcontrollori fanno cose semplici ma utili. Ad esempio, date un'occhiata allo tinyAVR family of microcontrollers from Atmel, in particolare ATtiny13 con la sua ridicolmente piccola memoria di programma da 1 kB e senza RAM, tranne per i 32 registri CPU a 8 bit. È incredibile, però, quali sono questi chip capable of.Quel chip costa circa un dollaro se acquistato in grandi quantità. Quindi, quando si produce una grande quantità di un dispositivo che richiede una logica semplice (o anche non abbastanza semplice), i risparmi nei costi di produzione hardware superano di gran lunga il sovraccarico di lavorazione manuale del codice in assembler per farlo funzionare su una piattaforma estremamente limitata.

2

L'ho fatto due volte nel 2011 fino ad ora, e per lo più lavoro sulla linea Java di app aziendali. È stato utile per montare un setup.exe rapido per avvolgere un JRE e l'installazione di un'app. Avrebbe potuto farlo in C, ma è più veloce afferrare e configurare un assemblatore che un compilatore e per un'applicazione così semplice il tempo di scrittura è paragonabile in entrambi i modi ... Usato anche per lavorare su un problema di interfacciamento con un dispositivo USB. Stava fallendo per ragioni sconosciute tramite JNA, così l'ho scritto in assemblea per essere sicuro di sapere dove andava e quando.

Problemi correlati