Uneori, atunci când programați prelucrarea, puteți întâlni o situație în care un grup de segmente de program apare de mai multe ori într-un singur program sau este utilizat în mai multe programe. Putem extrage acest grup de segmente de program, le putem numi și le stoca separat; acest grup de segmente de program se numește subrutină. O subrutină este un segment de program de prelucrare care poate fi apelat de instrucțiunile de control adecvate ale mașinii-unelte și, în general, are o semnificație independentă în timpul prelucrării. Programul de prelucrare care conține instrucțiunea de apelare a subrutinei de prim-nivel se numește program principal. Instrucțiunea de a apela un subprogram este, de asemenea, un segment de program, care constă în general din instrucțiunea de apelare a subrutinei, numele subprogramului și numărul de apeluri. Regulile și formatele specifice variază în funcție de sistem. De exemplu, pentru aceeași instrucțiune „apelați o dată numărul subrutinei 55”, sistemul FANUC folosește „M98 P55.”, în timp ce sistemul american AB folosește „P55x”.
Subrutinele pot fi imbricate, adică un nivel în interiorul altuia. Relația dintre nivelurile superior și inferior este aceeași cu relația dintre programul principal și subrutina de la primul-nivel. Numărul maxim de niveluri imbricate este determinat de sistemul CNC specific. Forma și compoziția unui subprogram sunt în mare parte aceleași cu cele ale programului principal: prima linie este numărul subprogramului (numele), iar ultima linie este instrucțiunea „sfârșitul subprogramului”, cu corpul subrutinei între ele. Cu toate acestea, instrucțiunea de sfârșit a programului principal încheie programul principal și resetează sistemul CNC; instrucțiunile sale sunt standardizate, fiecare sistem utilizând M02 sau M30. Pe de altă parte, instrucțiunea de încheiere a subrutinei termină subprogramul și revine la programul principal sau la subprogramul anterior. Instrucțiunile sale variază în funcție de sistem; de exemplu, sistemele FANUC folosesc M99, sistemele Siemens folosesc M17, iar sistemele AB (American A/B) folosesc M02.

