Μερικές φορές κατά τον προγραμματισμό μηχανικής επεξεργασίας, μπορεί να αντιμετωπίσετε μια κατάσταση όπου μια ομάδα τμημάτων προγράμματος εμφανίζεται πολλές φορές σε ένα μόνο πρόγραμμα ή χρησιμοποιείται σε πολλά προγράμματα. Μπορούμε να εξαγάγουμε αυτήν την ομάδα τμημάτων προγράμματος, να τα ονομάσουμε και να τα αποθηκεύσουμε ξεχωριστά. Αυτή η ομάδα τμημάτων προγράμματος ονομάζεται υπορουτίνα. Μια υπορουτίνα είναι ένα τμήμα προγράμματος μηχανικής κατεργασίας που μπορεί να κληθεί με κατάλληλες οδηγίες ελέγχου εργαλειομηχανών και γενικά έχει ανεξάρτητο νόημα κατά τη μηχανική κατεργασία. Το πρόγραμμα επεξεργασίας που περιέχει την οδηγία για την κλήση της υπορουτίνας πρώτου-επιπέδου ονομάζεται κύριο πρόγραμμα. Η εντολή για κλήση μιας υπορουτίνας είναι επίσης ένα τμήμα προγράμματος, το οποίο γενικά αποτελείται από την εντολή κλήσης υπορουτίνας, το όνομα της υπορουτίνας και τον αριθμό των κλήσεων. Οι συγκεκριμένοι κανόνες και μορφές ποικίλλουν ανάλογα με το σύστημα. Για παράδειγμα, για την ίδια οδηγία "καλέστε τον αριθμό υπορουτίνας 55 μία φορά", το σύστημα FANUC χρησιμοποιεί "M98 P55.", ενώ το αμερικανικό σύστημα AB χρησιμοποιεί "P55x".
Οι υπορουτίνες μπορούν να είναι ένθετες, δηλαδή το ένα επίπεδο μέσα στο άλλο. Η σχέση μεταξύ του ανώτερου και του κατώτερου επιπέδου είναι η ίδια με τη σχέση μεταξύ του κύριου προγράμματος και της υπορουτίνας πρώτου-επιπέδου. Ο μέγιστος αριθμός ένθετων επιπέδων καθορίζεται από το συγκεκριμένο σύστημα CNC. Η μορφή και η σύνθεση μιας υπορουτίνας είναι σε μεγάλο βαθμό τα ίδια με εκείνα του κύριου προγράμματος: η πρώτη γραμμή είναι ο αριθμός υπορουτίνας (όνομα) και η τελευταία γραμμή είναι η εντολή "τέλος υπορουτίνας", με το σώμα της υπορουτίνας ενδιάμεσα. Ωστόσο, η εντολή λήξης του κύριου προγράμματος τερματίζει το κύριο πρόγραμμα και επαναφέρει το σύστημα CNC. Οι οδηγίες του είναι τυποποιημένες, με κάθε σύστημα να χρησιμοποιεί M02 ή M30. Η εντολή τέλους υπορουτίνας, από την άλλη πλευρά, τερματίζει την υπορουτίνα και επιστρέφει στο κύριο πρόγραμμα ή στην προηγούμενη υπορουτίνα. Οι οδηγίες του διαφέρουν μεταξύ των συστημάτων. Για παράδειγμα, τα συστήματα FANUC χρησιμοποιούν M99, τα συστήματα Siemens χρησιμοποιούν M17 και τα συστήματα AB (Αμερικανικά A/B) χρησιμοποιούν M02.

