PDA

View Full Version : سوال: خود زبان اسمبلی



assembel
پنج شنبه 19 اردیبهشت 1387, 12:37 عصر
من می خواستم بدونم که خود این زبان اسمبلی رو با چی نوشتن؟:متفکر:

و میشه چیزی شبیه اسمبلی رو دوباره رو برنامه نویسی کرد؟

Masoudxb
شنبه 21 اردیبهشت 1387, 22:30 عصر
سئوالت بحدی بی محتواست که کسی مایل نیست چیزی بگه.
منظورت از "من می خواستم بدونم که خود این زبان اسمبلی رو با چی نوشتن؟" چیه ؟؟
منظورت Linker اسمبلی هست ؟
خود IDE ؟ (اگه آره ، کدوم یکی ؟؟)
و....

مهران موسوی
یک شنبه 22 اردیبهشت 1387, 17:48 عصر
دوست عزيز اقاي assembel .... شما چقدر از اسمبلي سر در مياري ؟؟ !!!

خوب بگذريم ... اقا ميدوني كه هر CPU يك سري فرامين خاص داره ( زبان ماشين ) ... حالا بنيان گذاران اسمبلي اومدن براي درك بهتر در ازاي هر يك كد ماشين يك كد اسمبلي رو در نظر گرفتن .... مثلا :

به جاي اين كد ماشين ( 11101011 ) در پردازندها ي 386 / 8086 دستور JMP رو در اسمبلي در نظر گرفتن ... و همين امر باعث شد كه ما از دست 0 و 1 ياد گرفتن خلاص بشيم ... ولي به نظر من بي خيال طراحي يك چيزي مثل اسمبلي بشو ... اول يكم بيشتر مطالعه كن بعد تصميم بگير ...

يا حق ...

assembel
سه شنبه 24 اردیبهشت 1387, 15:44 عصر
سئوالت بحدی بی محتواست که کسی مایل نیست چیزی بگه.
منظورت از "من می خواستم بدونم که خود این زبان اسمبلی رو با چی نوشتن؟" چیه ؟؟
منظورت Linker اسمبلی هست ؟
خود IDE ؟ (اگه آره ، کدوم یکی ؟؟)
و....

منظورم کاملا واضحه؟؟؟؟؟؟؟؟؟
منظور کامپایلره

assembel
سه شنبه 24 اردیبهشت 1387, 15:51 عصر
دوست عزيز اقاي assembel .... شما چقدر از اسمبلي سر در مياري ؟؟ !!!

خوب بگذريم ... اقا ميدوني كه هر CPU يك سري فرامين خاص داره ( زبان ماشين ) ... حالا بنيان گذاران اسمبلي اومدن براي درك بهتر در ازاي هر يك كد ماشين يك كد اسمبلي رو در نظر گرفتن .... مثلا :

به جاي اين كد ماشين ( 11101011 ) در پردازندها ي 386 / 8086 دستور JMP رو در اسمبلي در نظر گرفتن ... و همين امر باعث شد كه ما از دست 0 و 1 ياد گرفتن خلاص بشيم ... ولي به نظر من بي خيال طراحي يك چيزي مثل اسمبلي بشو ... اول يكم بيشتر مطالعه كن بعد تصميم بگير


خوب من همینو می خواستم بدنم که compiler assembly رو با چی نوشتن ؟؟؟ با 0,1
و میشه source این کامپایلر رو گیر آورد.

hoax3r
سه شنبه 24 اردیبهشت 1387, 16:04 عصر
کامپایلر های اسمبلی و ابزارهای جانبی قالبا با ++VC نوشته میشن

MSJazayeri
چهارشنبه 26 تیر 1387, 03:53 صبح
کامپایلر های اسمبلی و ابزارهای جانبی قالبا با ++VC نوشته میشن
چی داری میگی شما؟!!!!!!!!!!!:متعجب:
اینکه بر عکسه!!!!!
این کامپایلر هایی مثله VC++ هستن که با assembely نوشته میشن!
اصولا" نحوه کار کامپایلر هایی مثل VC++ اینجوریه که کد های برنامه نویس رو به کد های assembely ترجمه میکنه و به کامپایلر assembely تحویل میده.:متفکر:

vcldeveloper
چهارشنبه 26 تیر 1387, 04:45 صبح
اصولا" نحوه کار کامپایلر هایی مثل VC++ اینجوریه که کد های برنامه نویس رو به کد های assembely ترجمه میکنه و به کامپایلر assembely تحویل میدهکامپایلر در یک توضیح ساده شده، کد را به زبان ماشین مقصد ترجمه میکنه. در زبان ماشین مقصد هر یک دستور معادل یک دستور اسمبلی هست. در زبان های سطح بالا مثل ++C هر دستور در سورس کد به چند دستور در زبان ماشین تبدیل میشه، در نتیجه کامپایلرهای این زبان ها پیچیده تر هستند. در اسمبلی، هر دستور معادل یک دستور ماشین هست، پس فقط باید هر دستور را به معادل صفر و یک آن تبدیل کرد، مثلا همون دستور Jmp هر جا در سورس دیده شد، به 11101011 تبدیل بشه. حالا اینکه این برنامه تبدیل کد برای اسمبلی به چه زبانی نوشته میشه، میتونه هر زبانی باشه، ولی غالبا C و ++C هست. در زمانی که همچین برنامه ایی وجود نداشت چکار می کردند؟ مجبور بودند همچین برنامه ایی را مستقیما با کدهای ماشین بسازند، ولی الان همچین اجباری وجود نداره. یک برنامه در نهایت تبدیل به کد ماشین میشه، وقتی تبدیل به کد ماشین شد، دیگه فرقی نمیکنه با چه زبانی نوشته شده بود. کامپایلر هم یک برنامه هست، میشه آن را با هر زبانی نوشت، وقتی کامپایل شد، دیگه میشه کد ماشین.

Felony
چهارشنبه 26 تیر 1387, 07:52 صبح
کامپایلر های اسمبلی و ابزارهای جانبی قالبا با ++VC نوشته میشن

شاید منظور ایشون این بوده که کامپایلری مثل Emu8086 با VC++ نوشته شده ...
که البته فکر نکنم بازم اینطور باشه ...

kameltareen
چهارشنبه 26 تیر 1387, 08:33 صبح
جناب آقاي كشاورز...
گفته شما كاملا درست است ولي يك سوال...
در زمان هاي اوليه ساخت كامپيوتر كه تماما به وسيله 0و1 برنامه نويسي مي كردند بايد محيطي جهت وارد نمودن واجراي اين كدها مي بود ...
آن محيط چه چيزي بوده وچگونه ميتوانستند در آن كد نويسي و برنامه را اجرا كنند؟؟؟؟؟؟

hoax3r
چهارشنبه 26 تیر 1387, 10:49 صبح
جناب علی کشاورز توضیحات کاملی دادن الان خیلی زمان از اون موقع که کامپایلر مستقیم با زبان ماشین نوشته میشد میگزره
مثلا در حال حاظر اسمبلر masm با ++VC، و یا tasm که مال borland هست با محصول خود برولند یعنی ++BC نوشته شده

در ضمن Emu8086 هم با VB نوشته شده، نه ++VC

شاد باشید

vcldeveloper
پنج شنبه 27 تیر 1387, 01:48 صبح
در زمان هاي اوليه ساخت كامپيوتر كه تماما به وسيله 0و1 برنامه نويسي مي كردند بايد محيطي جهت وارد نمودن واجراي اين كدها مي بود ...
آن محيط چه چيزي بوده وچگونه ميتوانستند در آن كد نويسي و برنامه را اجرا كنند؟
من او زمان ها نبودم، ولی مسلما در آن زمان IDE - یعنی یک محیط مجتمع برای نوشتن کد و دیباگ آن - وجود نداشت، بلکه کدها در یک ویرایشگر متن نوشته میشدند -مثلا ویرایشگرهای متن خطی که در هر لحظه فقط امکان نمایش و ویرایش یک خط را داشتند - و سپس کد نوشته شده به یک کامپایلر داده میشد - مثلا از طریق خط فرمان سیستم عامل - و کد باینری بدست میامد. حالا اون کامپایلرها را در آن زمان چطور می نوشتند، من نمی دونم، ولی احتمالا مستقیما کدهای ماشین را وارد می کردند. شاید هم با استفاده از کدهای ماشین یک هسته اولیه و کوچک از کامپایلر تولید می کردند، بعد سایر بخش های آن رابا یک زبان سطح بالاتر می نوشتند و آنها را با همان هسته اولیه کوچک کامپایل می کردند.

Felony
پنج شنبه 27 تیر 1387, 07:01 صبح
جناب علی کشاورز توضیحات کاملی دادن الان خیلی زمان از اون موقع که کامپایلر مستقیم با زبان ماشین نوشته میشد میگزره
مثلا در حال حاظر اسمبلر masm با ++VC، و یا tasm که مال borland هست با محصول خود برولند یعنی ++BC نوشته شده

در ضمن Emu8086 هم با VB نوشته شده، نه ++VC

شاد باشید

منم نگفتم با Vc++ نوشته شده گفتم شاید منظور شما این بوده ...
اگه دقت کنید میبینید که نوشتم >> فکر نکنم اینطور باشه ...

محمدامین شریفی
پنج شنبه 27 تیر 1387, 15:39 عصر
اکثرا امروز تو borland c کدهای اسمبلی را می نویسند.
یک پرسشی که بود اینست که چرا بایدtasm و tnasm وجود داشته باشد.
آیا اینجا هم ماکروسافت می خواسته با دیگران فرق کند؟
منظورم این است که tnasm از کتابخانه های ویندوز استفاده می کند و راحت تراست؟

محمدامین شریفی
پنج شنبه 27 تیر 1387, 15:45 عصر
من می خواستم بدونم که خود این زبان اسمبلی رو با چی نوشتن؟:متفکر:

و میشه چیزی شبیه اسمبلی رو دوباره رو برنامه نویسی کرد؟

بله چرا نمی شود،هر کامپایلری را میشود نوشت.ولی چون دیگر اسمبلی رشدش کامل شده است حالا می آیند کامپایلر های زبان سطح بالاتری را می نویسند که در نهایت به کد اسمبلی تبدیل می شوند.

vcldeveloper
پنج شنبه 27 تیر 1387, 16:22 عصر
ولی چون دیگر اسمبلی رشدش کامل شده است حالا می آیند کامپایلر های زبان سطح بالاتری را می نویسند که در نهایت به کد اسمبلی تبدیل می شوند.
اسمبلی یک مجموعه دستورات یکسان مثل C, Pascal و سایر زبان ها نیست، بلکه هر خانواده از CPUها برای خودشان یک مجموعه دستورات اسمبلی دارند. در PC ما با خانواده x86 از CPUها سر و کار داریم و هر چند وقت یک بار، مجموعه ایی از Extension ها به دستورات CPUهای جدید اضافه میشه، مثل SSE, MMX و...
دلیل ارائه زبان های سطح بالاتر کامل شدن رشد اسمبلی نبود، بلکه میشه گفت از یک طرف نیاز بود که زبان هایی وجود داشته باشند که مستقل از سخت افزار CPU باشند، یعنی لازم نباشه برای هر سکوی سخت افزاری، کد را بازنویسی کرد، و از طرف دیگر، کار کردن با آن آسانتر باشد و نیاز نباشد که هر چیز ساده ایی را برنامه نویس خودش پیاده سازی کند. مثلا کدی که با C نوشته میشه، برای اجرا در سکوهای سخت افزاری مختلف نیاز به تغییر نداره، بلکه باید فقط برای هر کدام از آن سکوها یک کامپایلر C وجود داشته باشه. از طرفی نوشتن این کد ساده تر از اسمبلی بوده و برنامه نویس می تواند بهتر روی منطق و اهداف برنامه تمرکز کند و نیازی ندارد که فرضا برای نوشتن یک خط پیام ساده چند ده خط کد اسمبلی بنویسد. این باعث میشه که برنامه ها پیشرفته تر و پیچیده تر شوند. اگر همچین زبان هایی بوجود نمیامدند، احتمالا همچین برنامه هایی هم که امروزه ما از آنها استفاده می کنیم، بوجود نمیامدند.

محمدامین شریفی
پنج شنبه 27 تیر 1387, 20:32 عصر
.
دلیل ارائه زبان های سطح بالاتر کامل شدن رشد اسمبلی نبود، بلکه میشه گفت از یک طرف نیاز بود که زبان هایی وجود داشته باشند که مستقل از سخت افزار CPU باشند، یعنی لازم نباشه برای هر سکوی سخت افزاری، کد را بازنویسی کرد نیاز نباشد. بلکه باید فقط برای هر کدام از آن سکوها یک کامپایلر C وجود داشته باشه. نوشتن یک خط پیام ساده چند ده خط کد اسمبلی بنویسد. این باعث میشه که برنامه ها پیشرفته تر و پیچیده تر شوند. اگر همچین زبان هایی بوجود نمیامدند، احتمالا همچین برنامه هایی هم که امروزه ما از آنها استفاده می کنیم، بوجود نمیامدند.
استاد منظورم منم این بود.حالا پرسش منرا که گفت بودم:"یک پرسشی که بود اینست که چرا بایدtasm و tnasm وجود داشته باشد.
آیا اینجا هم ماکروسافت می خواسته با دیگران فرق کند؟
منظورم این است که tnasm از کتابخانه های ویندوز استفاده می کند و راحت تراست؟"
من هم می دونم برای نوشتن تو avr باید یه مدلی اسمبلی بنویسیم و تو رایانه های imb یه جور دیگه.ولی تا واحد پردازش عوض نشود که چیزی مثل دات نت که چیزی به اسمبلی اضافه نمی شود.
با سپاس

MSK
دوشنبه 31 تیر 1387, 08:34 صبح
اولاً با احترام خدمت جناب آقای کشاورز عرض کنم به قبل از 8086 که برگردیم میبینیم که استفاده از کارت پانچ متداول بوده و اول هم فقط اسمبلی؛ یعنی زبان اصلی خود سخت افزار. بعداً فرترن هم اضافه شد. یعنی تو سیستم های دسته ای یک کارتپانچ جدید جز پانچ برنامه ی فرترن میگزاشتند که همون کامپایلر فرترن بوده که البته خودش به زبان اسمبلی بوده. بعد که کمی پیشرفته تر شد IBM کامپیوترهایی درست کرد که کنسولی داشتند که برنامهی اسمبلی یا فرترن رو دریافت می کردند و به صفر و یک تبدیل می کردند و روی دیسک مغناطیسی ضبط می کردند تا روی کامپیوتر مینفریم اصلی اجرا بشه. البته همون کامپیوتر های کوچک هم برنامشون توسط IBM و احتمالاً باز هم مستقیماً توسط اسمبلی نوشته شده بوده و چیزی که داشتند نمیشده بهشون گفت IDE. بعدها هم که 8086 اومد مایکروسافت بیسیک رو همراه داسش معرفی کرد و البته IDE معروف تحت داس بیسیک که خوب اونم بعیده توسط چیز دیگه ای غیر اسمبلی نوشته شده باشه. جالبه بگم که بعضی کامپیوتر های اون موقع اصلاً هارد نداشتند و روی رومشون مستقیماً بیسیک میریختند و برنامه نویسا مستقیماً به IDE بیسیک می رفتند و برنامه رو توسط نوار کاست یا بعداً فلاپی ذخیره و اجرا می کردند. بعد از اون هم که معلومه سی و اسمبلی و بیسیک و پاسکال و انقدر زبانها و محیط های برنامه نویسی اومد که سوال اسمبلی رو با چی می نوشتند جوابش معلومه. بهرحال قبل از سی و غیره باید گفت تنها محیطهایی که برای برنامه نویسی اسمبلی میشه نام برد همون کامپیوتر های کوچک IBM اند.