تماس درباره   صفحه اصلی
  زبان اسمبلي > نمايش داده ها > محاسبات در مکمل دو  
 
 

محاسبات در مکمل2


ويژگي مهم نمايش مکمل2 سادگي پياده سازي عمليات محاسباتي است.

جمع
تفريق
ضرب و تقسيم


جمع

يکی از دلايلی که روش مکمل2 برای ذخيره اعداد صحيح علامتدار متداول است راحتی پياده سازی عمليات جمع و تفريق در سخت افزار است. مزيت روش مکمل2 اين است که قوائد جمع و تفريق برای اعداد علامتدار دقيقا مشابه يکديگر هستند

جمع دو عدد مکمل2 به سادگی مانند جمع دو عدد باينری بدون علامت صورت می گيرد. وقتی عمل جمع در مکمل2 انجام می شود سمت چپ ترين بيت ممکن است يک رقم نقلی توليد کند. اين رقم نقلی استفاده نمی شود. بخاطر داشته باشيد که کليه داده ها در کامپيوتر دارای اندازه ثابتی هستند. جمع دو بايت هميشه يک بايت را می دهد( به همين ترتيب از جمع دو کلمه يک کلمه حاصل می شود). اين خاصيت در نمايش مکمل دو مهم است.


مثال1.

ِDecimal
 
Hex
 
111  
+2567
 
 0A07
 
 0000 1010 0000 0111
+ 467
 
+ 01D3
 
+ 0000 0001 1101 0011
3034
 
 0BDA
 
 0000 1011 1101 1010

مثال2.

Decimal
 
Hex
 
1 1111 11                    
+518
 
 0206
 
 0000 0010 0000 0110
+(-80)
 
+ FFB0
 
+ 1111 1111 1011 0000
438
 
 c 01B6
 
 c 0000 0001 1011 0110

مثال3.

Decimal
 
Hex
 
1 1111 1111 11    11    
-25
 
 FFE7
 
 1111 1111 1110 0111
+(-10)
 
+ FFF6
 
+ 1111 1111 1111 0110
-35
 
 c FFDD
 
 c 1111 1111 1101 1101

مثال4.

Decimal
 
Hex
 
1              1111 11    
+18495
 
 483F
 
 0100 1000 0011 1111
+ 25690
 
+ 645A
 
+ 0110 0100 0101 1010
44185
 
 AC99
 
 1010 1100 1001 1001

مثال5.

Decimal
 
Hex
 
1     1     11 111          
-5633
 
 E9FF
 
 1110 1001 1111 1111
+ (-29456)
 
+ 8CF0
 
+ 1000 1100 1111 0000
-35089
 
 c 76EF
 
 c 0111 0110 1110 1111

c نشان دهنده رقم نقلی است که در نتيجه ذخيره نمی شود و برای تشخيص آن از فلگ Carry استفاده می شود. در مثال های 2 و 3 مجموع از 16 بيت بزرگتر است و از بيت اضافی سمت چپ صرفنظر می شود. آخرين 4 بيت هميشه جمع درست را نمی دهد. در مثال 4 هيچ رقم نقلی در آخرين بيت وجود ندارد اما جواب صحيح نيست زيرا AC99 نمايش عدد 21351- است نه 44185. اين مشکل به دليل بيشتر شدن حاصل جمع از بزرگترين عدد قابل نمايش در 16 بيت (32767+) است.

در مثال آخر نيز پاسخ صحيح نيست 76EF نمايش عدد مثبت 30447 است. اين مشکل به دليل کمتر شدن حاصل جمع از کوچکترين عدد قابل نمايش در 16 بيت (32768-) است.

در مثال های 4و 5 پديده سرريزی رخ داده است. سخت افزار کامپيوتر قادر به تشخيص پديده سرريز ی هنگام عمل جمع نيست. کامپيوتر به طور عادی عمل جمع را انجام می دهد و پردازش بيت ها از راست به چپ می پردازد. هنگام جمع بيت ها گاهی يک رقم نقلی به ستون سمت چپ توليد می شود. اين رقم نقلی به جمع دو بيت ستون اضافه می شود. ستون خاص آخرين ستون سمت چپ يا بيت علامت است که ممکن است يک رقم نقلی به آن وارد(Carry In ) يا يک رقم نقلی از آن خارج(Carry Out) شود.

جدول زير به طور خلاصه بيان می کند که چه هنگام پديده سرريزی رخ می دهد:

Overflow?
Carry Out of Sign bit
Carry In to Sign bit
No
No
No
Yes
Yes
No
Yes
No
Yes
No
Yes
Yes

تفريق

تفريق دو عدد به فرم مکمل2 از طريق تفريق دو عدد به صورت اعداد بدون علامت انجام می گيرد. اگر عدد دوم از اولی بزرگتر باشد يک واحد به عدد اول اضافه می شود که به آن رقم قرضی می گويند. پديده سرريزی برای عمل تفريق نيز وجود دارد و هنگامی رخ می دهد که حاصل تفريق از محدوده قابل نمايش خارج می شود. برای تشخيص آن کامپيوتر مسئله تفريق را توسط عمل جمع انجام می دهد يعنی مکمل2 عدد دوم را گرفته سپس با عدد اول جمع می کند. اگر در حاصل جمع پديده سرريزی رخ دهد يعنی در تفريق هم رخ داده است.


مثال.

195
 
 1 00C3
 
 00C3
- 618
 
- 026A
=>
+ FD96
-423
 
 FE59
 
 FE59

ضرب و تقسيم

عمليات ضرب و تقسيم برای اعداد بدون علامت و علامتدار متفاوت از هم هستند. فرض کنيد عدد FF را در خودش ضرب کنيد، در ضرب بدون علامت عدد 255 در 255 عدد 65025 را نتيجه می دهد يا FE01 ولی در ضرب علامتدار در واقع عدد 1- در 1- ضرب می شود و حاصل برابر با 1 می شود.


CPU هيچ نظری ندارد که يک بايت يا کلمه خاص چه چيزي می خواهد نمايش بدهد. اسمبلی نظری درباره نوع هایی که زبان سطح بالا دارد ندارد. اين که داده چگونه تفسير می شود بستگی به دستورالعملی دارد که روی داده کار می کند. اينکه عدد FF برای نمايش عدد علامت دار 1- بکار رفته يا 255 بستگی به برنامه نويس دارد. زبان C نوع های صحيح علامتدار و بدون علامت را تعريف می کند و به کامپايلر اجازه می دهد تعيين کند دستورالعملی که با داده کار می کند درست است يا خير.


سوالات چندگزينه اي درباره محاسبات مکمل 2


 


 


صفحه اصلی| PDF| درباره| تماس