محاسبات اسمبلي :

در اسمبلي براي داده هاي علامت دار و بدون علامت فرامين متفاوتي وجود ندارد به دليل اينكه محاسبات در كامپيوتر در مبناي 2 انجام مي شود نتيجه حاصل از فرامين محاسباتي به نحوه تصوير ما از رشته بيت ها وابسته است ، بعبارت ديگر د صورتيكه در محاسبات باينري ورودي ها را بدون علامت در نظر مي گيريم خروجي را نيز بايد بدون علامت فرض كنيم و اگر ورودي ها را علامت دار فرض كنيم ، خروجي را نيز بايد با علامت فرض كنيم.

مثال/     بدون علامت  

 با علامت

 


مكمل 2 

 

 

 

بعبارتي مي توانيم از همين ابتدا يا ورودي ها را با علامت يابي علامت در نظر بگيريم يا اينكه جواب معادله را بدون توجه بدست آوريم بعد اگر جواب نهايي را علامت دار فرض كرديم يعني ورودي ها را هم علامت دار گرفتيم در غير اينصورت بي علامت اند.

در اينجا اگر سخته ي نهايي را با علامت فرض كنيم برابر 20- مي شود و اگر بدون علامت برابر 44 مي گردد.

 

فرامين محاسباتي :

فرمان ADD : غالب كلي اين فرمان به صورت زير است :

عملوند 2   و عملوند 1    ADD

اين فرمان محتواي 1 را به عملوند 2 جمع كرده و حاصل را در عملوند 1 مي ريزد محتواي قبلي عملوند 1 از بين مي رود و عملوند 2 دست نخورده باقي مي ماند.

بعبارتي معادل اين دستور در پاسكال است ( عملوند 2 + عملوند 1 = عملوند 1)

عملوندها مي توانند ثبات ، متغيري از حافظه يا مقدار بعد فصل باشند . تمام

قوانين دستور mov در اينجا هم وجود دارد.

/ مثال

 

فرمان Sub : غالب كلي اين فرمان به صورت زير است.

عملوند 2   و عملوند 1     sub

اين فرمان محتواي عملوند 2 را از عملوند 1 كم كرد و حاصل را در عملوند 1 مي ريزد. معادل اين عبارت در پاسكال : عملوند 2 – عملوند 1 = عملوند 1

/ مثال  

غلط است چون عملوند 1 عدد نيست.   × 

 

 

 

 

تاثير فرامين ADD و sub بر روي فلگ هاي كنترلي :

در صورتيكه نتيجه محاسبات صفر شود ( چه براي داده هاي علامت دار ، چه بدون علامت يا براي فرامين ADD يا sub )فلگ (ZF = 1) مي شود.

در صورتيكه نتيجه عمليات منفي شود بيت (SF=1) مي شود . در داده هاي بدون علامت در صورتيكه حاصل در مقصد جا نشود بيت (CF=1) مي شود . در داده هاي علامت دار در صورتيكه حاصل در مقصد جا نشود بيت (OF = 1) مي شود.

 مثال / 

محتواي اعداد باينري از0 تا 255 است ولي 350 بيشتر از اين رنج است

چون بايد AL و BL هم طول باشند

 

فرمان x ADD :

غالب كلي اين فرمان به صورت زير است:

Xadd   عملوند 2   و عملوند 1 

اين فرمان محتواي مجموع دو عملوند را در عملوند 1 گذاشته و محتواي قبلي عملوند 1 را در عملوند 2 مي گذارد.

فرمان ADC :

غالب كلي آن به صورت زير است :

ADCعملوند 2  و عملوند 1   

 

اين فرمان محتواي عملوند 2 و رقم نقلي حاصل از عمليات قبلي را با عملوند 1 جمع كرده و حاصل را در عملوند 1 مي ريزد.

 

كاربرد:

از اين فرمان براي جمع مقادير بسيار بزرگ هنگامي كه ثباتي با آن اندازه نداريم استفاده مي شود.

مثال / با فرض اينكه ثبات 32 بيتي نداريم مطلوبست جمع دو متغير 32 بيتي  و  ؟

حاصل جمع Ax و Bx را مي ريزيم درAx و حاصل جمع Cx و Dx را مي ريزيم در Dx بايد در جمع دو عدد بعدي لحاظ شود كه در اينصورت مي شود.

 

و اگر حاصل جمع دو عدد ديگر رقم نقلي داشت آنگاه CF=1 مي شود.

 

 

فرمان        (sub Borrow)    SBB

غالب كلي اين فرمان به صورت زير است :

