PDA

View Full Version : زبان ماشین



ravanfar
دوشنبه 01 دی 1382, 12:19 عصر
سئوال: همه کامپیلرها کد های نوشته شده به زبانهای مختلف رو به زبان ماشین ترجمه میکنند
(01010000)ولی چرا یک فایل exe نوشته شده به زبان assembly با یک فایل exe دیگه که با زبان
مثلاً دلفی یا فرترن یا VC یا C شارپ نوشته شده اند خیلی سریعتر اجرا میشه (بافرض اینکه همشون یک نوع پروسس انجام بدهند)

Developer Programmer
دوشنبه 01 دی 1382, 14:30 عصر
چون برنامه نوشته شده در اسمبلی بسیار به کد ماشین نزدیکتره و نیاز آنچنانی به ترچمه نداره
بعدش هم برنامه دلفی زبان سطح بالا 32 بیتی است به صورت شی گرا اما اسمبلی شی گرا نیست

Developer Programmer
دوشنبه 01 دی 1382, 14:31 عصر
یادم رفت بگم
اگر برنامه exe که به یک زبان سطح بالا نوشته شده رو دیباگ کنی به دستورات اسمبلی بر می خوری...

Inprise
دوشنبه 01 دی 1382, 15:01 عصر
سئوال: همه کامپیلرها کد های نوشته شده به زبانهای مختلف رو به زبان ماشین ترجمه میکنند
(01010000)ولی چرا یک فایل exe نوشته شده به زبان assembly با یک فایل exe دیگه که با زبان
مثلاً دلفی یا فرترن یا VC یا C شارپ نوشته شده اند خیلی سریعتر اجرا میشه (بافرض اینکه همشون یک نوع پروسس انجام بدهند)


الف. همه کامپایلرها کد دریافتی رو الزاما به کد ماشین تبدیل نمیکنند . "اغلب" کامپایلرها کد دریافتی رو به کد ماشین ترجمه میکنند . ( به عنوان مثال سی شارپ به کد ماشین تبدیل نمیشه )

ب. الزاما" برنامه های تولید شده با اسمبلی از برنامه های تولید شده با سایر زبانها ، سریعتر اجرا نمیشود بلکه "اغلب" برنامه های اسمبلی سریعتر اجرا میشوند .

ج. علت سرعت بالاتر برنامه های اسمبلی در شرایط مساوی با برنامه های نوشته شده با زبانهای دیگر این است که شما در زبان اسمبلی مستقیما" با پردازنده سر و کار دارید ، آنچه باید محاسبه شود یا مورد محاسبه قرار گیرد ، بنا به قواعد خاصی که منطبق بر ساختار پردازنده است توسط برنامه نویس در محفظه های خاص پردازشی پردازنده قرار میگیرند ، در حالیکه در زبانهای دیگر متغیرها دارای انواع متفاوتی هستند که مدیریت نحوهء چینش ما به ازای آنها در رجیسترهای پردازنده ، نحوه محاسبه ، تعریف قواعد محاسبه و ... همگی به پیچیدگی پردازش نهائی که قرار است انجام شود اضافه میکنند ، لذا "اغلب" برنامه های نوشته شده با اسمبلی سریعتر اجرا میشوند . ( این مساله ارتباطی با نوع زبان ، شی گرا بودن یا نبودن ، میزان بیت واحد ( 32 بیتی - 62 بیتی و غیرهم ) ، کتابخانه های مورد استفاده و ... ندارد .

موفق باشی

ravanfar
سه شنبه 02 دی 1382, 21:47 عصر
سلام
جناب inprise نوشته اند:

آنچه باید محاسبه شود یا مورد محاسبه قرار گیرد ، بنا به قواعد خاصی که منطبق بر ساختار پردازنده است توسط برنامه نویس در محفظه های خاص پردازشی پردازنده قرار میگیرند
آیا منظور همان ثبات ها است؟
:oops: (لطفاًاز سئوالات پیش پا افتاده من خسته نشوید) :oops:
در پناه خدا باشید

B-Vedadian
چهارشنبه 03 دی 1382, 10:25 صبح
با سلام،

من هم اضافه کنم اینکه آقای Inprise گفته اند «اغلب» نه «همه» بیشتر برای تاکید بر تواناییهای انسان است. انسان کارهای طبقه بندی شده را بهتر انجام می دهد و گر نه وقتی به مترجم ها کار می کنیم برای رویه های بزرگ دستورات زبان ماشین بصورت آماده قرار دارد که برای انجام آن رویه در حالت کلی طراحی شده است، اما در برنامه نویسی اسمبلی که عملا مشابه کد نویسی زبان ماشین است برای هر «مورد انجام» یک رویه می توان الگوریتم متفاوتی داشت و لذا به بیشترین سرعت دست یافت. مثال:

پردازنده های Pentium و بعد آن کدهایی که باید اجرا شوند را در حافظه پنهان(Cache) خود قرار می دهند و در مورد عملیات شرطی که بیشترین زمان اجرا را می برد مسقل از شرط مورد نظر هر تعداد از مسیر ها که ممکن (برقراری یا عدم برقراری تساوی برای مثال) باشد بصورت موازی انجام داده و پس از تشخیص راه صحیح (راهی که پس از بررسی شرط باید طی شود) به بخش مورد نظر از حافظه پنهان(Cache) سویچ میکنند. در پردازنده های PIII و بعد برای صرفه جویی در کار می توان در زمان سویچ هم برنامه اجرا کرد:

<span dir=ltr>
Nonoptimized:

stc
jnz Hello
....
....


Optimized:

jnz Hello
stc
....
....</span>

دو برنامه بالا در این پروسسورها می توانند دقیقا یک کار انجام دهند.

حال می توان دید که با برنامه نویسی اسمبلی می توان با داشتن اطلاعات راجع به پردازنده از زمانهای تلف شده استفاده کرد که مسلما در زبانهای سطح بالا ممکن نیست.

Inprise
چهارشنبه 03 دی 1382, 11:43 صبح
آیا منظور همان ثبات ها است؟

بله منظور همان رجیستر ها بود .


من هم اضافه کنم اینکه آقای Inprise گفته اند «اغلب» نه «همه» بیشتر برای تاکید بر تواناییهای انسان است

مطلب و در واقع حسن تعلیل شما هم صحیح بود اما منظور من دقیقا" کاربردهای تکنیکی و فنی بود . به عنوان مثال برنامه هائی که با زبانهای سطح بالا و روی ویندوز نگارش 32 بیتی نوشته و روی پردازنده اینتل نوشته میشوند روی بقیه نسخه های ویندوز 32 بیتی ( بدون توجه به نوع پردازنده ) تقریبا" با کارکردی یکسان اجرا میشوند اما اگر برنامه ای را مخصوصا برای پردازنده اینتل بنویسید و حداکثر سازگاری را با AMD در آن لحاظ کنید ، سطح قابل توجهی از احتمال وجود دارد که کد شما به همان خوبی وبهینگی که روی اینتل اجرا میشود روی AMD اجرا نشود ، و مسائلی از این دست که همگی ناظر بر این عبارت هستند که "برنامه های تولید شده با اسمبلی همواره سریعتر یا بهینه تر نیستند " ، تولید کاربرد با اسمبلی صرفا" برای اهداف خاصی مفهوم دارد .

خوش باشید

Best Programmer
پنج شنبه 04 دی 1382, 03:06 صبح
-------------

دوست عزیز !
سه تا مطلب نوشته بودی که پاک شد . به این دلائل :

الف. پینگیلیش بود
ب. بی ربط بود

دفعه قبل بهت تذکر دادم ، اسیستنت هم همینطور ، لذا این دفعه پاک کردم . من بعد هم پینگیلیش یا بی ربط بنویسی پاک میکنم . اگر دوست داری معلوماتت رو در اختیار دیگران قرار بدی اول باید قواعد اون جمع رو بپذیری و امیدوارم بجای دلخور شدن ، سعی کنی "فارسی" بنویسی !

اینپرایز

B-Vedadian
دوشنبه 08 دی 1382, 09:45 صبح
با سلام،

ممنون از آقای اینپرایز.

Best Programmer
سه شنبه 09 دی 1382, 05:03 صبح
آنچه باید محاسبه شود یا مورد محاسبه قرار گیرد ، بنا به قواعد خاصی که منطبق بر ساختار پردازنده است توسط برنامه نویس در محفظه های خاص پردازشی پردازنده قرار میگیرند
من منظور شما رو از این جمله نفهمیدم

Best Programmer
سه شنبه 09 دی 1382, 05:05 صبح
علت سرعت بالاتر برنامه های اسمبلی در شرایط مساوی با برنامه های نوشته شده با زبانهای دیگر این است که شما در زبان اسمبلی مستقیما" با پردازنده سر و کار دارید

من منظور شما رو از این جمله نفهمیدم!!!! :oops:

Best Programmer
سه شنبه 09 دی 1382, 05:20 صبح
دوستان بزودی شروع می کنم.

Best Programmer
سه شنبه 09 دی 1382, 05:23 صبح
"portable executable" is that the file format is universal across win32 platform: the PE loader of every win32 platform recognizes and uses this file format even when Windows is running on CPU platforms other than Intel

Best Programmer
سه شنبه 09 دی 1382, 05:25 صبح
u should know my best firend i 'm not working on ASM16 -32 bit (DOS).d

Best Programmer
سه شنبه 09 دی 1382, 06:11 صبح
هر دو کد 1 کار را انجام میدهنند وبا 1 Disassembler کار شده است.
Source MASM32 (window):d

Best Programmer
سه شنبه 09 دی 1382, 06:32 صبح
source VC 6.0: