تالار گفتمان مانشت
flagها در جمع و تفریق مکمل ۲ - نسخه‌ی قابل چاپ

flagها در جمع و تفریق مکمل ۲ - mehdi1902 - 24 تیر ۱۳۹۲ ۱۲:۴۲ ق.ظ

سلام به همه دوستان
آقا من توی این جمع و تفریق که بعدش باید مقدار بیت‌های پرچم v,c,s,z رو حساب کنیم مشکل دارم
درک نمی‌کنم اعداد علامت دار و بدون علامت در روش مکمل ۲ رو که جمع و تفریق می‌کنیم کی مثلا رقم نقلی میده و سرریز میشه، کی رقم نقلی میده ولی سرریز نمیشه و اینا .... Huh

هم از روی پوران خوندم هم از معماری مانو ولی آخرش اونطوری که باید درکش کنم نیمشه Sad

اگه منبعی، آموزشی، توضیحی هر چیزی بدین خیلی ممنون میشم. چون واقعا خوشم نمیاد حفظش کنم تا درکش نکردم Wink

پیشاپیش هم خیلی ممنون از جواب‌هاتون Big Grin

RE: flagها در جمع و تفریق مکمل ۲ - Morris - 24 تیر ۱۳۹۲ ۰۱:۰۶ ق.ظ

سلام دوست عزیز !
به طور کلی اوضاع از این قراره :
پردازنده نمیدونه شما اعدادو علامت دار در نظر می گیری یا بدون علامت و خیلی معمولی عمل جمع را پیاده سازی می کنه. در این عمل جمع، به پاسخ نگاه می کنه. یه دور فرض می کنه جمع دو عدد علامت داره و اگر سر ریز رخ داده باشه (یعنی مثلا دو عدد منفی با هم جمع شدن و پاسخ یه عدد مثبت شده یا دو عدد مثبت با هم جمع شدن و پاسخ یه عدد منفی شده باشد) بیت v را برابر یک می کند. بعد یه بار هم فرض می کنه عمل جمع بدون علامته و این بار نگاه می کنه آیا سر ریز رخ داده یا نه (یعنی مثلا دو عدد ۳ بیتی با هم جمع شدن و جواب شده ۹) اگر سر ریز رخ داده باشد بیت c را یک می کند.



حالا برنامه شما اگر علامت دار حساب و کتاب می کنه باید به هر دوی v و c توجه کنه ولی اگر بدون علامت حساب و کتاب می کنه می تونه کلا از v صرف نظر کنه.



z و s هم فکر نمی کنم ارتباطی به این موضوع داشته باشد.

flagها در جمع و تفریق مکمل ۲ - azad_ahmadi - 24 تیر ۱۳۹۲ ۰۱:۰۹ ق.ظ

سلام.
بهتر بود سوالی رو قرار بدید تا با هم حلش کنیم.
سرریز در حالات زیر اتفاق میوفته:
۱ - زمانی که جمع دو عدد مثبت، عددی منفی شود.
۲ - زمانی که جمع دو عدد منفی، عددی مثبت شود.
۳ - زمانی که Cn@Cn-1 = 1 (@ رو Xor درنظر بگیر).

برای درک بهتر شما یه کار بکنید، برای خودتون از هر نوع مثالی حل کنید، مثلا -۶ و +۴ رو باهم جمع کنید. -۸ و -۷ رو باهم جمع کنید.(توجه کنید که مبنای شما مثلا ۴ بیت باشد). یه مثال میزنم:
جمع دو عدد -۶ و +۴ :
۱۰۱۰ ....... عدد -۶
۰۱۰۰ ....... عدد +۴
ــــــــــــــــــــــــــــــــــ
۱۱۱۰ ....... جواب عدد -۲
خب در مثال بالا بیت علامت یا S برابر با ۱ هست.
بیت صفر یا Z برابر ۰ هست، چرا که نتیجه نهایی غیر ۰ بوده.
بیت V یا بیت سرریز برابر با ۰ هست، زیرا هیچ یک از حالات گفته شده رو ندارد.
بیت C یا بیت کری، برابر با ۰ هست زیرا هیچ رقم نقلی در آخر وجود ندارد.
----------------------------------------------------------------------------------------------------------------------
حالا همون مثال جمع -۸ و -۷ رو در چهار بیت انجام میدیم:
۱۰۰۰ ....... عدد -۸
۱۰۰۱ ....... عدد -۷
______________
۱/۰۰۰۱ ........ جواب عدد -۱۵
خب در مثال بیت C یا کری برابر با ۱ هست، چرا که در آخر یک رقم نقلی به مکان بعدی خواهد رفت.
بیت ۰ یا Z برابر با ۰ هست، چرا که نتیجه غیر از صفر است.
بیت V یا سرریز برابر با ۱ است، چرا که شروط گفته شده رو داراست.
بیت S یا بیت علامت برابر با ۰ هست. (توجه داشته باش که جایی برای ذخیره اون بیت آخری نداریم و مبنا ۴ بیت است، پس همونطور که میبینید حاصل جمع دوعدد منفی عددی مثبت شده و سرزیر دارد).


تلاش کردم ساده توضیح بدم، اگه باز اشکالی بود، تصویر یا سوال رو قرار بدید حل میکنیم.
موفق باشید.

flagها در جمع و تفریق مکمل ۲ - mehdi1902 - 24 تیر ۱۳۹۲ ۰۹:۴۸ ب.ظ

(۲۴ تیر ۱۳۹۲ ۰۱:۰۶ ق.ظ)Morris نوشته شده توسط:  سلام دوست عزیز !
به طور کلی اوضاع از این قراره :
پردازنده نمیدونه شما اعدادو علامت دار در نظر می گیری یا بدون علامت و خیلی معمولی عمل جمع را پیاده سازی می کنه. در این عمل جمع، به پاسخ نگاه می کنه. یه دور فرض می کنه جمع دو عدد علامت داره و اگر سر ریز رخ داده باشه (یعنی مثلا دو عدد منفی با هم جمع شدن و پاسخ یه عدد مثبت شده یا دو عدد مثبت با هم جمع شدن و پاسخ یه عدد منفی شده باشد) بیت v را برابر یک می کند. بعد یه بار هم فرض می کنه عمل جمع بدون علامته و این بار نگاه می کنه آیا سر ریز رخ داده یا نه (یعنی مثلا دو عدد ۳ بیتی با هم جمع شدن و جواب شده ۹) اگر سر ریز رخ داده باشد بیت c را یک می کند.



حالا برنامه شما اگر علامت دار حساب و کتاب می کنه باید به هر دوی v و c توجه کنه ولی اگر بدون علامت حساب و کتاب می کنه می تونه کلا از v صرف نظر کنه.



z و s هم فکر نمی کنم ارتباطی به این موضوع داشته باشد.

(۲۴ تیر ۱۳۹۲ ۰۱:۰۹ ق.ظ)azad_ahmadi نوشته شده توسط:  سلام.
بهتر بود سوالی رو قرار بدید تا با هم حلش کنیم.
سرریز در حالات زیر اتفاق میوفته:
۱ - زمانی که جمع دو عدد مثبت، عددی منفی شود.
۲ - زمانی که جمع دو عدد منفی، عددی مثبت شود.
۳ - زمانی که Cn@Cn-1 = 1 (@ رو Xor درنظر بگیر).

برای درک بهتر شما یه کار بکنید، برای خودتون از هر نوع مثالی حل کنید، مثلا -۶ و +۴ رو باهم جمع کنید. -۸ و -۷ رو باهم جمع کنید.(توجه کنید که مبنای شما مثلا ۴ بیت باشد). یه مثال میزنم:
جمع دو عدد -۶ و +۴ :
۱۰۱۰ ....... عدد -۶
۰۱۰۰ ....... عدد +۴
ــــــــــــــــــــــــــــــــــ
۱۱۱۰ ....... جواب عدد -۲
خب در مثال بالا بیت علامت یا S برابر با ۱ هست.
بیت صفر یا Z برابر ۰ هست، چرا که نتیجه نهایی غیر ۰ بوده.
بیت V یا بیت سرریز برابر با ۰ هست، زیرا هیچ یک از حالات گفته شده رو ندارد.
بیت C یا بیت کری، برابر با ۰ هست زیرا هیچ رقم نقلی در آخر وجود ندارد.
----------------------------------------------------------------------------------------------------------------------
حالا همون مثال جمع -۸ و -۷ رو در چهار بیت انجام میدیم:
۱۰۰۰ ....... عدد -۸
۱۰۰۱ ....... عدد -۷
______________
۱/۰۰۰۱ ........ جواب عدد -۱۵
خب در مثال بیت C یا کری برابر با ۱ هست، چرا که در آخر یک رقم نقلی به مکان بعدی خواهد رفت.
بیت ۰ یا Z برابر با ۰ هست، چرا که نتیجه غیر از صفر است.
بیت V یا سرریز برابر با ۱ است، چرا که شروط گفته شده رو داراست.
بیت S یا بیت علامت برابر با ۰ هست. (توجه داشته باش که جایی برای ذخیره اون بیت آخری نداریم و مبنا ۴ بیت است، پس همونطور که میبینید حاصل جمع دوعدد منفی عددی مثبت شده و سرزیر دارد).


تلاش کردم ساده توضیح بدم، اگه باز اشکالی بود، تصویر یا سوال رو قرار بدید حل میکنیم.
موفق باشید.

مرسی آقا. خیلی خوب بود. اگه بخوام به طور خلاصه بگم :
  • - اعداد بدون علامت : C=V (در صورتی سرریز داریم که رقم نقلی داشته باشیم.)
    - اعداد علامت‌دار : در صورتی سرریز داریم که :
    • * جمع دو عدد مثبت، منفی شود -> (( جواب نهایی = عددی که ۱+n بیت با هم نشان می‌دهند (عدد بدون علامت در نظر گرفته می‌شود) ))
      * جمع دو عدد منفی، مثبت شود -> (( جواب نهایی = منفی مکمل ۲ عدد ۱+n بیتی ))
      * رقم نقلی ورودی به بیت علامت =! رقم نقلی خروجی از بیت علامت -> (( جواب نهایی = عددی که ۱+n بیت با هم نشان می‌دهند (بیت ۱+n به عنوان بیت علامت در نظر گرفته می‌شود) ))
** اگه دو تا عدد مختلف العلامت رو با هم جمع کنیم، نه سرریز داریم و نه رقم نقلی (چون جوابمون از عدد بزرگتر، کوچیکتره)

اگه جائیش اشکالی داره، بازم لطف کنین بگین Tongue

RE: flagها در جمع و تفریق مکمل ۲ - Morris - 24 تیر ۱۳۹۲ ۱۰:۱۹ ب.ظ

(۲۴ تیر ۱۳۹۲ ۰۹:۴۸ ب.ظ)mehdi1902 نوشته شده توسط:  - اعداد بدون علامت : C=V

عبارت فوق نادرست است. مثلا اگر عدد ۰۱۱ و ۰۱۰ با هم جمع شوند، پاسخ آن ۱۰۱ است که در این عمل v = 1 و c = 0 خواهد بود. حال اگر فرض این باشد که اعداد بدون علامت هستند، جمله فوق رد می شود.

درست اینه که بگیم در مثال بالا اگر کاربر محترم منظورش جمع با علامت است، سر ریز رخ داده و باید حواسش جمع باشه خرابکاری نشه ولی اگر کاربر محترم منظورش جمع بی علامت بوده کلا v را بی خیال شه و به کارای دیگه اش برسه که هیچ مشکلی پیش نیومده.

flagها در جمع و تفریق مکمل ۲ - mehdi1902 - 25 تیر ۱۳۹۲ ۰۱:۱۰ ق.ظ

(۲۴ تیر ۱۳۹۲ ۱۰:۱۹ ب.ظ)Morris نوشته شده توسط:  
(24 تیر ۱۳۹۲ ۰۹:۴۸ ب.ظ)mehdi1902 نوشته شده توسط:  - اعداد بدون علامت : C=V

عبارت فوق نادرست است. مثلا اگر عدد ۰۱۱ و ۰۱۰ با هم جمع شوند، پاسخ آن ۱۰۱ است که در این عمل v = 1 و c = 0 خواهد بود. حال اگر فرض این باشد که اعداد بدون علامت هستند، جمله فوق رد می شود.

