Un microcontrôleur peut effectuer la plupart des instructions machine habituelles, avec certaines restrictions liées à son caractère embarqué (taille restreinte des mots machine, petite taille disponible, etc.). On note cependant quelques particularités.
Les capacités mathématiques sont en général particulièrement limitées, réduites à des additions, soustractions et décalages sur des octets pour les plus simples d'entre eux. Les calculs mathématiques évolués doivent donc être ramenés à une succession d'opérations simples portant seulement sur des octets. Des routines mathématiques (petits programmes permettant de réaliser les calculs complexes) ont été développées pour la plupart des microcontrôleurs populaires.
Les instructions d'entrée-sortie sont bien développées, de façon à pouvoir :
Les microcontrôleurs disposent généralement de nombreuses instructions dédiées aux opérations sur les bits, de façon à rendre les programmes plus compacts, notamment lorsqu'ils agissent sur une entrée-sortie donnée. Ainsi, un processeur généraliste peut avoir besoin de plusieurs instructions pour tester la valeur d'un bit d'un registre et effectuer un saut si le bit vaut vrai. Cette fonction courante est assurée par une seule instruction dans certains microcontrôleurs.
Les modes d'adressage utilisables sont en général semblables à ceux des autres processeurs.
De façon générale, les instructions et modes d'adressage disponibles varient fort selon les familles de microcontrôleurs.
Certains microcontrôleurs suivent une architecture Harvard : ils possèdent des bus séparés pour la mémoire de programme et la mémoire de données, ce qui permet aux accès d'avoir lieu en même temps (on parle d'accès concurrent). Lorsqu'on utilise une architecture Harvard, les mots de programme peuvent avoir une largeur (nombre de bits) différente de celle des mots de la mémoire de données et des registres. Par exemple, il peut y avoir des instructions de 12 bits et des registres de données de 8 bits.