PDA

View Full Version : موقعه که ویندوز نصب میکنیم اسمبلر تو ی خود ویندوز خود به خود نصب میشه؟



k1.technology
سه شنبه 11 شهریور 1393, 22:50 عصر
درود
موقعه که ویندوز نصب میکنیم اسمبلر تو ی خود ویندوز خود به خود نصب میشه؟
مثلا یک برنامه که ما اجرا میکنیم اسمبلر کد ها رو به 0 و 1 تبدیل میکنه ؟

yassersajjadi
چهارشنبه 12 شهریور 1393, 00:30 صبح
کامپایلر میتونه کد رو به صفر و یک تبدیل کنه ولی ساختارهایی مثل elf هم هستند که خود ساختار صفر یک ندارند ولی سیستم توان اجرای اونو داره ، که البته اون ها هم توسط خود سیستم دکد خواهند شد
حالا درون هر سیستم عامل برای اجرای کد های متفاوت کامپایلر های متفاوتی وجود دارند که اگر فایل ساختار باینری نداشته باشد انرا اجرا کنند مثلا برای اجرای فایل های جاوا در ویندوز شما باید java se runtime رو نصب کنید تا نرم افزار های جاوا اجرا بشن، با ویندوز هم برای اجرای کدهای مختلف کامپایلرهایی تعبیه شده اند تا بتوانند کد ها را اجرا کنند

k1.technology
چهارشنبه 12 شهریور 1393, 02:27 صبح
مثلا توی خود ویندوز چندتا کامپایلر هست ؟
فرض کنید ما هیچ برنامه رو نصب نکردیم یه برنامه paint یا مدیا پلیر باز میکنیم
کدهاش چطوری به 0 و 1 تبدیل میشن؟

k1.technology
چهارشنبه 12 شهریور 1393, 02:29 صبح
تو ی ویندوز چند نوع کامپایلر به کار رفته؟
مثلا وقتی که من برنامه مدیا پلیر یا paintدارم اجرا میکنم کامپایلر میاد این کداشو به 0 و 1 تبدیل میکنه ؟؟

yassersajjadi
چهارشنبه 12 شهریور 1393, 04:07 صبح
خب به مستندات هر برنامه ای که میخواین بدونین با چی دکد میشه مراجعه کنین ببینین با چه زبانی اجرا میشه، خب ویندوز از زبان های زیادی پشتیبانی میکنه خانواده سی، اف ، بیسیک و ...
بگین میخواین چیکار کنین تا بدونیم چه جوابی به شما بدیم

k1.technology
چهارشنبه 12 شهریور 1393, 04:14 صبح
من میخوام یه دیدی از تبدیل شدن به دست بیارم
مثلا طرز کامپایل شدنش
یا این کامپیلر پایین تر از لایه ی سیستم عامل هست چطوریه
طبق شکل 123036
واقعا اینجوریه یا غیر از اینه؟

IamOverlord
چهارشنبه 12 شهریور 1393, 04:49 صبح
تو ی ویندوز چند نوع کامپایلر به کار رفته؟
مثلا وقتی که من برنامه مدیا پلیر یا paintدارم اجرا میکنم کامپایلر میاد این کداشو به 0 و 1 تبدیل میکنه ؟؟

کدهاش از قبل به صفر و یک تبدیل شده اند! البته صفر و یک اصطلاح دقیقی نیست!
مثلا برنامه ی Paint از قبل کدش رو کامپایلر کامپایل کرده و وقتی اجراش می کنید ویندوز کد کامپایل شده و همه ی اجزای لازمش رو بارگذاری می کنه و به CPU اجازه می ده که کدی رو که می فهمه اجرا کنه... نه نیازی به کامپایلر دارید و نه اسمبلر... این ابزارها از قبل کار خودشون رو کردن و شما فقط از خروجیشون استفاده می کنید...

k1.technology
چهارشنبه 12 شهریور 1393, 04:58 صبح
واسه بعضی نرم افزار ها که خودمون نصب میکنیم مثلا بابیلون یا nero
اینا با فریم ورک به 0 و 1 تبدیل میشن؟