درست اینه که بگیم در مثال بالا اگر کاربر محترم منظورش جمع با علامت است، سر ریز رخ داده و باید حواسش جمع باشه خرابکاری نشه ولی اگر کاربر محترم منظورش جمع بی علامت بوده کلا v را بی خیال شه و به کارای دیگه اش برسه که هیچ مشکلی پیش نیومده.

اگه اعداد بدون علامت باشن، ۱۰۱=۰۱۱+۰۱۰ سرریز نداره که ! (چون عددمون ۳ بیتیه) یعنی c=v=0 ـه . اگه با علامت باشه سرریز داره فک کنم.

RE: flagها در جمع و تفریق مکمل ۲ - Morris - 25 تیر ۱۳۹۲ ۰۹:۱۱ ق.ظ

(۲۵ تیر ۱۳۹۲ ۰۱:۱۰ ق.ظ)mehdi1902 نوشته شده توسط:  
(24 تیر ۱۳۹۲ ۱۰:۱۹ ب.ظ)Morris نوشته شده توسط:  
(24 تیر ۱۳۹۲ ۰۹:۴۸ ب.ظ)mehdi1902 نوشته شده توسط:  - اعداد بدون علامت : C=V

عبارت فوق نادرست است. مثلا اگر عدد ۰۱۱ و ۰۱۰ با هم جمع شوند، پاسخ آن ۱۰۱ است که در این عمل v = 1 و c = 0 خواهد بود. حال اگر فرض این باشد که اعداد بدون علامت هستند، جمله فوق رد می شود.

درست اینه که بگیم در مثال بالا اگر کاربر محترم منظورش جمع با علامت است، سر ریز رخ داده و باید حواسش جمع باشه خرابکاری نشه ولی اگر کاربر محترم منظورش جمع بی علامت بوده کلا v را بی خیال شه و به کارای دیگه اش برسه که هیچ مشکلی پیش نیومده.

اگه اعداد بدون علامت باشن، ۱۰۱=۰۱۱+۰۱۰ سرریز نداره که ! (چون عددمون ۳ بیتیه) یعنی c=v=0 ـه . اگه با علامت باشه سرریز داره فک کنم.

بله فرمایش شما صحیح است یعنی در این مثال، چنانچه اعداد بدون علامت فرض شوند سرریز رخ نداده است ولی پس از محاسبه بالا مقدار بیت v برابر ۱ و مقدار بیت c برابر صفر خواهد شد که با هم برابر نیستند ولی شما نوشته اید که برابرند.

flagها در جمع و تفریق مکمل ۲ - mehdi1902 - 25 تیر ۱۳۹۲ ۱۰:۳۱ ق.ظ

(۲۵ تیر ۱۳۹۲ ۰۹:۱۱ ق.ظ)Morris نوشته شده توسط:  
(25 تیر ۱۳۹۲ ۰۱:۱۰ ق.ظ)mehdi1902 نوشته شده توسط:  
(24 تیر ۱۳۹۲ ۱۰:۱۹ ب.ظ)Morris نوشته شده توسط:  
(24 تیر ۱۳۹۲ ۰۹:۴۸ ب.ظ)mehdi1902 نوشته شده توسط:  - اعداد بدون علامت : C=V

عبارت فوق نادرست است. مثلا اگر عدد ۰۱۱ و ۰۱۰ با هم جمع شوند، پاسخ آن ۱۰۱ است که در این عمل v = 1 و c = 0 خواهد بود. حال اگر فرض این باشد که اعداد بدون علامت هستند، جمله فوق رد می شود.

درست اینه که بگیم در مثال بالا اگر کاربر محترم منظورش جمع با علامت است، سر ریز رخ داده و باید حواسش جمع باشه خرابکاری نشه ولی اگر کاربر محترم منظورش جمع بی علامت بوده کلا v را بی خیال شه و به کارای دیگه اش برسه که هیچ مشکلی پیش نیومده.

اگه اعداد بدون علامت باشن، ۱۰۱=۰۱۱+۰۱۰ سرریز نداره که ! (چون عددمون ۳ بیتیه) یعنی c=v=0 ـه . اگه با علامت باشه سرریز داره فک کنم.

بله فرمایش شما صحیح است یعنی در این مثال، چنانچه اعداد بدون علامت فرض شوند سرریز رخ نداده است ولی پس از محاسبه بالا مقدار بیت v برابر ۱ و مقدار بیت c برابر صفر خواهد شد که با هم برابر نیستند ولی شما نوشته اید که برابرند.

ببینید اینکه سخت افزار عمل جمع رو بدون توجه به علامت دار بودن و بدون علامت بودن اعداد انجام میده درسته ولی تشخیص بیت‌ها پرچم بستگی به علامت‌دار یا بدون‌علامت بودن اعداد داره. کتاب پوران دقیقا اینکه در اعداد بدون‌علامت C=V هست رو اشاره کرده. Wink

RE: flagها در جمع و تفریق مکمل ۲ - Morris - 25 تیر ۱۳۹۲ ۱۰:۴۸ ق.ظ

(۲۵ تیر ۱۳۹۲ ۱۰:۳۱ ق.ظ)mehdi1902 نوشته شده توسط:  
(25 تیر ۱۳۹۲ ۰۹:۱۱ ق.ظ)Morris نوشته شده توسط:  
(25 تیر ۱۳۹۲ ۰۱:۱۰ ق.ظ)mehdi1902 نوشته شده توسط:  
(24 تیر ۱۳۹۲ ۱۰:۱۹ ب.ظ)Morris نوشته شده توسط:  
(24 تیر ۱۳۹۲ ۰۹:۴۸ ب.ظ)mehdi1902 نوشته شده توسط:  - اعداد بدون علامت : C=V

عبارت فوق نادرست است. مثلا اگر عدد ۰۱۱ و ۰۱۰ با هم جمع شوند، پاسخ آن ۱۰۱ است که در این عمل v = 1 و c = 0 خواهد بود. حال اگر فرض این باشد که اعداد بدون علامت هستند، جمله فوق رد می شود.

درست اینه که بگیم در مثال بالا اگر کاربر محترم منظورش جمع با علامت است، سر ریز رخ داده و باید حواسش جمع باشه خرابکاری نشه ولی اگر کاربر محترم منظورش جمع بی علامت بوده کلا v را بی خیال شه و به کارای دیگه اش برسه که هیچ مشکلی پیش نیومده.

اگه اعداد بدون علامت باشن، ۱۰۱=۰۱۱+۰۱۰ سرریز نداره که ! (چون عددمون ۳ بیتیه) یعنی c=v=0 ـه . اگه با علامت باشه سرریز داره فک کنم.

بله فرمایش شما صحیح است یعنی در این مثال، چنانچه اعداد بدون علامت فرض شوند سرریز رخ نداده است ولی پس از محاسبه بالا مقدار بیت v برابر ۱ و مقدار بیت c برابر صفر خواهد شد که با هم برابر نیستند ولی شما نوشته اید که برابرند.

ببینید اینکه سخت افزار عمل جمع رو بدون توجه به علامت دار بودن و بدون علامت بودن اعداد انجام میده درسته ولی تشخیص بیت‌ها پرچم بستگی به علامت‌دار یا بدون‌علامت بودن اعداد داره. کتاب پوران دقیقا اینکه در اعداد بدون‌علامت C=V هست رو اشاره کرده. Wink

خیلی عجیبه ! من هنوز پوران را نخوندم.
نمی دونم چرا اینو نوشته !

flagها در جمع و تفریق مکمل ۲ - mehdi1902 - 25 تیر ۱۳۹۲ ۱۰:۵۵ ق.ظ

(۲۵ تیر ۱۳۹۲ ۱۰:۴۸ ق.ظ)Morris نوشته شده توسط:  
(25 تیر ۱۳۹۲ ۱۰:۳۱ ق.ظ)mehdi1902 نوشته شده توسط:  
(25 تیر ۱۳۹۲ ۰۹:۱۱ ق.ظ)Morris نوشته شده توسط:  
(25 تیر ۱۳۹۲ ۰۱:۱۰ ق.ظ)mehdi1902 نوشته شده توسط:  
(24 تیر ۱۳۹۲ ۱۰:۱۹ ب.ظ)Morris نوشته شده توسط:  
(24 تیر ۱۳۹۲ ۰۹:۴۸ ب.ظ)mehdi1902 نوشته شده توسط:  - اعداد بدون علامت : C=V

