نمایش نتایج 1 تا 10 از 10

نام تاپیک: زبان ماشین

  1. #1

    زبان ماشین

    سلام.
    یه سوال دارم اونم اینکه وقتی میگیم کامپایلر کد مبدا رو ترجمه میکنه به زبان ماشین،منظور از ماشین مجموعه سیستم عامل و پردازنده است دیگه؟یعنی کد باینری مثلا ویندوز با لینوکس تفاوت اساسی دارن دیگه؟یا حالتی که سیستم عامل نیست و میخوای مستقیما پردازنده اجرا کنه یه چیزی مثل سیتسم عامل مثلا؟
    فرضا اگر 001 0101 البته مثال میزنم دستور جمع مخصوص پردازنده است دستور جمعی که توی فایل exe سیستم عامل اجرا میکنه احتمالا یه چیز دیگس؟درسته؟

  2. #2

    نقل قول: زبان ماشین

    درود
    نقل قول نوشته شده توسط MAHDI.D.H.F مشاهده تاپیک
    سلام.
    یه سوال دارم اونم اینکه وقتی میگیم کامپایلر کد مبدا رو ترجمه میکنه به زبان ماشین،منظور از ماشین مجموعه سیستم عامل و پردازنده است دیگه؟
    خیر ، مجموعه سیستم عامل و پردازنده رو پلتفرم میگن.
    نقل قول نوشته شده توسط MAHDI.D.H.F مشاهده تاپیک
    یعنی کد باینری مثلا ویندوز با لینوکس تفاوت اساسی دارن دیگه؟
    بله.
    یا حالتی که سیستم عامل نیست و میخوای مستقیما پردازنده اجرا کنه یه چیزی مثل سیتسم عامل مثلا؟
    اما این تفاوت به دلیل وجود دو سیستم عامل متفاوت هستش.
    اگر چه هر دو سیستم عامل روی یک نوع پردازنده اجرا شدن ، اما در هر سیستم عامل ساختار فایل اجرایی و api ها که دیگه یکسان نیست.

    نقل قول نوشته شده توسط MAHDI.D.H.F مشاهده تاپیک
    فرضا اگر 001 0101 البته مثال میزنم دستور جمع مخصوص پردازنده است دستور جمعی که توی فایل exe سیستم عامل اجرا میکنه احتمالا یه چیز دیگس؟درسته؟
    دستور جمع مربوط به پردازنده هستش.در بالا فرض کردیم که لینوکس و ویندوز روی یک پردازنده اینتل یکسان اجرا شدن.
    دستور جمع یا دستورات دیگه یکسان هستند اما در ساختار فایل اجرایی تفاوت هست. برا همین اگر کد برنامه هم یکسان باشه باید دو بار کامپایل کنی .هر سیستم عامل مختص خودش!

  3. #3

    نقل قول: زبان ماشین

    نقل قول نوشته شده توسط pe32_64 مشاهده تاپیک
    درود

    خیر ، مجموعه سیستم عامل و پردازنده رو پلتفرم میگن.

    بله.

    اما این تفاوت به دلیل وجود دو سیستم عامل متفاوت هستش.
    اگر چه هر دو سیستم عامل روی یک نوع پردازنده اجرا شدن ، اما در هر سیستم عامل ساختار فایل اجرایی و api ها که دیگه یکسان نیست.


    دستور جمع مربوط به پردازنده هستش.در بالا فرض کردیم که لینوکس و ویندوز روی یک پردازنده اینتل یکسان اجرا شدن.
    دستور جمع یا دستورات دیگه یکسان هستند اما در ساختار فایل اجرایی تفاوت هست. برا همین اگر کد برنامه هم یکسان باشه باید دو بار کامپایل کنی .هر سیستم عامل مختص خودش!
    بزارید سوالمو یکم واضح تر کنم.فرض کنیم پردازنده (به طور کلی مجموعه سخت افزار کامپیوتر)دستور جمعش این باشه:۰۰۰۱ ۰۱۰۱ ۱۱۰۰ (البته فقط مثال میزنم)حالا در ساختار فایل اجرایی ویندوز یا هر سیستم عامل دیگه ای برای دستور جمع دقیقا همین دستورو باید وارد کرد یا این که مثلا ممکنه کدی که برای جمع میگیره :۱۱۱۱ ۰۰۱۱ ۱۱۰۰ باشه و بعد سیستم عامل اینو برای پردازنده ترجمه کنه و همون کدی که پردازنده برای جمع میگیره رو وارد پردازنده کنه؟
    اگر مورد دوم درسته یه سوال دیگه ام پیش میاد:اسمبلی ویندوز با اسمبلی لینوکس با اسمبلی میکرو کنترلر یا هر پلتفرم دیگه ای باید فرق کنه دیگه درسته؟منظورم فقط سینتیکس زبان نیست مثلا مدیریت حافظه یا فراخوانی امکانات ورودی خروجی و امثالهم هم هست.در ویندو باید api هارو فراخوانی کنی و در مثلا پردازنده وقفه ها رو؟

  4. #4

    نقل قول: زبان ماشین

    سلام
    دوست عزیز سوالتون واضح بود اما انگار جواب من نبوده ! متن جوابم رو چند بار بخونید.
    بزارید سوالمو یکم واضح تر کنم.فرض کنیم پردازنده (به طور کلی مجموعه سخت افزار کامپیوتر)دستور جمعش این باشه:۰۰۰۱ ۰۱۰۱ ۱۱۰۰ (البته فقط مثال میزنم)حالا در ساختار فایل اجرایی ویندوز یا هر سیستم عامل دیگه ای برای دستور جمع دقیقا همین دستورو باید وارد کرد
    دستور جمع تو هر پردازنده(سی پی یو) در فایل های اجرایی برای اون پردازنده یکسان هستش.
    اما یک پردازنده ممکنه براش چند تا سیستم عامل مختلف وجود داشته باشه و ساختار فایلهای اجرایی در سیستم عامل های مختلف یکی نیست.
    یا این که مثلا ممکنه کدی که برای جمع میگیره :۱۱۱۱ ۰۰۱۱ ۱۱۰۰ باشه و بعد سیستم عامل اینو برای پردازنده ترجمه کنه و همون کدی که پردازنده برای جمع میگیره رو وارد پردازنده کنه؟
    نه .
    مگر اینکه برنامه یک شبیه ساز سخت افزار باشه و کارش اجرا کردن مثلا بازی های پلی استیشن 2 رو پی سی باشه
    اگر مورد دوم درسته یه سوال دیگه ام پیش میاد:اسمبلی ویندوز با اسمبلی لینوکس با اسمبلی میکرو کنترلر یا هر پلتفرم دیگه ای باید فرق کنه دیگه درسته؟

    مورد دوم رو توضیح دادم.
    ولی بله حرفتون درست هستش.
    منظورم فقط سینتیکس زبان نیست مثلا مدیریت حافظه یا فراخوانی امکانات ورودی خروجی و امثالهم هم هست.در ویندو باید api هارو فراخوانی کنی و در مثلا پردازنده وقفه ها رو؟
    بله .به همه این دلایل متفاوت هستش.

  5. #5

    نقل قول: زبان ماشین

    نقل قول نوشته شده توسط pe32_64 مشاهده تاپیک
    سلام
    دوست عزیز سوالتون واضح بود اما انگار جواب من نبوده ! متن جوابم رو چند بار بخونید.

    دستور جمع تو هر پردازنده(سی پی یو) در فایل های اجرایی برای اون پردازنده یکسان هستش.
    اما یک پردازنده ممکنه براش چند تا سیستم عامل مختلف وجود داشته باشه و ساختار فایلهای اجرایی در سیستم عامل های مختلف یکی نیست.
    نه .
    مگر اینکه برنامه یک شبیه ساز سخت افزار باشه و کارش اجرا کردن مثلا بازی های پلی استیشن 2 رو پی سی باشه

    مورد دوم رو توضیح دادم.
    ولی بله حرفتون درست هستش.

    بله .به همه این دلایل متفاوت هستش.
    با تشکر اگر ایراد نداره سه تا سوال اخرم بپرسم جواب بدید ممنون میشم.
    به ندرت وقتی یه برنامه ۳۲ بیتی روی سیستم ۶۴ بیتی یه مشکل میخوره هم به خاطر همین موضوعه؟
    و سیستم عاملی مثل ویندوز قاعدتا باید امکان اینو داشته باشه که بتونه کدهایی که برای پردازنده های با معماری دیگه نوشته شدنو روی یک پردازنده دیگه اجرا کنه؟(یعنی نقش همون ماشین مجازی که خودتون گفتید ایفا کنه)درسته؟و این یکمم سرعت رو پایین میاره؟
    از کجا باید ساختار دقیق فایل های اجرایی مثلا ویندوز رو کامل متوجه بشم با گرامر دستوری که میتونه اجرا کنه؟
    بازم پیشاپیش ممنون

  6. #6

    نقل قول: زبان ماشین

    نقل قول نوشته شده توسط MAHDI.D.H.F مشاهده تاپیک
    با تشکر اگر ایراد نداره سه تا سوال اخرم بپرسم جواب بدید ممنون میشم.
    به ندرت وقتی یه برنامه ۳۲ بیتی روی سیستم ۶۴ بیتی یه مشکل میخوره هم به خاطر همین موضوعه؟
    و سیستم عاملی مثل ویندوز قاعدتا باید امکان اینو داشته باشه که بتونه کدهایی که برای پردازنده های با معماری دیگه نوشته شدنو روی یک پردازنده دیگه اجرا کنه؟(یعنی نقش همون ماشین مجازی که خودتون گفتید ایفا کنه)درسته؟و این یکمم سرعت رو پایین میاره؟
    از کجا باید ساختار دقیق فایل های اجرایی مثلا ویندوز رو کامل متوجه بشم با گرامر دستوری که میتونه اجرا کنه؟
    بازم پیشاپیش ممنون
    نه خواهش میکنم .
    1-سوالتون خیلی کلی هستش.به خیلی چیزا مربوطه .
    2-نه بایدی وجود نداره .میتونید از نرم افزار های شبیه ساز cpu های مختلف برا اینکار استفاده کنید.سرعت رو میتونه از کم تا زیاد کاهش بده.
    3-گرامر دستور مخصوص زبان برنامه نویسی هستش و به cpu ربطی نداره .
    اسم فایل های اجرایی ویندوز Portable Executable هستش .سرچ کنید کلی مقاله و اموزش میاره براش.
    بقیه سیستم عامل ها هم همین طور.
    دوست عزیز شما مستقیم کاری رو که میخواید انجام بدین رو بپرسید .
    اینجوری شاید خیلی از این اطلاعات لازم نباشه یا اصلا مطالب دیگری وارد موضوع بشن.

  7. #7

    نقل قول: زبان ماشین

    نقل قول نوشته شده توسط pe32_64 مشاهده تاپیک
    نه خواهش میکنم .
    1-سوالتون خیلی کلی هستش.به خیلی چیزا مربوطه .
    2-نه بایدی وجود نداره .میتونید از نرم افزار های شبیه ساز cpu های مختلف برا اینکار استفاده کنید.سرعت رو میتونه از کم تا زیاد کاهش بده.
    3-گرامر دستور مخصوص زبان برنامه نویسی هستش و به cpu ربطی نداره .
    اسم فایل های اجرایی ویندوز Portable Executable هستش .سرچ کنید کلی مقاله و اموزش میاره براش.
    بقیه سیستم عامل ها هم همین طور.
    دوست عزیز شما مستقیم کاری رو که میخواید انجام بدین رو بپرسید .
    اینجوری شاید خیلی از این اطلاعات لازم نباشه یا اصلا مطالب دیگری وارد موضوع بشن.
    حقیقتش میخواستم یه مفسر درونی ساده برای تمرین بنویسم.
    و بعد این موضوع که دستورات فایل اجرایی مستقیما وارد پردازنده میشن خطرناک نیست؟یعنی نمیتونه کنترل اجرا رو از سیستم عامل بگیره؟

  8. #8
    کاربر دائمی آواتار علیرضا حسن زاده
    تاریخ عضویت
    تیر 1388
    محل زندگی
    تــــــــــــــــــــــــــبریز
    پست
    897

    نقل قول: زبان ماشین

    دوست عزیز
    شما فرض رو بر ای بذارین که یه کدی نوشتین مثلا x++
    حالا وقتی این کد رو کامپایل میکنید مثلا gcc کدی که تولید میشه هیچ فرقی نمیکنه
    وقتی بعد کامپایل میاد فایل کامپایل شده لینک بشه اونجا ساختار فایل اجرایی هم رو میاد و فایل قابل استفاده تو اون سیستم عامل ویندوز یا لینوکس میشه
    البته اساتید خرده نگیرن به این نوشته که کدتولیدی توسط gcc مثلا تو ویندوز و لینوکس یکی نیست : بله تفاوت داره بخاطر کتابخانه هایی که به برنامه لینک شده و ... ولی اصل کد تولید شده برای مثلا x++ یکی هست تو پلتفرم یکسان مثلا x86

    واما در مورد اجرای کدهای خطرناک :
    این کار رو ویروس ها و برنامه های مخرب و بعضا برنامه های خاص که داری باگ هستن انجام میدن که بعنوان مثال تو ویندوز منجر به bluescreen میشه اما تو سیستم عامل های جدید تا وقتی برنامه ای از باگی استفاده نکرده باشه این مشکلات پیش نمیاد
    اولا تو سطح کاربر برنامه امکان دسترسی به خیلی چیزها رو نداره وقتی میره به حالت کرنل یا هسته امکان دسترسی به همه چی داره و میتونه کارهای مخربی میتونه انجام بده مثلا یه درایور مخرب میتونه کار سیستم عامل رو مختل کنه ولی تو سطح کاربر مشکلی پیش نمیاد تا وقتی باگی وجود داشه باشه و برنامه از اون استفاده کنه و خیلی کارها بکنه

  9. #9

    نقل قول: زبان ماشین

    نقل قول نوشته شده توسط علیرضا حسن زاده مشاهده تاپیک
    دوست عزیز
    شما فرض رو بر ای بذارین که یه کدی نوشتین مثلا x++
    حالا وقتی این کد رو کامپایل میکنید مثلا gcc کدی که تولید میشه هیچ فرقی نمیکنه
    وقتی بعد کامپایل میاد فایل کامپایل شده لینک بشه اونجا ساختار فایل اجرایی هم رو میاد و فایل قابل استفاده تو اون سیستم عامل ویندوز یا لینوکس میشه
    البته اساتید خرده نگیرن به این نوشته که کدتولیدی توسط gcc مثلا تو ویندوز و لینوکس یکی نیست : بله تفاوت داره بخاطر کتابخانه هایی که به برنامه لینک شده و ... ولی اصل کد تولید شده برای مثلا x++ یکی هست تو پلتفرم یکسان مثلا x86
    الان چیزی که گیر کردم توش اینه که چرا سیستم عامل هارو مثل یه ماشین مجازی یا مفسر طوری نساختن که خودش یه زبان سطح پایین برا خودش داشته باشه و برنامه ها رو خط به خط ترجمه کنه روی پردازنده ای که روش هست به جای اینکه برنامه های سیستم عامل مستقیما به زبان پردازنده باشن.اینطوری میشد قابلیت حمل برنامه هارو خیلی افزایش داد و تقریبا یه برنامه مخصوص ویندوز بتونه روی هر سیستم که ویندوز روش نصبه اجرا بشه.و جوابی که خودم میتونم بدم فقط اینه که اینجوری سرعت اجرا میره بالاتر اگر درست بگم

  10. #10

    نقل قول: زبان ماشین

    نقل قول نوشته شده توسط MAHDI.D.H.F مشاهده تاپیک
    حقیقتش میخواستم یه مفسر درونی ساده برای تمرین بنویسم.
    و بعد این موضوع که دستورات فایل اجرایی مستقیما وارد پردازنده میشن خطرناک نیست؟یعنی نمیتونه کنترل اجرا رو از سیستم عامل بگیره؟
    عبارت ساده و مفسر در کنار هم جالبه - کار آسونی نیستش.موفق باشید .
    خطرناک ؟ بستگی داره مربوط به چه برنامه ای باشن ، دستورات ویروس یا مثلا سیستم عامل .دستورات لایه سیستم عامل (ring صفر) هر کاری ممکنه بکنه ولی این مشکل طراحی cpu نیستش . بلاخره هر چی لایه محافظ قرار بدید یک لایه از همه به پردازنده نزدیکتره و با کنترل 100 در صد .

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •