اولین بار است که به این وب‌سایت می‌آیید. راهنما را مطالعه کنید!
x
موسسه خیریه محک

شهر ریاضی بازی-ریاضی

نحوه‌ی کار با مقادیر صحیح بزرگ‌تر از word

0 امتیاز
342 نمایش

فرض کنیم در حال کار با پردازنده‌ی ۳۲ بیتی هستیم و ‍‍long در یه پیاده‌سازی C++ که استفاده می‌کنیم ۶۴ بیتی باشه و فرض کنیم داریم یه عملیات حسابی معمولی روی دو داده‌ی long انجام می‌دیم.
می‌دونیم که پردازنده مجبوره دو بار از RAM اطلاعات را بگیره و محاسسبات رو روی اون انجام بده. حالا سوای اینه که این ترتیب چه شکلیه؟ یعنی اول دوتا بایت سمت راست رو می‌گیره یا سمت چ‍پ؟ و بعد که محاسبات روی دو بایت رو انجام داد نتیجه‌ی موقتی کجا ذخیره می‌شه تا بعداً استفاده بشه؟

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پرسیده شده سه شنبه ۱۳ فروردین ۱۳۹۲ در C++ توسط prodo  

1 پاسخ

0 امتیاز

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

x = y + z;

که هر سه متغیر ۶۴ بیتی هستند، می‌شه سربار تولید شده در مرحله‌ی جمع ۴ بایت سمت راست x و y را مستقیماً در ۴ بایت سمت چپ z قرار داد. بعد از اون جمع ۴ بایت سمت چپ x و y رو با استفاده از اون ۴ بایت ذخیره شده انجام می‌دیم.

مشکل این‌جاست که در زبان اسمبلی و زبان ماشین عمل جمع به صورت ADD EAX, EBX نوشته می‌شه که مقدار کنونی ثبات رو با یه مقدار که از حافظه خونده جمع می‌کنه نه این که در یه گام دو مقدار از حافظه بگیره. مثلاً برای دو عدد ۳۲ بیتی

int x = y + z;

این شبه‌کدی است که نشون می‌ده اسمبلی این جمع چطوری هست

MOV AX, &y
ADD AX, &z
MOV &x, AX

بنابراین به صورت عملی این کار که سربار جمع چهار بایت اول رو در خود متغیر حاصل ذخیره کنیم ناممکنه. برای این کار می‌شه از یه ثبات دیگه یا از یه مکان موقت در حافظه استفاده کرد.

هیچ پژوهش انسانی نمی‌تواند ادعای علمی بودن داشته باشد، مگر این‌که از برهان ریاضی برخوردار باشد (لئوناردو داوینچی)
پاسخ داده شده چهارشنبه ۱۹ تیر ۱۳۹۲ توسط prodo