Noen ganger når du programmerer bearbeiding, kan du støte på en situasjon der en gruppe programsegmenter vises flere ganger i et enkelt program, eller brukes i flere programmer. Vi kan trekke ut denne gruppen av programsegmenter, navngi dem og lagre dem separat; denne gruppen av programsegmenter kalles en subrutine. En subrutine er et bearbeidingsprogramsegment som kan kalles opp av passende maskinverktøykontrollinstruksjoner, og det har generelt uavhengig betydning under bearbeiding. Maskineringsprogrammet som inneholder instruksjonen om å kalle subrutinen på første-nivå, kalles hovedprogrammet. Instruksjonen om å ringe en subrutine er også et programsegment, som vanligvis består av subrutineanropsinstruksjonen, subrutinenavnet og antall anrop. De spesifikke reglene og formatene varierer avhengig av systemet. For eksempel, for den samme instruksjonen «ring subrutine nummer 55 én gang», bruker FANUC-systemet «M98 P55.», mens det amerikanske AB-systemet bruker «P55x».
Subrutiner kan nestes, det vil si ett nivå i et annet. Forholdet mellom øvre og nedre nivå er det samme som forholdet mellom hovedprogrammet og subrutinen på første-nivå. Maksimalt antall nestede nivåer bestemmes av det spesifikke CNC-systemet. Formen og sammensetningen av en subrutine er stort sett den samme som i hovedprogrammet: den første linjen er subrutinenummeret (navn), og den siste linjen er instruksjonen "subrutineslutt", med subrutinekroppen i mellom. Imidlertid avslutter hovedprogrammets sluttinstruksjon hovedprogrammet og tilbakestiller CNC-systemet; instruksjonene er standardiserte, og hvert system bruker M02 eller M30. Subrutineavslutningsinstruksjonen, på den annen side, avslutter subrutinen og går tilbake til hovedprogrammet eller forrige subrutine. Instruksjonene varierer på tvers av systemer; for eksempel bruker FANUC-systemer M99, Siemens-systemer bruker M17, og AB (amerikanske A/B)-systemer bruker M02.

