Le langage assembleur permet aussi d’utiliser au maximum les capacités du matériel présent sur l’architecture sur laquelle le programme est développé. Il est ainsi possible d’accéder directement aux entrées-sorties et de contrôler les modes d’adressage d’un processeur. Il n’est donc pas rare de retrouver du code assembleur dans plusieurs systèmes d’exploitation. Il permet aussi des optimisations qui ne sont pas possibles par exemple avec les langages C ou C++. On pourra donc récupérer le code assembleur généré par le compilateur afin d’en optimiser certaines parties pour rendre l’exécution d’un programme encore plus rapide.
Il faut garder en tête qu’un programme est très rarement écrit totalement en assembleur. On tentera généralement d’identifier les parties critiques d’un programme (généralement les fonctions les plus souvent utilisées par le programme) afin des les optimiser au maximum. Avant de débuter, il est important d’examiner quelques-uns des avantages et des inconvénients de ce langage.
Avantages : Permet de générer du code compact et très rapide. Gestion de la mémoire virtuelle, gestion direct du matériel. Permet de faire le pont entre deux langages qui sont à la base incompatibles entre eux. Gestion directe des registres du processeur, de la mémoire et des entrées/sorties.
Inconvénients : Temps de développement beaucoup plus long. Généralement non portable (une seule architecture seulement). Difficile à optimiser pour différentes "révisions" de la même architecture (différences entre le pentium I et le pentium III par exemple). Programmes durs à maintenir.