|
اعمال
محاسباتي دودويي :
انجام اعمال محاسباتي بر
روي داده هاي دودويي، شامل جمع ، تفريق ، ضرب و تقسيم داده هاي عددي است.
داده ها ممکن است علامت دار يا بدون علامت باشند. درست است که ما معمولاً از
محاسبات دهدهي استفاده مي کنيم ولي محاسبات در کامپيوتر به صورت دودويي
انجام مي شود و لذا آشنايي با محاسبات دودويي ، ضروري است.
داده هاي علامت دار و
بدون علامت
بعضي از داده هايي که با
آن ها سروکار داريد، بدون علامت هستند ، مثل شماره دانشجوئي ، شماره کارمندي
. اما بعضي از داده ها مي توانند با علامت همراه باشند. مثل يک عدد جبري و
دماي هوا . در داده هاي بدون علامت، تمام بيت ها به عنوان بيت داده محسوب مي
شوند و لذا در يک ثبات 16 بيتي حداکث مي توانندعدد 65535 را ذخيره کرد.
اين عدد از حاصل
شده است. در اينجا 16 تعداد بيت هاست و 2، حالتهاي هر بيت است. چون اعداد از
صفر شروع مي شوند، يک واحد از 2 بتوان 16 کسر مي شود و عدد 65535 به دست مي
ايد.
در داده هاي علامت دار،
بيت سمت چپ به عنوان بيت علامت منظور مي شود، به طوري که اين بيت براي اعداد
مثبت برابر با صفر و براي اعداد منفي برابر با ي است. لذا حداکثر مقداري که
در يک ثبات 16 بيتي مي توانبراي داده علامت دار نشان داد، است.
اکنون دو مقدار دودويي 11111001 و 00000010 را در نظر بگيريد ، اگر داده ها
را بدون علامت در نظر بگيريم ، مقدار دودويي 11111001 معادل دهدهي 249 ، و
مقدار دودويي 00000010 معادل مقدار دهدهي 2 است و حاصل جمع آن ها برابر با
251 خواهد شد که معادل دودويي آن، 11111011 است. اگر داده ها را علامت دار
در نظر بگيريم ، مقدار دودويي 11111001 معادل عدد دهدهي 7- و مقدار دودويي
00000010 معادل عدد دهدهي 2 است و حاصل جمع آنها 5- خواهد بود. اگر عدد 5-
را بصورت مکمل 2 نمايش دهيد، با نمايش 11111011 که همان 251 است برابر است.
محتواي ثبات به طرز تلقي
ما بستگي دارد. در اعمال محاسباتي ، بيت علامت عدد( 0 يا 1) به فلگ CF منتقل
مي شود.
رقم نقلي در داده هاي
بدون علامت ،معتبر است ولي در داده هاي علامت دار، بي معني است.
در انجام محاسبات ممکن
است سرريز به وجود آيد. سر ريز داده هاي علامت دار معتبر نيست ولي در داده
هاي بدون علامت، معتبر است.
اعمال جمع و تفريق دودويي :
دستورات ADD و SUB به
ترتيب براي انجام اعمال جمع و تفريق اعداد دودويي مورد استفاده قرار مي
گيرند و کاربرد آنها بصورت زير است:
< عملوند دوم , < < عملوند اولADD
<
< عملوند دوم
, < <
عملوند اول SUB <
همانطور که ملاحظه مي
شود، در اين دستورات نيز مانند دستورات ديگر ، عمليات مستقيم مربوط به حافظه
به حافظه وجود ندارد. در دستور ADD محتويات عملوند دوم با
عملوند اول جمع شده، نتيجه در عملوند اول قرار مي گيرد و در دستور SUB محتويات
عملوند دوم از عملوند اول کم شده ، نتيجه در عملوند اول قرار مي گيرد و
عملوند دوم تغيير نمي کند. عملوند هاي دستورات ADD و SUB مي
توانند بايت ، کلمه يا کلمه مضاعف باشند. توجه داشته باشيد که در اين دو
دستور ، ثبات هاي سگمنت نمي توانند به عنوان عملوند 1 مورد استفاده قرار
گيرند.
تاثير
دستورات SUB و ADD بر
فلگ ها :
اگر حاصل کار دستورات ADD و SUB برابر
صفر باشد ، فلگ ZF برابر با يک ميشود، اگر حاصل اين کار دستورات
منفي باشد، فلگ SF برابر با يک مي شود . در اعمال محاسباتي
بدن علامت، فلگ نقلي (CF ) مفيد واقع مي شود.اگر
نتيجه عمل جمع ،به قدري بزرگ باشد که در مقصد ( عملوند 1 ) جا نشود ، CF برابر
با يک مي شود.
MOV
ax,oFFh
Add
ax,1
; AL=00
, CF=1
سر ريز در محاسبات جمع
و تفريق :
براي پي بردن به مفهوم سرريز، مثالي را در نظر مي گيريم. فرض کنيم مي
خواهيم دو مقداري را که در ثبات هاي 8 بيتي ذخيره شده ايند، با هم جمع کنيم
. مي دانيم که کمترين مقدار ممکن در ثبات 8 بيتي برابر با 2- بتوان 7
که برابر با 128- است ( 7 تعداد بيت هايي است که به عدد اختصاص دارد) و
بيشترين مقدار ممکن در ثبات 8 بيتي برابر با 127 است . اگر حاصل جمع دو عدد،
از اين دو مقدار تجاوز کند عمل سرريز اتفاق مي افتد. بعنوان مثال AL حاوي 60H باشد، با دستور ADD AL,20H ،
انتظار داريم که عدد مثبتي ( 80H ) را در AL ذخيره
شود. اما اين کار موجب مي شود تا فلگ سرريز (OF ) و
علامت( SF ) برابر با يک شوند. وقتي فلگ OF برابر
با يک باشد يعني اين که سرريز اتفاق افتاده و وقتي SF برابر
با يک باشد، معنايش اين است که بيت علامت برابر با يک است. علتش اين است که
مقدار 80H به صورت
مقدار دودويي
10000000 ذخيره مي شود که يک عدد منفي است و در نتيجه به جاي اينکه
عدد 128 را داشته باشيم ، عدد 128- حاصل مي شود. اين امر بدين دليل اتفاق مي
افتد که ثبات AL کوچک است و گنجايش عدد حاصل را ندارد. لذا ،
مجموع دو عدد يک بايتي ممکن است نتيجه نادرستي را توليد کند. براي برطرف
کردن ايم مشکل، مي توان مقادير را در يک ثبات توسعه داد.
محاسبات در کلمات مضاعف :
در محاسبات چند کلمه اي ، برنامه نويس بايد به روش ذخيره داده ها که
قبلاً به آن اشاره شد دقت داشته باشد. داده ها درکلمات ععدي بطور معکوس
ذخيره مي شوند. به عنوان مثال ، داده عددي 1403h به صورت 0314h ذخيره مي شود. براي تعريف کلمه مضاعف از دستور
DD استفاده مي شود.
دستورات SBB ,ADC :
اين دستورات براي محاسبات دودويي مضاعف به کار مي رود. ADC به معني
جمع کردن با رقم نقلي است. در اين دستور ، رقم سرريز شده که در فلگ CF قرار
گرفت با عملوند اول جمع مي شود و سپس عملوند دوم به عملوند اول اضافه مي
گردد. دستور SBB به معني تفريق با رقم قرضي
است. اين دستور ، ابتدا محتويات بيت سرريز را از عملوند اول کسر مي کند و
سپس عملوند دوم را از عملوند اول کم مي کند و نتيجه را در عملوند اول قرار
مي دهد. اين دستورات زير به کار مي روند :
< عملوند دوم, < <عملوند اولADC
<
<
عملوند دوم, < <عملوند
اول
< SBB
|