PDA

View Full Version : کد ماشین تولید شده برای دو نوع شرط متفاوت !



Mahmood_M
شنبه 04 آبان 1387, 01:29 صبح
با سلام
به کدهای زیر دقت کنید ! :
1.

if A = B then D := True else D := False;
2.

D := ( A = B );

فرض کنید D یک متغیر Boolean و A و B دو متغیر یکسان باشند ...
دو کد بالا هر دو یک وظیفه رو انجام می دن ، یعنی مساوی بودن دو مقدار A و B مقدار D رو True میکنه و مساوی نبودنشون مقدار D رو False می کنه ...

حالا سئوال اینه که کامپایلر دلفی این دو خط کد رو به چه دستوری در زبان ماشین تبدیل میکنه ، یعنی وقتی برنامه کامپایل میشه این دو دستور به چه دستوری ترجمه می شن ، آیا دقیقا مثل هم هستن یا اینکه رفتار کامپایلر با اونها متفاوت هست ؟

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

اگه دوستان راهنمایی کنن ممنون میشم ...

با تشکر ...

samprp
شنبه 04 آبان 1387, 09:47 صبح
D := ( A = B );
اینو خبر نداشتم ازش . پرانتز یه عملگر جدیده ؟
به نظرم اون دومیه فقط یه عمل انتسابه؛شرط نیست
تو دلفی هم هیچ قسمتی برای دیدن کد اسمبلی دستورات اجرا نشده نداره ولی تو VS داره می تونی از اونجا تست کنی .

vcldeveloper
شنبه 04 آبان 1387, 11:27 صبح
حالا سئوال اینه که کامپایلر دلفی این دو خط کد رو به چه دستوری در زبان ماشین تبدیل میکنه ، یعنی وقتی برنامه کامپایل میشه این دو دستور به چه دستوری ترجمه می شن ، آیا دقیقا مثل هم هستن یا اینکه رفتار کامپایلر با اونها متفاوت هست ؟
برای عبارت اول:
24842

برای عبارت دوم:
24843



اینو خبر نداشتم ازش . پرانتز یه عملگر جدیده ؟ربطی به پرانتز نداره.عبارت A=B یک عبارت بولی هست، نتیجه اش هم یا True هست یا False، پس میتونه به D که یک متغیر Boolean هست، اختصاص پیدا کنه.

Mahmood_M
یک شنبه 05 آبان 1387, 00:16 صبح
ممنون جناب کشاورز ، با عکسی که گذاشتید نحوه فهمیدنش رو هم پیدا کردم ...

موفق و پیروز باشید ...

samprp
یک شنبه 05 آبان 1387, 18:23 عصر
نحوه فهمیدنش رو هم پیدا کردمبی زحمت اگه برای دلفی 2007 هم صادقه ذکر کنید . چون من پیداش نکردم
با تشکر.

Mahmood_M
یک شنبه 05 آبان 1387, 23:19 عصر
بی زحمت اگه برای دلفی 2007 هم صادقه ذکر کنید . چون من پیداش نکردم
با تشکر.
باید روی خط مورد نظرتون توی کد یک Break Point بزارید بعد برنامه رو درمحیط دلفی اجرا کنید وقتی به Break Point رسیدید از منوی View و بعد Debug Windows ، گزینه CPU رو انتخاب کنید ، پنجره ای باز میشه که کد ماشین برنامتون رو نشون می ده ...
البته این برای دلفی 7 بود ، در دلفی 2007 هم این گزینه ها وجود دارند اما شاید جاشون تغییر کرده باشه ، کمی گزینه ها رو نگاه کنید پیدا می کنید ...

موفق باشید ...