ولی من این رو نمی دونم که وقتی مثلا می نویسیم printf دقیقا چه اتفاقی می افته تا نمایش داده بشه
کلا ارتباط به محیط های IO مثل کی بورد چه طور اتفاق می افته
اگر بخواهم خیلی کلی بگم! کلیه عملیاتهای I/O در پردازشگر توسط دستور INT که دستوری است جهت اجرای وقفه های BIOS اجرا میشوند پس بنابراین وقتی میخواهیم به CPU اعلام کنیم میخواهیم محتوای آدرسی از حافظه را در یک خروجی معتبر نمایش بده(مثلا مانیتور) از وقفه int 21 استفاده میکنیم! همینطور الی آخر...
البته استفاده از وقفه ها بیشتر در پردازشگر های نسل 8086و80286و80386 مرسوم بود، در اسمبلرهای امروزی مانند nasm که 64 بیتی هستند شما دیگه درگیر نوشتن وقفه ها نمیشید و از توابع سطح پایین C را به راحتی call میکنیم بنابراین هم سرعت خیلی بهتر شده وهم برنامه نویسی با اسمبلی خیلی امن تر شده! البته این کاری هست که کامپایلر های قدرتمند امروزی مثل gcc هم انجام میدن یعنی لینکرها میان این لایبرری ها را به کد های شما لینک میکنند.
به هرحال توصیف عملکردهای سطح پایین توی 2 الی 3 خط امکانپذیر نیست!
مثلا می خواهیم یه کلید از کی بورد رو بخونیم
منظورم این که از کدوم تابع استفاده کنیم نیست بلکه اون تابع چه طور این ارتباط رو با سخت افزار برقرار می کنه
مثلا فرض کنید که تایع getchar نبود و قرار بود خودمون بنویسیم باید چیکار می کردیم ؟؟؟؟؟؟
بستگی داره اگر نخواهید از getchar استفاده کنید یعنی باید از اسمبلی استفاده کنید بنابراین حالا باید انتخاب کنید که از چه اسمبلری میخواهید استفاده کنید تحت ویندوز ویا xbase و اینکه برای چه ABI می خواهید کد اسمبلی بنویسید بعد از انتخاب اگر باز نخواهید وابستگی به library های c داشته باشید باید خودتون از وقفه ها استفاده کنید دقیقا مثل کد زیر که getchar هست برای پردازشگر های 16 بیتی ...
Getchr:
push bx
push cx
push dx
mov ah, 01h
int 21h
pop dx
pop cx
pop bx
ret