عبارت فوق نادرست است. مثلا اگر عدد ۰۱۱ و ۰۱۰ با هم جمع شوند، پاسخ آن ۱۰۱ است که در این عمل v = 1 و c = 0 خواهد بود. حال اگر فرض این باشد که اعداد بدون علامت هستند، جمله فوق رد می شود.

درست اینه که بگیم در مثال بالا اگر کاربر محترم منظورش جمع با علامت است، سر ریز رخ داده و باید حواسش جمع باشه خرابکاری نشه ولی اگر کاربر محترم منظورش جمع بی علامت بوده کلا v را بی خیال شه و به کارای دیگه اش برسه که هیچ مشکلی پیش نیومده.

اگه اعداد بدون علامت باشن، ۱۰۱=۰۱۱+۰۱۰ سرریز نداره که ! (چون عددمون ۳ بیتیه) یعنی c=v=0 ـه . اگه با علامت باشه سرریز داره فک کنم.

بله فرمایش شما صحیح است یعنی در این مثال، چنانچه اعداد بدون علامت فرض شوند سرریز رخ نداده است ولی پس از محاسبه بالا مقدار بیت v برابر ۱ و مقدار بیت c برابر صفر خواهد شد که با هم برابر نیستند ولی شما نوشته اید که برابرند.

ببینید اینکه سخت افزار عمل جمع رو بدون توجه به علامت دار بودن و بدون علامت بودن اعداد انجام میده درسته ولی تشخیص بیت‌ها پرچم بستگی به علامت‌دار یا بدون‌علامت بودن اعداد داره. کتاب پوران دقیقا اینکه در اعداد بدون‌علامت C=V هست رو اشاره کرده. Wink

خیلی عجیبه ! من هنوز پوران را نخوندم.
نمی دونم چرا اینو نوشته !

اون حرفی که شما میزنه درسته آآ. که جمع ۱۰۱=۰۱۱+۰۱۰ سرریز داره. ولی خب اون مال علامت داره. چون تو علامت‌دار وقتی ۳ بیت برای عدد داریم، در اصل ۲ بیتش برای ارزش عدده. ولی توی بدون علامت‌ها همون ۳ بیت برای خود عدد هستن.
ولی خدائیش خیلی گیج کنندس !!!

RE: flagها در جمع و تفریق مکمل ۲ - mehdi1902 - 25 تیر ۱۳۹۲ ۱۱:۵۸ ق.ظ

آقا من یه جمع بندی دیگه بکنم (کلا با جمع بندی حال میکنم من Big Grin ) :
برای جمع حالات زیر وجود داره :
  • - اعداد بدون علامت : که در این حالت V=C خواهد بود.
    - اعداد علامت دار : ۲ روش برای تشخیص سرریز وجود داره :
    • * روش اول :
      • * جمع دو عدد مثبت، منفی بشه
        * جمع دو عدد منفی، مثبت بشه
      * روش دوم : رقم نقلی ورودی به بیت علامت =! رقم نقلی خروجی از بیت علامت (@ xor فرض شود) -> (Cn-1@Cn=1)
--------------------------------------------------------
حالا ببینیم جواب نهایی چه جوری به دست میاد. اینجا هم دو حالت کلی وجود داره :
  • * s@v=1 : جواب = -(مکمل ۲ عدد n بیتی)
    * s@v=0 : جواب = +(عدد n بیتی)

** توجه داشته باشیم که وقتی میگیم n بیت، یعنی در مواقعی که رقم نقلی داریم، برای جواب نهایی نقشی نداره.

ایشالا که درست باشه جمع بندیم و به درد دوستان بخوره Wink

flagها در جمع و تفریق مکمل ۲ - alagh - 25 تیر ۱۳۹۲ ۱۲:۱۶ ب.ظ

ما استفاده کردیمSmile
مرسی