گاهی اوقات هنگام برنامه نویسی ماشینکاری، ممکن است با وضعیتی مواجه شوید که گروهی از بخش های برنامه چندین بار در یک برنامه ظاهر می شوند یا در چندین برنامه استفاده می شوند. میتوانیم این گروه از بخشهای برنامه را استخراج کنیم، نامگذاری کنیم و جداگانه ذخیره کنیم. به این گروه از بخش های برنامه، زیر روال می گویند. یک زیر روال یک بخش برنامه ماشینکاری است که می تواند توسط دستورالعمل های کنترل ماشین ابزار مناسب فراخوانی شود و به طور کلی در حین ماشینکاری معنای مستقلی دارد. برنامه ماشینکاری که حاوی دستورالعمل فراخوانی زیربرنامه{3} سطح اول است، برنامه اصلی نامیده می شود. دستورالعمل فراخوانی یک زیربرنامه نیز یک بخش برنامه است که عموماً از دستور فراخوانی زیربرنامه، نام زیربرنامه و تعداد تماس ها تشکیل شده است. قوانین و قالب های خاص بسته به سیستم متفاوت است. به عنوان مثال، برای همان دستورالعمل "یک بار با زیربرنامه شماره 55 تماس بگیرید"، سیستم FANUC از "M98 P55." استفاده می کند، در حالی که سیستم AB آمریکایی از "P55x" استفاده می کند.
زیربرنامه ها را می توان تو در تو، یعنی یک سطح در سطح دیگر. رابطه بین سطوح بالا و پایین مانند رابطه بین برنامه اصلی و زیر روال سطح اول- است. حداکثر تعداد سطوح تو در تو توسط سیستم CNC خاص تعیین می شود. شکل و ترکیب یک زیربرنامه تا حد زیادی مشابه برنامه اصلی است: خط اول شماره زیربرنامه (نام)، و خط آخر دستورالعمل "پایان زیربرنامه" است که بدنه زیربرنامه در بین آن قرار دارد. با این حال، دستورالعمل پایان برنامه اصلی برنامه اصلی را خاتمه می دهد و سیستم CNC را بازنشانی می کند. دستورالعمل های آن استاندارد شده است و هر سیستم از M02 یا M30 استفاده می کند. از سوی دیگر، دستور پایان زیربرنامه، زیربرنامه را خاتمه می دهد و به برنامه اصلی یا زیربرنامه قبلی باز می گردد. دستورالعمل های آن در سیستم ها متفاوت است. برای مثال، سیستمهای FANUC از M99، سیستمهای زیمنس از M17 و سیستمهای AB (A/B آمریکایی) از M02 استفاده میکنند.