IamOverlord
چهارشنبه 12 شهریور 1393, 05:06 صبح
واسه بعضی نرم افزار ها که خودمون نصب میکنیم مثلا بابیلون یا nero
اینا با فریم ورک به 0 و 1 تبدیل میشن؟

ببین بستگی به نوع نرم افزار داره... تا جایی که من اطلاع دارم... خیلی ها از قبل کامپایل شده اند... به قول شما به صفر و یک تبدیل شده اند... (در واقع همه ی فایل ها صفر و یکی هستن!) یه سری دیگه موقع اجرا کامپایل می شن توسط یه ابزاری... (مثلا برنامه های NET.) یه سری دیگه هم کدشون رو CPU نمی فهمه و یه نرم افزار دیگه اون ها رو اجرا می کنه در یه ماشین مجازی... (مثلا ماشین مجازی جاوا) یه سری زبان های مفسری هستن که کدهایی که خودشون می فهمن رو (نه کدهایی که سخت افزار می فهمه...) از یه فایلی می خونن و اجرا می کنن... (مثلا Ruby)

k1.technology
چهارشنبه 12 شهریور 1393, 05:13 صبح
اینجوری ب نظر میرسه نرم افزارهای که با زبان برنامه نویسی مثلا سی یا سی پلاس پلاس تولید شدن نیاز به کامپایلر دارن؟ توی ویندوز موقعه اجرا میتونند کرنل یا سیستم عامل راحت تعامل کنند و به زبان ماشین تبدیل بشن؟

IamOverlord
چهارشنبه 12 شهریور 1393, 05:30 صبح
بله چنین برنامه هایی نیاز به کامپایل دارن ولی این عملیات رو از قبل برنامه نویسش با کامپایلر C یا ++C انجام می ده و زمان اجرا نیازی به کامپایلر نیست... و بله با سیستم عامل هم تعامل دارن ولی از قبل کدهای لازم به زبان ماشین هست و نیازی به تبدیلات خاصی نیست... اگه بخوایم دقیقا این مسائل رو توضیح بدیم یه مقاله ی طولانی می شه! می تونید در مورد ساختار فایل های اجرایی در Windows تحقیق کنید... این مقاله از ویکی پدیا رو هم ببینید بد نیست: http://en.wikipedia.org/wiki/.exe

k1.technology
چهارشنبه 12 شهریور 1393, 06:06 صبح
بله چنین برنامه هایی نیاز به کامپایل دارن ولی این عملیات رو از قبل برنامه نویسش با کامپایلر C یا ++C انجام می ده و زمان اجرا نیازی به کامپایلر نیست... و بله با سیستم عامل هم تعامل دارن ولی از قبل کدهای لازم به زبان ماشین هست و نیازی به تبدیلات خاصی نیست... اگه بخوایم دقیقا این مسائل رو توضیح بدیم یه مقاله ی طولانی می شه! می تونید در مورد ساختار فایل های اجرایی در Windows تحقیق کنید... این مقاله از ویکی پدیا رو هم ببینید بد نیست: http://en.wikipedia.org/wiki/.exe

خود سیستم عامل واسه اینکه با سی پی یو در ارتباط باشه مستقیم کدش به 0 و 1 تبدیل میشه ؟
این وسط هیچ اسمبلری کامپایلری نیست؟
یا سیستم عامل هم یک فایل exeاز سی هست که نیازی به کامپایل نداره؟

yassersajjadi
چهارشنبه 12 شهریور 1393, 11:53 صبح
شما اگه تا حالا سعی کرده باشین که کرنلی ساده برای خودتون بسازین حتما از اسمبلر و کامپایلری مثل جی سیسی استفاده کردید ، من خودم با ساختار elf کار میکنم که صفر و یک نیستن، در کرنل شما یک تابع ایجاد میکنین مثل
int
exec(char *path, char **argv)

که این تابع ادرس یک فایل و پارامترهایی که به اون میفرسته رو میگیره و سی پی یو رو به اجرای اون وادار میکنه، این فایل ها از نوع باینری هستن مثلا ls که در لینوکس محتویات یک نود رو به شما نشون میده ، کامپایلر ها به صورت باینری با این تابع اجرا میشن

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

