نقل قول نوشته شده توسط farhad_shiri_ex مشاهده تاپیک
اگر بخواهم خیلی کلی بگم! کلیه عملیاتهای I/O در پردازشگر توسط دستور INT که دستوری است جهت اجرای وقفه های BIOS اجرا میشوند پس بنابراین وقتی میخواهیم به CPU اعلام کنیم میخواهیم محتوای آدرسی از حافظه را در یک خروجی معتبر نمایش بده(مثلا مانیتور) از وقفه int 21 استفاده میکنیم! همینطور الی آخر...
البته استفاده از وقفه ها بیشتر در پردازشگر های نسل 8086و80286و80386 مرسوم بود، در اسمبلرهای امروزی مانند nasm که 64 بیتی هستند شما دیگه درگیر نوشتن وقفه ها نمیشید و از توابع سطح پایین C را به راحتی call میکنیم بنابراین هم سرعت خیلی بهتر شده وهم برنامه نویسی با اسمبلی خیلی امن تر شده! البته این کاری هست که کامپایلر های قدرتمند امروزی مثل gcc هم انجام میدن یعنی لینکرها میان این لایبرری ها را به کد های شما لینک میکنند.
به هرحال توصیف عملکردهای سطح پایین توی 2 الی 3 خط امکانپذیر نیست!


بستگی داره اگر نخواهید از 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
خیلی ممنون از توضیحاتتون نمی خواهم درگیر این برنامه نویسی بشم فقط سوال هست برام
مثلا الان ما از تابع getchar استفاده می کنیم داخلش ممکنه کدهایی باشه که شما نوشتید یا به روش دیگه ای ممکنه ارتباط با کی بورد رو برقرار کنه؟؟؟
بنده چون با میکروکنترلر سروکار دارم اون جا همیشه ما می تونیم سخت افزارمورد نظرمون رو صدا کنیم بگیم فلان خروجی رو ببین چیه مقدارش
ولی این جا این در کامپیوتر این لایه دیگه توسط برنامه نویس دیده نمیشه فقط کنجکاو بودم ببینم چه طور ارتباط برقرار میشه
تو میکروکنترلر ها معمولا به ازای هر خروجی و ورودی آدرس جداگانه ای هست که می تونیم بهشون دسترسی داشته باشیم