SBB عملوند 2 و عملوند 1

     اين فرمان محتواي عملوند 2 و رقم فرضي حاصل از عمليات قبلي را از عملوند 1 كم كرده و حاصل را در عملوند 1 مي ريزد.

 

كاربرد:

از اين فرمان جهت تفريق مقادير بسيار بزرگ هنگاميكه ثباتي به آن اندازه نداريم استفاده مي شود.

 

مثال / با فرض اينكه ثبات 32 بيتي نداريم مطلوبست محاسبه تفريق  و :

 

ضرب در اسمبلي :

فرمان در اسمبلي براي داده هاي بدون علامت mul و براي علامت دار Imul است ، هم چنين فرمان ضرب براي داده هاي 8 و 16 و 32 بيتي نيز متفاوت عمل مي كند كه در ادامه به بررسي هر يك از آنها مي پردازيم.

1. فرمان ضريب 8 بيتي : غالب كلي آن به صورت زير است .

                                                                    عملوند 8 بيتي mul 

اين فرمان محتواي عملوند را در ثبات AL ضرب مي كند و حاصل آن را در ثبات Ax مي گذارد.

 

* نكته :

1. حاصل ضرب دو عملوند 8 بيتي ممكن است // 16 بيتي داشته باشد.

2. قبل از استفاده از فرمان mul مي بايست عملوند اول را در ثبات Al قرار دهيم.

/ مثال

يعني BL را در محتواي AL ضرب كن و حاصل را در Ax بريز.

2- فرمان ضرب 16 بيتي : اين فرمان غالب كلي اش بصورت زير است :

                                                                    عملوند 16 بيتي mul 

اين فرمان محتواي عملوند را در ثبات Ax ضرب كرده و حاصل را در ثبات هاي Ax :Dx مي ريزد. مي تواند دو مقدار 32 بيتي باشد كه 16 بيت اولش در Ax و 16 بيت بعدي در Dx قرار مي گيرد، مي تواندكمتر هم باشد كه در اينصورت همه مقدار را در Ax مي گذاريم و Dx هيچ مقداري نمي گيرد.

/ مثال

3- فرمان ضرب 32 بيتي : غالب كلي اين فرمان به صورت زير است :

                                                                    عملوند 32 بيتي  mul 

محتواي عملوند را در ثبات EAX ضرب كرده و حاصل را در ثبات EDX:EAX مي گذارد.

 

تشريح صفحه نمايش :

در اسمبلي براي نمايش عبارتي در صفحه نمايش مي بايست اطلاعات مختصري در مورد صفحه نمايش كامپيوتر داشته باشيم، به طور كلي صفحه نمايش كامپيوتر را در دو هم متني و گرافيكي بررسي مي كنيم كه ما در اين درس تنها به مد متني آن مي پردازيم. در مد متني صفحه نمايش كامپيوتر به يك جدول 80 ستوني از 0 تا 79 شماره گذاري شده است ، 25 سطري از 0 تا 24 شماره گذاري شده ، تقسيم مي شود. براي نمايش هر كاراكتر در خانه هاي اين جدول نياز به 2 بايت اطلاعات است، 1 بايت خود كاراكتر را مشخص مي كند و بايت ديگر خصوصيت نمايشي كاراكتر را مشخص مي كند.

80

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

دارای (شماره ستون – شماره سطر

خصوصيات نمايشي آن مثل :

رنگ زمينه ،‌رنگ نوشته و غيره

اطلاعات مثل ، اينكه مثلاً مي خواهيم حرف a را در يكي از اين خانه ها بنويسيم.

 

تشريح بايت خصوصيت نمايشي كاراكتر

اين بايت 8 بيت دارد كه بيتهاي آن به صورت زير تنظيم مي شود.

 

 

 

 

 

 

 

چشمك زن

رنگ زمينه

روشنايي

رنگ قلم

 

 

- در اسمبلي براي تعيين رنگها از كد RGB استفاده مي شود.

 

Blue

Green

Red

مشكي

0

0

0

آبي

1

0

0

سبز

0

1

0

فيروزه اي

1

1

0

قرمز

0

0

1

بنفش

1

0

1

كبود

0

1

1

سفيد

1

1

1

 

 

مثال / مطلوبست تشريح صفت نمايشي 3F  H ؟

 

 

- مطلوبست تشريح كدهاي زير ؟  CDH  , 122  , 74 H

 

- مطلوبست تشريح بصورت چشمك زن در زمينه كبود با رنگ قرمز ؟

 

-بصورت ثابت در زمينه سبز با رنگ خاكستري (مشكي روشن) بنويسيد ؟