IamOverlord
چهارشنبه 12 شهریور 1393, 19:07 عصر
خود سیستم عامل واسه اینکه با سی پی یو در ارتباط باشه مستقیم کدش به 0 و 1 تبدیل میشه ؟
این وسط هیچ اسمبلری کامپایلری نیست؟
یا سیستم عامل هم یک فایل exeاز سی هست که نیازی به کامپایل نداره؟

بله این اتفاق بالاخره باید بیافته ولی از قبل افتاده! حالا شما دارید از نتیجه اش استفاده می کنید...
منظورتون رو از این وسط به خوبی متوجه نمی شم... ببینید بالاخره برای نوشتن یه سیستم عامل یه سری از اسمبلر و کامپایلر استفاده کرده اند اما شما نیازی نیست که برای اجراش از این ها استفاده کنید...
تا جایی که من اطلاع دارم... هر چیزی که کامپایل بشه تبدیل به فایل های exe. ی Windows ـی نمی شه... Windows هم کامپایل شده... اما مثل فایل های exe. ی Windows ـی نیست... سیستم عامل ها وقتی کامپایل می شن تبدیل به کد هایی می شن که سخت افزار اون ها رو می فهمه... ولی وقتی یه برنامه ی Windows ـی معمولی مثلا با GCC C کامپایل می شه اون فایل exe. همش برای سخت افزار قابل فهم نیست... همراهش جزئیات دیگه ای هم هست... اون فایل بیش تر به درد سیستم عامل می خوره که برنامه ی شما رو برای اجرا آماده کنه... اگرچه داخل اون فایل exe. قسمت هایی هم کدهایی به زبان ماشین هست... اون فایل exe. وابسته به امکاناتی هست که سیستم عامل در اختیارش گذاشته... و از توابعی که در DLL های مختلف هست (مثلا توابع API خود Windows...) می تونه استفاده کنه... اما یه سیستم عامل فقط و فقط باید متکی به سخت افزار و کدهای خودش باشه نه چیز دیگه... و باید با سخت افزار صحبت کنه و خواسته اش رو بگه... نه این که از کسی (سیستم عامل) کمک بخواد... برعکس اون فایل exe. ...
ضمنا خدمتتون عرض کنم که متاسفانه صفر و یک برای من واژه ای گمراه کننده و مبهم هست! شاید بهتر باشه از واژه های Binary file (فایل باینری/دودویی) و Source Code (کد منبع) استفاده کنید که بیش تر به گوشم خورده... Binary file نشون می ده نمی تونیم از همه ی این صفر و یک ها برداشت متنی (Text) داشته باشیم و فقط در حد همون قالب دودویی هستن... ولی مثلا Text file نشون می ده که از این صفر و یک ها می تونیم برداشت متنی داشته باشیم و برداشتمون ازشون فقط در حد یه سری صفر و یک نیست!...

k1.technology
پنج شنبه 13 شهریور 1393, 01:46 صبح
وقتی ما sql server رو نصب میکنیم توسط فریم ورک کدهای اس کیو ال به باینری تبدیل میشن ؟!

IamOverlord
پنج شنبه 13 شهریور 1393, 03:34 صبح
وقتی ما sql server رو نصب میکنیم توسط فریم ورک کدهای اس کیو ال به باینری تبدیل میشن ؟!
جمله ی بهتر: کدهای SQL توسط Binary تفسیر می شه و تصمیم گرفته می شه که چه کاری باید انجام بشه...
این جا دیگه نیازی به Compile کردن کدهای SQL و تولید برنامه ی جداگانه نیست...
اتفاقا خیلی از زبان ها هم مفسری هستن و در پیاده سازی اصلی ای که ازشون شده یه برنامه ای باید همیشه بالاسر کد باشه و اون رو تفسیر و اجرا کنه... در این موارد هم دیگه عملیات کامپایل کردن انجام نمی شه... مثلا: Ruby، Python، ... مفسر لازمه چون سخت افزار چیزی از کد اون زبان نمی فهمه...