خیلی‌ها ممکنه علاقع داشته باشن بدونن اگر توی یه برنامه رو از کتاب‌خونه‌های استاندارد استفاده نکنیم چی میشه؟ برای این که یه برنامه رو با gcc بدون libc کامپایل کنیم، باید از این دستور استفاده کنیم: gcc main . cpp - nostdlib - m وقتی این جوری کامپایل کنیم دیگه لزومی به وجود تابع main نیست و به جاش برنامه از start _ شروع میشه. می‌دونیم که برای چاپ hello world باید msg رو توی stdout بنویسیم. stdout برای هر برنامه‌ای فایل شماره ه. پس باید این سیستم‌کال رو اجرا کنیم: آخر تابع start هم باید سیستم‌کال exit رو اجرا کنیم: ولی ما نمی‌خوایم از این تابع‌ها هم استفاده کنیم D : به خاطر همین اونا رو هم خودمون می‌نویسیم. توی لینوکس همه سیستم‌کال‌ها توسط اینتراپت شماره x اجرا می‌شن در واقع هندلر اینتراپت توی کرنل کارش اجرا کردن سیستم‌کال‌هاست. برای اجرای سیستم‌کال‌ها باید آرگمان‌های مورد نیازشونو رو توی رجیستر‌های پردازنده قرار بدیم و بعدشم دستور int $ x رو اجرا کنیم. نکته دیگه اینه که برنامه در انتها باید سیستم‌کال exit رو هم اجرا کنه. تو جدول زیر هم میشه چند تا سیستم‌کال خیلی پرکاربرد و به همراه شمارشون و رجیستر‌های ارگمان‌هاشون رو دید (منبع: این وبسایت : www . tutorialspoint . com / assembly _ programming / assembly _ system _ calls . htm ) : همون‌طور که توی جدول معلومه شماره سیستم‌کال باید توی رجیستر eax باشه برای write این شماره ه و برای exit این شماره ه. برای سیستم‌کال exit اول باید مقدار رو توی رجیستر eax بذاریم و بعدشم رو توی ebx بذاریم. در انتها باید درخواست اینتراپت x رو بدیم. پس exit ( ) این طوری میشه: برای write هم باید (شماره سیستم‌کال از جدول بالا) رو توی eax بذاریم، بعدش ebx باید باشه (شماره فایلی که همیشه مربوط به stdout ه) ، آدرس بافر (اینجا msg ) رو توی ecx و طول بافر رو توی edx . دو تا تغییر آخر نیاز به اکستنشن‌های اسمبلی gcc دارن. برای استفاده از اکستنشنا باید نتیجه‌هایی که می‌خوایم با متغییرا جایگزین بشن رو به ترتیب با اضافه بذاریم و بعد از دستور باید به ترتیب لیست متغییرایی که باید نتیجه در اون‌ها قرار بگیره، لیست متغیرایی که باید از مقدارشون استفاده بشه و لیست رجیسترایی که نباید از اون‌ها استفاده بشه رو مشخص کنیم: توی خط اول داریم می‌گیم msg رو بذار توی ecx . اون دو تا: هم برای اینه که لازم نبوده چیزی رو از رجیسترا بذاریم توی متغیرا. بعد: سوم هم، رجیسترایی که نمی‌خوایم مقدارشون تغییر کنه رو می‌نویسیم که اینجا خالیه. توی خط دوم هم طول msg رو می‌ذاریم توی edx این جا چون مقدار ecx برامون مهمه و نمی‌خوایم تغییر کنه بعد: سوم قرارش می‌دیم. اخرش فایل main . cpp این شکلی میشه: و اینم از نتجه: