کارهایی که در اسمبلی می شه انجام داد اما در زبانهای سطح بالا نه
سلام به همه
من یه سوال دارم که هیچکی نتونسته جواب کاملی به سوالم بده در همه ی سایتها هم یه چیز تکراری هستش
سوالم اینه که چه کارهایی می شه در اسمبلی انجام داد که توی زبانهای سطح بالا نمی شه؟
جوابهایی که تا حالا پیدا کردم ایناست:
در زبان اسمبلی به سبب پایین بودن سطح ان ویژگیهایی نهفته است که در هیچ یک از زبانهای دیگر این ویژگیها را نمیتوان یافت : یکی از ویژگیهای مهم این زبان باز گذاشتن دست کاربر در کنترل سخت افزار بویژهCPU است . در واقع کاربر میتواند با جز به جز پردازشگر و سخت افزار کامپیوتر ارتباط برقرار کند . بنابراین سرعت اینگونه برنامه ها نسبت به زبانهای سطح بالا بسیار بالاتر است
برنامههای نوشتهشده به زبان اسمبلی نسبت به برنامههای معادل در زبانهای سطح بالا، حافظه کمتری را اشغال میکنند.
و اینکه در استثنائی ترین موارد اگر برای نمونه بخواهید هسته لینوکس را توسعه بدید این زبان کاربردی در حد چند صفحه کد برای دستگاه های کاربرد داره و این حداکثر کاری هست که شاید از عهده زبانی مثل سی برنیاد.
من باید تا دوشنبه یه مقاله حداقل 5 یا 6 صفحه ای تحویل بدم اگه لطف کنین و بهم کمک کنین ممنون می شم
[/FONT]
نقل قول: کارهایی که در اسمبلی می شه انجام داد اما در زبانهای سطح بالا نه
نقل قول:
نوشته شده توسط
Developer Programmer
قید کلمه "زبانهای سطح بالا" واژه ناقصیه.
اسمبلی میتونه به رجیسترها، پورتها و... دسترسی داشته باشه، اما ویژوال بیسیک، ذاتا نمیتونه.
پاسکال( و دلفی) و C ( و ویژوال سی) تقریبا" همه کارهایی که اسمبلی انجام میده رو میتونن انجام بدن. (مثل برنامه هایTSR، کار با وقفه، پورت، دسترسی به سکتور و ...)
به نظر من همیشه اینطور نیست. این بستگی به نوع کامپایلر زبان سطح بالا و نحوه کد نویسی شما داره که سورس کد و کد خروجی تا چه حد Optimize شده باشه.
به طور کلی حافظه رو میشه به دو نوع تقسیم کرد. حافظه RAM و حافظه دیسک سخت.
*اگه به جای متغیر Byte متغیر Word رو استفاده کنی، خوب حافظه بیشتری استفاده کردی.اگه بی خودی اشاره گر بسازی و Free نکنی حافظه زیادی اشغال میکنه.(برخی از زبانهای سطخ بالا میتونن Garbage و Dangling Reference رو مدیریت کنن)
* شما با یه دستور Div میتونی دو عدد رو تقسیم کنی. اما برای نوشتنش تو اسمبلی باید چند خط بنویسی؛ این کار میتونه حجم سورس کد رو تو اسمبلی افزایش بده.
* میتونی چندین خط بیخودی بنویسی، متغیرتعریف کنی و استفاده نکنی یا یه شرط که همیشه برقراره...!
اما از اونجایی که ممکنه یه کامپایلرت super compiler باشه با انتخاب بهینه فاکتورهای لازم شاید بتونه اینها رو تشخیص بده و کد خروجی رو کم حجم کنه. متاسفانه لینکر اسمبلی این قابلیتها رو نداره.
* گاهی هم میشه که شما در اسمبلی چند خط کوتاه واسه نمایش Hello World بنویسید و حجم کد خروجی، چند کیلوبایت ناقابل بشه... اما اگه همین رو توی دلفی بنویسید ممکنه چندین Unit رو use کنه و کتابخانه هایی رو به همراه سورس کد شما کامپایل کنه که اینطوری، کد خروجی میتونی به چند ده کیلوبایت نزدیک بشه.
برای فهم مطلب بالا، میتونی یه فایل exe تولیدی به زبان دلفی رو Disassemble کنی، تا ببینی واژه ها و آیکونهایی که ربطی به برنامه ات نداشته، به exe چسبیده ان.
شاد باشی.
سلام:
عزیزم . اسمبلی یک زبان برنامه نویسی همه منظوره هست و همه کاره است . وقتیکه شما با اسمبلی بطور حرفه ای برنامه ننوشتی محبور نیستی تصورات ذهنی خودت را در مورد این زبان اینجا بنویسی.
با اسمبلرهای زیر برنامه بنویس تا متوجه بشوی که اسمبلی کارهایی میتونه انجام بده که هیچ زبانی حتی C قادر به انجام اینکارها نیست:
masm32 , Fasm , Rosasm
اول در مورد اسمبلی تحقیق کن و باهاش برنامه های حرفه ای و بزرگ بنویس بعد حکم اعدامش رو صادر کن !!!!!
نقل قول: کارهایی که در اسمبلی می شه انجام داد اما در زبانهای سطح بالا نه
نقل قول:
نوشته شده توسط
__H2__
سلام
در چه زبان برنامه نویسی می توان DLL یک و نیم کیلو بایتی ساخت؟؟؟؟؟
کدهای اسمبلی هم دارای سرعت بیشتر و هم مصرف کمتر حافظه هستند و دلیلش هم واضح است، هر چه برنامه سطح بالاتر شود دارای مدیرهای خودکار بیشتری میشود که همراه امکانات بسیار قدرتمندی که به همراه دارند حافظه نیز اشغال میکنند. مثلاَ همه زبان های سطح بالا دارای یک مدیر حافظه هستند که اسمبلی فاقد آن است.
مثلاَ فریم ورک دارای مدیر قدرتمند "جمع آوری کننده حافظه هرز" است ( Garbage ) که شهرت زیادی هم دارد!
ضمناَ تقریباَ یک کار را نمیشود با هیچ زبانی غیر از اسمبلی انجام داد!!
با اسمبلی شما به راحتی میتوانیدهر تک خط سورس های برنامه را در زمان runtime عوض کنید، میدانم که عمق مطلب را متوجه نمیشوید!!
مثلاَ من در خط 20 برنامه دستور Mov Ax,2 را نوشته ام، من به راحتی میتوانم در زمان واقعی runtime مثلاَ در کدی که در خط 10 اجرا میشود، کد خط 20 را به Mov Bx,5 تغییر دهم!!
چه زبان دیگری میتواند کدهای خودش را در runtime خودش عوض کند؟
به چی درد میخود؟؟؟؟؟؟؟؟؟؟؟ من چند سال قبلا با همین شیوه موفق به ساخت ویروسی جالب شدم!
(البته دیگر ویروس را کنار گذاشته ام.)
ولی در کل این هم مزیت حساب نمی شود، چون برای انجام کارها و الگوریتم های پیچیده نیاز به ساعت ها و روزها کد نویسی می باشد و خدا نکند که بخواهید قسمتی را تغییر دهید، روز از نو روزی از نو!!! (زبان های VB.Net و #C تقریباَ بسیار مناسب و قدرتمند هستند)
سلام:
مدیر حافظه در زبان اسمبلی خود شما هستید عزیزم . چرا انتظار داری اسمبلی یک زبان اتوماتیک باشد؟؟؟ اسمبلی یک زبان برنامه نویسی نیمه اتوماتیک و حتی دستی است . ضمنا کی گفته قدرت اسمبلی کمتر از زبانهای سطح بالاست . این فقط یک تصوره و البته یک تصور کاملا اشتباه . اسمبلی قدرتمندترین و کاملترین و بهترین زبان برنامه نویسی دنیاست . فقط اسمبلی .
من با اسمبلی یک فایل exe در حد 400 بایت نوشتم و روی ویندوز بخوبی اجرا شد !!!!!!! باورش خیلی سخته البته نه برای شما که شبیه به همین کار را کردید ولی گفتم می توان حجم را از این هم کمتر کرد . چنین حجم کمی الزاما ویروس نیست بلکه می تواند یک برنامه ی سالم و کابردی باشد .
نقل قول: کارهایی که در اسمبلی می شه انجام داد اما در زبانهای سطح بالا نه
نقل قول:
نوشته شده توسط
Best Programmer
سلام افشین خان.
در این مورد یه کم درباره gcc جستجو کنی یه چیزایی دست گیرت میشه.
و اگر وقت کردی کتاب Professional assembly از wroxرا بخونی ، خیلی بیشتر با این موضوع آشنا می شوید ولی هیچ وقت اسمبلی زبانی نیست که آدم بشینه باهاش یک window manager بنویسه و database programming بکنه. بیشترین کاربرداش در Realtime (kernel+ Device Driver) و قسمتی هم در استفاده از SSEx ها (منظورم Game Development) هست.
نمی دانم شما تحت چه سیستم عاملی کار کردید ولی فکر نمی کنم تحت ویندوز بوده چون در ویندوز به طور کلی برای دسترسی به Proccess Memory Area و مخصوصا آدرس های بالا شما چندین روش وجود داره که حتما نیازی به اسمبلی نداره.
فرصتی کردید
این را بخوانید
سلام:
اتفاقا برای خیلی موارد از جمله همین کار که مهندسی معکوس یا دیباگینگ نرم افزار هست توی ویندوز فقط زبان اسمبلی کاربرد داره . . در ضمن با اسمبلی میشه خیلی راحت مدیر پنجره و مدیر بانک اطلاعاتی نوشت . به سایتهای اسمبلرهای masm32 و Fasm مراجعه کن دوست عزیز . لطفا اینقدر توی سر اسمبلی نزن و با اینکار بیسوادی خودت را با صدای بلند جار نزن .
در ضمن gcc اصلا یک کامپایلر استاندارد و معقول نیست . بجاش باید با اسمبلی کار کنی تا بفهمی که اسمبلی چه موجود عجیب و غریبی هست . gcc هیچی نیست چز یک کامپایلر زبان سی که به شکل خیلی بدی نوشته شده . اسمبلی در مورد توسعه ی game هم قدرت فراوانی داره . بازهم به Fasm یک نگاهی بیانداز .
دوست عزیز با تحقیر کردن اسمبلی فقط خودت رو تحقیر می کنی . چون اسمبلی کارها با خواندن نوشته هایت فقط به کم سوادی شما می خندند . لطفا بیشتر از این به خودت توهین نکن . چون حرفهای تو هیچ ضربه ای به زبان اسمبلی نمیزنه و از ارزشهاش کم نمیکنه .
نقل قول: کارهایی که در اسمبلی می شه انجام داد اما در زبانهای سطح بالا نه
نقل قول:
نوشته شده توسط
Inprise
- دسترسی به محتویات و وضعیت پردازنده ربطی به کامپایلر نداره .
- دسترسی به سخت افزار دو حالت داره :
غیر مستقیم و با استفاده از توابع سیستم عامل : همه زبانها ، کامپایلر و اسمبلر نقش ویژه ای ایفا نمیکنند .
مستقیم : نیاز به کد سطح کرنل است ، که اگر زبانی لینکر مناسب داشته باشد میتواند چنین کدی تولید کند و باز هم خود کامپایلر و اسمبلر نقش تعیین کننده ای ندارند .
با خیلی از زبانها ، با استفاده از تنظیمات مناسب و بسته به کاربرد مورد نظر .
متامورفیسم ارتباطی به کامپایلر/اسمبلر ندارد . موتورهای متامورفیک متعددی با دلفی و سی نوشته شدن ، و البته اسمبلی .
قطعا . رجوع به توضیح قبلی .
زبانهائی که کد کرنل تولید نمیکنند ، من جمله دات نت و وی بی و دلفی و ... بدون توابع سیستم عامل ، به هیچ کدام از عناصر سخت افزاری ، من جمله حافظه ، دسترسی نخواهند داشت . تعامل با سخت افزار و سیستم عامل ، مسئله ای نیست که به زبان و کامپایلر بستگی داشته باشد . این مسئله به نحوهء تولید باینری و نوع دستورات بکار رفته در آن و نحوهء تعامل آن با سیستم عامل ، به عنوان کد User Mode یا کد Kernel Mode است . در تمامی مسائل مطرح شده ، نام بردن از یک زبان یا قیاس یک زبان با زبان دیگر بیهوده بود ، چون اصولا" این مسائل با زبان ارتباطی ندارند ؛
اصولا" هیچ وظیفه ای وجود ندارد که تو بتوانی کدش را به اسمبلی بنویسی ، و نتوانی همان وظیفه را توسط کامپایلر دیگری پیاده سازی کنی . اگر غیر از این جوابی خواندی ، نویسنده اش حتی بسادگی نمیداند که کامپایلر چیست . بعد از استفاده از هر زبان برنامه نویسی ، در نهایت کدها به اسمبلی ترجمه و توسط اسمبلر ، باینری ساخته ، و توسط لینکر ، فایل اجرائی تولید میشود ؛ پس ، وقتی تو از یک زبان سطح بالا استفاده میکنی صرفا در حال صرفه جوئی در زمان و هزینه ات هستی ، و در هر حال اسمبلر برای تولید باینری ، از کامپایلر کد اسمبلی تحویل میگیرد . گاهی برای انجام بعضی از وظایف ، استفاده از اسمبلی معقولتر است چون پیچیدگی که کامپایلرها به فرآیند برنامه نویسی اضافه میکنند در شرایط خیلی خاصی مفید نیست ، پس در این شرایط استفاده از اسمبلی ، انتخاب یک روش بهتر است ؛ و کسی از اسمبلی استفاده نمیکند ، به این علت که زبان دیگری نمیتواند مسئله اش را حل کند . اسمبلی توسط اسمبلر به باینری تبدیل میشود ، و زبانهای سطح بالا با یک مرحله تفاوت به همین سرنوشت دچار میشوند .
طبیعتا در کاربردهای خاص ، ممکن است کیفیت کدی که با اسمبلی نوشته شده بهتر باشد چون کامپایلر به دلیل پیچیدگی ، کدهای غیر ضروری هم تولید میکند ، و ... مواردی از این قبیل .
سلام:
جناب اینپرایز علت اینهمه دشمنی شما با زبان اسمبلی چیست؟؟؟
درضمن کی گفته دسترسی به پردازنده ربطی به کامپایلر نداره ؟؟؟ تنها زبانی که مستقیما با کمک پردازنده برنامه و نرم افزار تولید میکنه اسمبلی هست . واقعا حرفهایت در مورد زبان اسمبلی خنده داره . مثل اینکه شما هنوز بلد نیستید با کمک رجیسترهای پردازنده تحت ویندوز با اسمبلی برنامه بنویسید . من تقریبا هرجا نام شما را می بینم بجز تحقیر کردن اسمبلی و یک مشت افکار توهمی چیزی نمی بینم . بجای اینکه پایت رو روی وجدانت بگذاری و بچه های مردم را فریب بدی سعی کن زبان اسمبلی را بطور اصولی یاد بگیری و با این زبان کاملا اشنا شو ی و مزایای فراوان اسمبلی نسبت به زبانهای سطح بالا را درک کنی بعد بیا اینجا اگر توانستی علیه این زبان رجز خوانی کن . مقاله ی پوچ و توهمی شما در مورد عدم امکان دسترسی به سورس برنامه های زبانهای ناتیو کد همه ی اینترنت را پر کرده و همه ی کاربران را فریب داده ای . از خدا بترس و اینقدر مهمل نباف . انکس که نمیفهمه کامپایلر چیست تو هستی نه طراحان اسمبلرهای قدرتمند زیر :
masm32 , Fasm , Rosasm
واقعا برای اینهمه بیسوادی یا دروغ متاسفم . جنابعالی توهم داری و خیال می کنی بدون اسمبلی می توان اسم خودت را مهندس کامپیوتر بگذاری . واقعا برایت متاسفم . خیلی سعی کردم جلوی خودم را بگیرم ولی با دیدن اینهمه دروغ علیه زبان اسمبلی و اینهمه اطلاعات غلط که به بچه های مردم میدهی واقعا نتوانستم سکوت کنم . خدا از سر تقصیراتت بگذره .
اسمبلی یک زبان برنامه نویسی همه منظوره است و البته خار چشم دشمنان ازادی کاربر .
نقل قول: کارهایی که در اسمبلی می شه انجام داد اما در زبانهای سطح بالا نه
نقل قول:
نوشته شده توسط
__H2__
جالب است میشه شما یکی بسازید که یه کاری هم انجام بده؟ یکی هم من با اسمبلی میسازم!!!!!
دل انگیز جان! اسمبلی نیاز به هیچ کدخاص و موتوری برای این کار ندارد، و به راحتی با چند خط کد نویسی عادی خودش این کار را انجام میدهد.
منظورم را درست متوجه نشدید، منظورم آن بود که دسترسی به حافظه کار خفنی نیست و با VB.NET هم قابل انجام است (چون خیلی ها این را نمیدانند!)
منظورم آن بود که در دات نت کلاسس هایی آماده با توابعی کامل و جالب وجود دارند که اجازه دسترسی راحت به حافظه را میدهند (و درست است که در زیر ساخت، خود این کلاسس ها از api های ویندوز استفاده میکنند ولی برنامه نویسی دات نت (مثلاَ vb ) دیگر خودش نیاز به رجوع به API را ندارد و این امکانات به راحتی در دسترش است.
من هم موافق هستم (قابل توجه دوست عزیز! کاربر
azadeh2 )
اگر بخواهیم از هر زبان آخرین نسخه آن را معیار قرار دهیم، میبینیم که ورژن های امروزی بسیار قدرتمند شده اند و تا حدودی بحث زبان سطح پایین و بالا را از بین برده اند و همه کار انجام میدهند. مثلاَ VisaulC++.Net2005 زبان سطح بالا است یا پایین، اگر سطج پایین است پس دسترسی به مخزن عظم فریم ورک و انجام کارهای سنگین با کدی ساده چه میشود؟؟؟
البته موردی می توان تفاووت ها را بررسی کرد.
مثلا در مقایسه اسمبلی با VB.Net و #C میتوان گفت اسمبلی توانایی تولید DLL دارای API استاندارد ویندوز را دارد. (لی همین توانایی در VC++.Net نیز وجود دارد و شاید در Delphi.Net نیز باشد. (چیزی از دلفی بلد نیستم))
دوست عزیز آقای
azadeh2 به شما پیشنهاد میکنم به جاری بررسی کلی، مقالتان را به بررسی و مقایسه امکانات اسمبلی با تک تک زبان ها به طور جداگانه اختصاص دهید.
(اگر بخواهید اسمبلی را با تمام دنیای زبان های برنامه نویسی طرف کنید، بدون شک امکان منحصر به فردی را در اسمبلی پیدا نمیکنید!)
سلام:
عزیرم اگر اسمبلی را با تمام دنیای زبانهای سطح بالا طرف کنید هزاران امکان منحصر به فرد در اسمبلی می بینید . جمیع زبانهای سطح بالا در مقابل اسمبلی هیچ حرفی برای گفتن ندارند .
Fasm , Rosasm برو اسمبلی را از اول یاد بگیر بعد بیا اینجا نظر بده .