Download presentation
Presentation is loading. Please wait.
1
اصول اساسی برنامه نویسی به زبان اسمبلی
مو لف : Richard C. Detmer مترجمین : هاشمی اصل - مشحون نام درس : زبانهای ماشین و برنامه سازی سیستم
2
فهرست مطالب فصل اول : نمایش داده ها در کامپیوتر
فصل اول : نمایش داده ها در کامپیوتر فصل دوم : قسمت های یک سیستم کامپیوتری فصل سوم : استفاده از اسمبلر فصل چهارم : دستورالعملهای اساسی فصل پنجم : انشعاب و حلقه فصل ششم : روال ها فصل هفتم : عملیات رشته ها فصل هشتم : سایر حالت های آدرس دهی فصل نهم : دستکاری بیت ها فصل دهم : وقفه و ورودی / خروجی فصل یازدهم : پردازش اسمبلی فصل دوازدهم : ماکرو ها و اسمبلی شرطی فصل سیزدهم : مثال نمونه
3
نمایش داده ها در کامپیوتر
فصل اول نمایش داده ها در کامپیوتر
4
فهرست مطالب فصل اول نمایش داده ها در کامپیوتر
اعداد دودویی و شانزده شانزدهی کد های کارکتری نمایش مکمل 2 برای اعداد صحیح علامت دار
5
نمایش داده ها در کامپیوتر
در زبانهای سطح بالا نگران اینکه داده ها در کامپیوتر چگونه نمایش داده میشوند نیستیم ولی در زبان های اسمبلی بایستی بفکر چگونگی ذخیره داده باشیم و اغلب با کار تبدیل داده ها از یک نوع به نوع دیگر مواجه می باشیم.
6
اعداد دودویی و شانزده شانزدهی
حافظه های کامپیوتر فقط می تواند ارقام 0 یا یک را در خود ذخیره نماید که به آنها بیت گفته میشود. در سیستم دودوئی اعداد از بیت ها تشکیل شده اند.
7
اعداد دودویی و شانزده شانزدهی
اعداد شانزدهی از ارقام 0 تا 15 تشکیل شده اند. برای راحتی، ارقام 10 تا 15 را A تا F نشان داده می شود.
8
مثال : 1011 سیستم دودوئی شبیه سیستم دهدهی است با این تفاوت که ارقام از سمت راست به چپ به جای ارزش 1 ، 100 ، 1000 ، ارزش 1 ، 2 ، 4 ، 8 ، دارند. بنابرین در سیستم دودوئی معادل 11 می باشد.
9
مثال : 2f30 سیستم دودوئی شبیه سیستم دهدهی است با این تفاوت که ارقام از سمت راست به چپ به جای ارزش 1 ، 100 ، 1000 ، ارزش 1 ، 16 ، 164 ، دارند. بنابرین 2f30 در سیستم شانزدهی معادل می باشد.
10
تبدیل اعداد شانزدهی به دودوئی
هر رقم در سیستم شانزدهی بوسیله چهار رقم در سیستم دودوئی قابل نمایش می باشد. در اسلاید بعد مثالی آورده شده است.
11
مثال : معادل معادل E برای تبدیل اعداد شانزدهی به دودوئی کافی است که به جای هر رقم ،چهار بیت معادل آن قرار داد. در اسلاید بعد مثالی آورده شده است.
12
مثال : 2AD5 معادل 0010101011010101 در سیستم دودوئی می باشد.
برای تبدیل اعداد شانزدهی به دودوئی کافی است که به جای هر رقم ،چهار بیت معادل آن قرار داد. 2AD5 معادل در سیستم دودوئی می باشد.
13
تبدیل اعداد دودوئی به شانزدهی
برای تبدیل اعداد دودوئی به شانزدهی ،ارقام عدد داده شده را از سمت راست به ترتیب به صورت گروههای چهار بیتی درآورده آنگاه معادل هر گروه در سیستم شانزدهی را جایگزین می نماییم. در اسلاید بعد مثالی آورده شده است.
14
مثال : عدد 1010011101 در سیستم دودوئی در نظر بگیرید. 0010 1001 1101
عدد در سیستم دودوئی در نظر بگیرید. D
15
کدهای کرکتری در کامپیوتر به حروف، ارقام، علامت ها کرکتر گفته می شود. به هر کرکتر یک کد هشت بیتی منحصر به فرد وابسته می شود که آنرا کد ASCII می نا مند.
16
کرکترهای قابل چاپ کد اسکی کرکتر 57 تا 48 9 تا 0 90 تا 65 Z تا A
122 تا 97 z تا a
17
نکته : کرکترهای قابل چاپ دارای کدهای 32 تا 126 می باشند.
کرکترهای کنترلی دارای کدهای 0 تا 31 می باشند.
18
کرکترهای کنترلی کد اسکی کرکتر 27 ESC 10 CR 13 LF
19
نمایش مکمل 2 برای اعداد صحیح علامتدار
اعداد منفی در کامپیوتر بصورت مکمل 2 نمایش داده می شوند. وقتی یک عدد به شکل مکمل دو نشان داده می شود تعداد بیت های مورد استفاده باید از قبل مشخص گردد.
20
نمایش مکمل 2 برای اعداد صحیح علامتدار
اعداد دودویی دارای طول معین هستند: بایت کلمه : محدوده مجاز کلمه مضاعف کلمه چهارتایی
21
روش محاسبه مکمل 2 یک عدد : عدد را بصورت دودوئی درآورده.
آنرا به تعداد بیت های مشخص شده تبدیل نموده . سپس صفر ها را 1 و 1 ها را به صفر تبدیل نموده . نتیجه را با یک جمع می نماییم. در اسلاید بعد مثالی آورده شده است.
22
مقدار 11100111 در سیستم دودوئی نمایش عدد -26 می باشد.
مثال : -26 معادل 26 هشت بیتی نموده صفرها را به یک و یک ها را به صفر تبدیل نموده نتیجه را با یک جمع نموده مقدار در سیستم دودوئی نمایش عدد -26 می باشد.
23
جمع و تفریق اعداد مکمل دو
پاسخ صحیح 2567 +467 3034 0A07 +01D3 0BDA
24
جمع و تفریق اعداد مکمل دو
اگر از 1 اضافی سمت چپ صرفنظر شود: پاسخ صحیح 518 +(-80) 438 0206 +FFB0 101B6
25
جمع و تفریق اعداد مکمل دو
پاسخ غلط: سرریز 18459 +25690 44185 483F +645A AC99
26
تشخیص سرریز در جمع سرریز رقم نقلی از بیت علامت رقم نقلی به بیت علامت
نه بله
27
تفریق در شکل مکمل دو در کامپیوتر A-B بوسیله جمع A با مکمل دو B انجام میشود. اگر در جمع معادل نقلی وجود نداشته باشد، در تفریق رقم عاریه وجود دارد. اگر در جمع معادل سرریز وجود داشته باشد، در تفریق هم سرریز رخ داده است.
28
سیستمهای دیگر برای نمایش اعداد
مکمل یک : هر بیت مکمل میشود دهدهی دودویی شده (BCD) : هر رقم بصورت دودویی در چهار بیت نمایش داده میشود (92)DEC = ( )BCD ممیز شناور
29
ممیز شناور بیت سمت چپ در اعدادمثبت صفر و در اعداد منفی یک است.
عدد را بصورت بدون علامت در سیستم دودویی بنویسید. عدد را بشکل نماد علمی بنویسید. به توان عدد ثابت 127 را اضافه کنید. مانتیس را (بدون یک قبل از اعشار) در 23 بیت و با اضافه کردن صفرهایی به سمت راست آن بنویسید.
30
مثال ممیز شناور (78.375)10 = ( )2 نمادعلمی: ( )2 = * 2^6 ممیز شناور(باینری): ممیز شناور( هگز) : 42 9C C0 00
31
فهرست مطالب فصل دوم حافظه اصلی واحد پردازش مرکزی اسامی و اهداف ثبات ها
32
قسمت های یک سیستم کامپیوتری
فصل دوم قسمت های یک سیستم کامپیوتری
33
حافظه اصلی حافظه اصلی یک PC را می توان بصورت مجموعه ای از سگمنت ها در نظر گرفت. هر سگمنت بطول 64 کیلو بایت می باشد.
34
Memory نکات : آدرس شروع هر سگمنت مضرب 16 می باشد.
آدرس شروع هر سگمنت در مبنای 16 به رقم صفر ختم می شود . آدرس هر سگمنت برابر اولین چهار رقم شانزدهی آدرس آن می باشد.
35
نکته : آدرس هر بایت از حافظه اصلی را می توان با سگمنت حاوی بایت مزبور و به دنبال آن افستی که از ابتدای سگمنت یاد شده در نظر گرفته می شود، آدرس دهی کرد. آدرس شروع سگمنت افست بایت مورد نظر
36
مثال : نماد 18A3 : 5B27 به بایتی که 5B27 بایت از اول سگمنت که از آدرس 18A30 شروع می شود، قرار دارد، اشاره می کند. 18A30 + 5B27 = 1E557
37
واحد پردازش مرکزی (CPU )
تراشه 8088 دارای 14 ثبات می باشد که هر کدام یک محل ذخیره سازی داخلی بوده و می تواند یک کلمه 16 بیتی را نگه دارد. دستورالعمل ها معمولا داده ها را بین این ثبات ها یا حافظه اصلی انتقال داده و یا عملیاتی را روی داده های ذخیره شده در ثبات ها یا حافظه انجام می دهند. تمام این ثبات ها دارای نام بوده و بسیاری از آنها دارای اهداف ویژه ای هستند.
38
اسامی و اهداف ثبات ها AX اکومولاتور، کاربرد همگانی، بایت بالایی برابر AH و بایت پایینی برابر AL BX کاربرد همگانی، بایت بالایی برابر BH و بایت پایینی برابر BL CX کاربرد همگانی، بایت بالایی برابر CH و بایت پایینی برابر CL
39
اسامی و اهداف ثبات ها DX کاربرد همگانی، بایت بالایی برابر DH و بایت پایینی برابر DL CS شماره سگمنت حافظه ای می باشد که دستورالعمل های اجرائی جاری در آنجا قرار دارد. DS سگمنت داده ها را می دهد. ES سگمنت فوق العاده را می دهد.
40
اسامی و اهداف ثبات ها SS سگمنت پشته را می دهد.
SP اشاره گر پشته، افست بالای پشته در سگمنت پشته. BP اشاره گر مبنا، افست نقطه مراجعه (Point reference ) در سگمنت پشته.
41
اسامی و اهداف ثبات ها SI اندیس منبع، افست رشته کاراکتری منبع در انتقال رشته های کاراکتری. DI اندیس مقصد: افست رشته کاراکتری مقصد. IP اشاره گر دستور العمل ها، آفست دستور العمل بعدی در سگمنت کد برای دستیابی ثبات نشانه ها مجموعه ای از نشانه ها یا بیت های وضعیت.
42
ثبات نشانه بعضی از 16 بیت این ثبات برای نشان دادن نتیجه اجرای دستور العملها بوسیله دستور العمل های مختلف تغییر پیدا می کنند. هر کدام از این بیت ها را یک بیت وضعیت یا نشانه می گویند. اسامی برخی از این بیت ها عبارتند از : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CF PF AF ZF SF TF IF DF OF در اسلاید های بعد به توضیح هر یک از نشانه ها می پردازیم.
43
نشانه ها نشانه سرریزی OF flow Flag نشانه صفر Zero Flag ZF
نشانه نقلی Flag Carry CF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CF PF AF ZF SF TF IF DF OF
44
نشانه ها نشانه کمکی Flag Auxiliary AF نشانه توازن Flag Parity PF
نشانه علامت Flag Sign SF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CF PF AF ZF SF TF IF DF OF
45
نشانه ها نشانه جهت Flag Direct DF نشانه دام Flag Trap TF
نشانه وقفه Flag Interrupt IF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CF PF AF ZF SF TF IF DF OF
46
سختافزار PC: دستگاههاي ورودي/خروجي
يک دستگاه ورودي/خروجي معمولاً از سه تا هشت درگاه استفاده ميکند. اين آدرسها از آدرسهاي حافظه معمولي متمايز ميباشند.
47
نرمافزار PC: نرم افزار به برنامهها يا روالهايي که بوسيله سخت افزار اجرا ميشوند، اطلاق ميشود. دليل لزوم سفارش سيستمعامل اينست که: سيستمعامل از يک عده روالهاي نرمافزاري استفاده ميکند که به طور دائمي روي تراشههاي ROM ذخيره ميشوند و اين روالها از يک سيستم به سيستم ديگر تغيير ميکنند.
48
نرمافزار PC: ويرايشگرهاي متن
يک ويرايشگر متن، برنامهاي است که ميتوان به وسيله آن فايلهاي متني را روي ديسک ذخيره کرده يا آنها را تغيير داد. يک فايل متني مجموعهاي از کدهاي اسکي است. ويرايشگر EDLIN با توجه به اينکه يک فايل متني را به صورت مجموعهاي از خطوط در نظر ميگيرد، يک ويرايشگر خطي ناميده ميشود.
49
واژهپردازها، ويرايشگرهاي متني ميباشند که سرويسهاي اضافي براي قالببندي و چاپ مستندات ارائه ميدهند.
50
ميتوانيم براي آماده ساختن يک فايل کد منبع زبان اسمبلي از يک واژهپرداز استفاده کنيم، ولي يک واژهپرداز ميتواند اطلاعات قالببندي را به همراه کدهاي اسکي متن مورد نظر در داخل يک فايل ذخيره کند. چنين اطلاعات اضافي ممکن است فايل مزبور را به عنوان يک فايل کد منبع زبان اسمبلي غيرقابل استفاده گرداند.
51
نرمافزار PC: مترجم يک زبان و پيونددهنده برنامه
مترجم يک زبان برنامهاي است که کد يک منبع را به فرمي تبديل ميکند که ميتواند توسط کامپيوتر اجرا شود. مترجمها را ميتوان به سه گروه تقسيم نمود: مفسرها کامپايلرها اسمبلرها
52
مفسرها: يک برنامه منبع را به طور مستقيم ترجمه ميکنند. يک مفسر براي اجراي يک برنامه، يک خط از برنامه منبع را گرفته و دستورالعملهاي واقع در خط مزبور را اجرا ميکند. برنامههايي که تفسير ميشوند معمولاً به طور نسبي کند اجرا ميشوند. به کمک يک مفسر تغيير و اجراي يک برنامه به سرعت صورت ميگيرد.
53
کامپايلر: يک کامپايلر يک کد منبع را گرفته و کد هدف آن را که معمولاً متشکل از دستورالعملهايي ميباشد که به وسيله CPU مورد نظر اجرا ميشوند، تشکيل ميدهد. کد هدف توليد شده به وسيله يک کامپايلر بايستي غالباً پيوند (link) داده شده و يا با کدهاي هدف ديگر ترکيب شود تا بتوان آن را به داخل حافظه اصلي بار کرده و اجرا نمود. برنامههاي کامپايل شده خيلي سريعتر از برنامههاي تفسير شده اجرا ميشوند
54
اسمبلر: يک اسمبلر خيلي شبيه کامپايلر ميباشد اما زبان اسمبلي را به زبان ماشين ترجمه ميکند. غالباً براي اجراي فايلهاي نتيجه، بايستي آنها را پيوند داد.
55
فصل سوم برنامه نویسی اسمبلر
56
فهرست مطالب فصل سوم برنامه ها و شکل کلی دستورات اسمبلی نامگذاری فیلدها
کد منبع متغیرها در اسمبلی عملوند دستورالعملها حالتهای آدرس دهی
57
دستورالعملهای زبان اسمبلی
هر دستور زبان اسمبلی در روی یک خط فایل کد منبع وارد میشود.یک خط می تواند حد اکثر 128 کرکتر داشته باشد. وجود خطوط خالي مجاز است و استفاده از آنها براي جدا کردن بخش هاي مختلف کد برنامه مفيد است.
58
دستورالعملهای زبان اسمبلی
استفاده از توضیحات مناسب در برنامه مهم است. هر توضیحی با کرکتر ; شروع میشود و تا انتهای خط می تواند ادامه داشته باشد.
59
زبان اسمبلی دارای سه نوع دستورالعمل می باشد :
دستورالعمل مانند ADD AX , 244 دستور اسمبلی مانند PAGE ماکرو نوعی دستورالعمل است که در آن تعدادی دستورالعملها، دستورات اسمبلی یا حتی ماکروهای دیگر قرار گرفته اند.
60
زبان اسمبلی دارای سه نوع دستورالعمل می باشد :
دستورالعمل: به وسيله اسمبلر به کد هدف ترجمه ميگردد و اين کدها هستند که در زمان اجرا، اجرا ميگردند. دستور اسمبلر: به اسمبلر ميگويد که عملي را انجام دهد. و اغلب هيچ اثري بر روي کد هدف ندارد. ماکرو: نوعي دستورالعمل است که در آن تعدادي دستورالعملها، دستورات اسمبلر يا حتي ماکروهاي ديگر قرار گرفتهاند.
61
شکل کلی دستورات اسمبلی يک دستورالعمل ميتواند شامل عناصر زير باشد:
توضيحات عملوند(ها) نام دستورالعمل اسم یل برچسب [;comment] [operand(s)] mnemonic [name] يک کاربرد فيلم اسم آن است که ميتوان آدرس دستورالعملي را به صورت نمادي بعد از اسمبل و لينک شدن برنامه با يک برچسب نشان داد. دستورالعملهاي ديگر به راحتي ميتوانند به دستورالعمل مزبور رجوع کنند. 61
62
شکل کلی دستورات اسمبلی مثال: L1 :MOV AX,BX ; AX:=BX L2 :INC AX L3: NOP
اگر دستور اسمبلر باشد نیازی به : نیست 62
63
شکل کلی دستورات اسمبلی دستورالعملهاي داراي برچسب ميتوانند مقصد يک دستورالعمل پرش در زبان اسمبلي باشند. ساختار حلقه در زبان اسمبلي وجود ندارد، اما ميتوان حلقهها را با استفاده از jmp و يا دستورالعملهاي ديگر پيادهسازي کرد. برچسب نميتواند به وسيله عدد شروع شود. و اگر نقطه استفاده شود، حتماً بايد اولين کاراکتر باشد. بغيراز اعداد و نقطه، کاراکترهاي ديگر ميتوانند در هر موقعيتي استفاده شوند. فقط 31 کاراکتر اول اسم مورد استفاده قرار خواهد گرفت. 63
64
قانونگذاری نامها در اسمبلی
نامها در اسمبلی حداکثر 31 کاراکتر می باشند در استفاده از نامها در اسمبلی نکات زیر را می بایست در نظر داشت: 1- اسم نمی تواند با یک رقم شروع شود مانند 2LABEL 2- اسم نباید یکی از کلمات ذخیره شده اسمبلی باشد مانند MOV 3- در صورتیکه از نقطه در نام استفاده می شود می بایست در ابتدای نام استفاده شود مانند .LABEL
65
شکل کلی دستورات اسمبلی مقادير عددي در دستورات زبان اسمبلي، دهدهي فرض ميشوند و فقط زماني اين فرض کنار گذاشته ميشود که در برنامه منبع حالت ديگري خواسته شده باشد. يک مقدار شانزده شانزدهي بايد با يک عدد بغير از اعداد شانزدهشانزدهي «a» تا «f»، شروع شود تا اسمبلر بتواند آنها را از يک اسم تشخيص دهد. 65
66
کد منبع کل برنامه از چهار قسمت تشکیل شده است. هر قسمت با دستور SEGMENT شروع و با ENDS ختم می گردد. Segment _ name SEGMENT . Segment _ name ENDS دستور ENDS هيچ وقت داراي عملوند نيست؛ ولي دستور SEGMENT در بعضي کاربردها با عملوند به کار ميرود.
67
کد منبع آخرين دستور برنامه، دستور اسمبلر زير است: END start
68
کد منبع عملوند start مشخص کننده اولين دستور برنامه است که بايد اجرا شود. زماني که برنامه بار ميشود، سيستمعامل ثبات سگمنت کد را با سگمنتي که حاوي اين دستورالعمل است مقداردهي کرده و ثبات اشارهگر دستورالعملها، IP را با آفست اين دستورالعمل از ابتداي سگمنت مزبور شروع مينمايد.
69
کد منبع سگمنت کد با دستور اسمبلر زير شروع ميشود:
ASSUME CS:Code,DS:data اين دستور به اسمبلر ميگويد در صورتيکه يک دستورالعمل از يک برچسب که در داخل سگمنت کد قرار دارد استفاده بکند آدرس واقعي عملوند مزبور بايد به وسيله حاصلجمع ثبات سگمنت CS و آفست برچسب از ابتداي سگمنت کد محاسبه شود.
70
کد منبع سيستمعامل وظيفه مقداردهي اوليه ثبات سگمنت کد را به واسطه عملوند موجود در دستور END به عهده دارد ولي سيستمعامل همين کار را براي ثبات سگمنت داده DS انجام نميدهد. اينکار را بايد برنامهنويس انجام دهد. شماره واقعي سگمنت داده تا زماني که برنامه بار نشده باشد قابل تعيين نيست، در آن زمان است که اين آدرس به وسيله DOS براي برنامه تعيين ميشود.
71
SEGMENT ها عبارتند از : STACK SEGMENT DATA SEGMENT EXTRA SEGMENT
CODE SEGMENT
72
شکل کلی برنامه START STACK _ SEG SEGMENT PARA STACK ‘STACK’
اندازه پشته. STACK _ SEG ENDS DATA _ SEG SEGMENT PARA ‘DATA’ متغیر ها DATA _ SEG ENDS EXTRA _ SEG SEGMENT PARA ‘EXTRA’ متغیرهای رشته ها EXTRA _ SEG ENDS CODE _ SEG SEGMENT PARA ‘CODE’ دستورالعمل های برنامه CODE _ SEG ENDS END START
73
متغیرها دراسمبلی: تعریف متغیر در اسمبلی شامل نوع داده نام داده و اندازه داده می باشد دستورات تعریف متغیر در اسمبلی عبارتند از: DB برای تعریف یک بایت DW برای تعریف دو بایت DD برای تعریف چهار بایت DQ برای تعریف هشت بایت DT برای تعریف ده بایت مثال: X DB 35h تعریف متغیری با نام X با مقدار اولیه 35 هگزا دسیمال به طول یک بایت Y DW Fh تعریف متغیری با نام Y به طول دو بایت با مقدار اولیه 569Fh
74
عملوندهاي دستورات DB و DW
75
مثال : X DB , 12 , 24 , 5 , 16 X یک آرایه پنج عنصری از نوع بایت می باشد.
76
مثال : Number1 DW ? Number2 DW ?
هرکدام يک کلمه را در سگمنت داده ذخيره ميکنند. علامت سؤال به اسمبلر ميگويد که هيچ مقدار اوليهاي به اين دو کلمه نسبت داده نشود.
77
مثال : TABLE DB DUP (‘*’) آرایه TABLE از نوع بایت و 100 عنصری ، با مقدار اولیه * عملگر DUP ميتواند براي توليد چندين بايت يا کلمه با مقادير اوليه معين و يا بدون مقدار اوليه، مورد استفاده قرار بگيرد. کاربرد اين عملگرد به DB، DW و دستورات اسمبلر ديگري که فضا را ذخيره ميکنند محدود ميشود.
78
عملوندها و دستورالعملها
عملوندها و دستورالعملها عملوندها دارای انواع مختلف می باشند.بعضی ثابت بوده ، بعضی مشخص کننده ثباتهای CPU و برخی به حافظه رجوع می نمایند. بسیاری از دستورالعملها دارای دو عملوند می باشند.بطور کلی عملوند اول ، مقصد عملایت را تعیین می کنند و عملوند دوم منبع عملیات. مانند: MOV AX,BX در دستور اسمبلی بالا MOV دستورلعمل، AX عملوند اول و BX عملوند دوم می باشد.
79
مثال : MOV AL , ‘*’ که کرکتر * را جایگزین محتوی قبلی ثبات AL می شود.مقصد ثابت نمی تواند باشد ولی منبع می تواند ثابت باشد. دستور تک عملوندی INC BX دستور دو عملوندی MOV AX,8000h دستور بدون عملوند STC
80
حالت های آدرس دهی بلاواسطه ثبات مستقیم دارای مبنا دارای اندیس
دارای مبنا و اندیس
81
حالتهای مختلف آدرس دهی بلاواسطه ثبات مستقیم حافظه غیر مستقیم
ثبات غیر مستقیم دارای مبنا دارای اندیس دارای مبنا و اندیس 81
82
حالتهای مختلف آدرس دهی 1- آدرس دهی بلا واسطه
این حالت آدرس دهی می تواند طول 8 بیتی یا شانزده بیتی داشته باشد در این نوع آدرس دهی عملوند دوم یک عدد ثابت می باشد مثال: MOV AX,8765h MOV BL,5Fh 82
83
حالتهای مختلف آدرس دهی 2- آدرس دهی ثبات
این حالت آدرس دهی داده در ثباتی قرار می گیرد که بوسیله دستورالعمل مشخص می شود ثبات می تواند هشت بیتی یا شانزده بیتی باشد. مثال: MOV AX,BX MOV BL,CL 83
84
حالتهای مختلف آدرس دهی 3- آدرس دهی مستقیم
این حالت آدرس دهی آدرس داده که طول شانزده بیتی دارد جزئی از دستورالعمل می باشد بسته به طول ثباتی که در عملوند اول قرار دارد یک بایت یا یک کلمه به ثبات منتقل می شود مثال: MOV AX,TABLE MOV BL,TABLE 84
85
حالتهای مختلف آدرس دهی 4- آدرس دهی غیر مستقیم ثبات
این حالت آدرس دهی آدرس در یکی از ثباتهای BX,SI یا DI قرار می گیرد مثال: MOV AX,[BX] MOV BL,[DI] 85
86
حالتهای مختلف آدرس دهی 5- آدرس دهی مبنا یا اندیس
این حالت آدرس دهی آدرس در یکی از ثباتهای BX,SI یا DI,BP قرار می گیرد در این روش یک جابجایی 8بیتی یا 16 بیتی وجود دارد. مثال: 86
87
حالتهای مختلف آدرس دهی 5- آدرس دهی مبنا و اندیس
این حالت آدرس دهی آدرس در یکی از ثباتهای BX یا BP قرار می گیرد و از SI و DI بعنوان ثبات اندیس استفاده می شود در این روش آدرس از مجموع مبنا و اندیس بدون جابجایی بدست می آید. مثال: MOV AX,[BX][DI] 87
88
حالتهای مختلف آدرس دهی 6- آدرس دهی مبنا و اندیس با جابجایی
این حالت آدرس دهی آدرس در یکی از ثباتهای BX یا BP قرار می گیرد و از SI و DI بعنوان ثبات اندیس استفاده می شود در این روش آدرس از مجموع مبنا و اندیس با جابجایی بدست می آید. مثال: 88
89
حالتهای مختلف آدرس دهی در مواردمعدودي، برنامهنويس ممکن است يک ثبات سگمنت و يک آفست واقعي را به عنوان عملوند مستقيم بنويسد، MASM دستورالعمل زير را مجاز ميشمارد: Mov bx,dx:0014h اين دستورالعمل، ثبات BX را با کلمهاي که از بيستمين بايت سگمنت داده شروع ميشود، بار مينمايد. اين آدرس قابل جابجايي نيست. يک عملوند ثبات غيرمستقيم، از داده حافظه استفاده ميکند. 89
90
ماکروي itoa يک رشته شش کاراکتري کدهاي اسکي براي عدد مکمل دو (برای چاپ در خروجی)ايجاد ميکند.
در يک سگمنت، ترتيب دستورالعملها دقيقاً ترتيب کدهاي حاصله را تعيين ميکند.
91
ماکروي output، محتوي هيچ ثباتي و همينطور ثبات نشانهها را تغيير نميدهد.
ماکروي inputs فقط بر روي ناحيه مقصد و ثبات CX اثر ميگذارد، هيچ ثبات ديگري از جمله ثبات نشانهها تغيير نخواهند کرد. ماکروي inputc داراي هيچ عملوندي نميباشد. اين ماکرو يک کاراکتر را از صفحه کليد ميخواند و کد اسکي آن را در ثبات AL ذخيره مينمايد.
92
اگر ماکروي atoi قادر باشد که به طور موفقيتآميز يک رشته کاراکتر اسکي را تبديل کند آنگاه نشانه سرريز يعني OF صفر خواهد گرديد. در تمام موارد نشانههاي PF,ZF,SF بسته به مقداري که در AX برگردانده ميشود به ترتيب زير تغيير خواهند کرد: اگر عدد منفي باشد SF يک خواهد شد و در غيراينصورت صفر. اگر عدد صفر باشد ZF يک خواهد شد و در حالت غيرصفر، صفر خواهد شد. PF نشاندهنده توازن عدد برگردانده شده در AX است.
93
فصل چهارم دستورالعمل های اساسی
94
فهرست مطالب فصل چهارم انتقال داده ها بین مکانهای مختلف جمع و تفریق
دستورالعملهای ضرب دستورالعملهای تقسیم جمع و تفریق مکمل 2 با اعداد بزرگتر
95
انتقال داده ها بين مكانهاي مختلف حافظه
كارايي زمان و فضا (حافظه ) دو مفهوم اساسي اين فصل مي با شند . دستورالعملmov در زبان اسمبلي براي كپي كردن داده ها از محلي به محل ديگر مورد استفاده قرار مي گيرد. دستورالعمل xchg ، دستور مفيد ديگري است كه درزبان اسمبلي براي تعويض داده هاي منبع ومقصد كاربرد دارد. نكته : مي توان اندازه ي داده ي مورد نظر را از يك كلمه به يك بايت و يا بالعكس تغيير داد.
96
مفهوم كارايي زمان مدت زمان لازم براي اجراي يك دستورالعمل بر حسب سيكل هاي ساعت . هر چه سيكل هاي زماني براي اجراي يك دستور العمل كمتر باشد ان دستور العمل كارايي بيشتري خواهد داشت . به طور كلي دستور العملهايي كه به حافظه دستيابي مي كنند خيلي كندتر از دستورهايي هستند كه از ثبات ها استفاده مي كنند بنا براين بايد در صورت امكان داده هايي كه زياد مورد استفاده قرار ميگيرند را در ثبات ها قرارداد.
97
مفهوم كارايي حافظه ايجاد برنامه ي هدفي كه طول ان حداقل باشد يعني حافظه ي كمتري را اشغال كند (كد فشرده) مناسبتر وحتي در بعضي كاربرد هاي زبان اسمبلي لازم است . كارايي زمان بر حافظه ارجحيت دارد زيرا حافظه را مي توان خريد (جبران كرد ) ا ما زمان را نه ! بنابراين برنامه اي كه سريعتر اجرا شود بر ديگري برتر است حتي اگر از حافظه ي بيشتري استفاده كند.
98
دستورالعمل mov به صورت mov destination , source نوشته مي شود و يك بايت يا يك كلمه را از محل source به محل destination كپي مي كند . دستور العمل mov شبيه يك دستور جايگزيني ساده در زبانهاي سطح بالا مي باشد ، البته با وجود محدوديت هايي در زبان اسمبلي دستور العمل mov محتواي ثبات نشانه ها و ثبات IP ( اشاره گر دستورالعمل ها ) را تغيير نمي دهد .
99
مثال : MOV CX , Count محتوی حافظه COUNT در CX قرار می گیرد.
100
محدوديت هاي زبان اسمبلي كه دستورmov را از يك دستور جايگزيني در يك زبان سطح بالا متمايز مي كند .
1- عبارتهايي نظير ( Count = 3 number + 5) را نمي توان با يك دستور mov بيان كرد . ( لازم است قبلا چند دستورالعمل براي محاسبه ي عبارت سمت راست استفاده شود . ) 2- تمام تركيبات انواع عملوندهاي منبع و مقصد مجاز نيستند .
101
تركيباتي ازعملوندهاي دستوالعملmov كه ممكن نمي باشند :
1- در صورتي كه هر دو عملوند منبع و مقصد در حافظه قرار داشته باشند . 2- عملوند منبع بلاواسطه به ثبات سگمنت مقصد 3- هرانتقالي به ثبات نشانه ها يا از ان 4- هر انتقالي به ثبات IP 5- انتقال از يك ثبات سگمنت به ثبات سگمنت ديگر 6- هر انتقالي كه عملوندهاي ان از يك نوع بايت يا كلمه نباشند
102
دستور mov وقتي كه عملوندهاي منبع و مقصد در حافظه هستند
با توجه به اينكه دستورالعمل mov نمي تواند داده اي را از يك منبع حافظه به يك مقصد حافظه كپي كند ، معمولا براي انجام اين كار ازدو دستورالعمل mov كه از يك ثبات مياني استفاده مي كنند ، بهره مي گيريم بهتر است ثبات AX را به عنوان ثبات مياني به كار ببريم زيرا از يك سيكل زماني و بايت حافظه ، كمتري نسبت به ثبات هاي ديگر استفاده مي كند . ( به صفحه 104 كتاب مراجعه شود )
103
دستور العمل xcgh به صورت operator2 , operator1 xcgh نوشته مي شود . و عملي را انجام مي دهد كه در زبانهاي سطح بالا با سه دستور صورت مي گيرد اين دستور عملوند اول و عملوند دوم را با يكديگر تعويض نموده به صورتي كه به سيكل زماني و حافظه كمتري نياز داشته باشد . فرم هاي مختلف دستورالعمل xcgh در صفحه 110 كتاب است . در صورت استفاده از حافظه اصلي ، عملوند حافظه بايد عملوند دوم دستور xcgh باشد . دستورالعمل xcgh ثبات نشانه ها را تغيير نمي دهد .
104
نكته براي تغيير اندازه داده مورد نظر از يك كلمه به يك بايت مي توان كلمه مورد نظر را به يك ثبات انتقال داده پس بايت بالايي يا پاييني را به مقصد مورد نظر انتقال دهيم . برعكس مي توانيم دو بايت را در يك ثبات كنارهم گذاشته پس كلمه حاصل را به مقصد مورد نظر كپي كنيم .
105
LEA destination, source
این دستورالعمل مخفف کلمات Load effect address می باشد. شکل کلی دستورالعمل بصورت زیر می باشد : LEA destination, source destination بایستی یک ثبات 16 بیتی بوده و source هر گونه رجوعی به حافظه می باشد. این دستورالعمل آدرس source را در destination قرار می دهد. 105
106
مثال : LEA BX , X آدرس متغییر X در ثبات BX قرار می گیرد.
این دستورالعمل معادل دستورالعمل زیر می باشد. MOV BX , OFFSET 106
107
ADD destination , Source
شکل کلی آن عبارتست از : ADD destination , Source محتوی Source با محتوی destination جمع شده نتیجه در destination قرار می گیرد. این دستورالعمل روی فلگ ها اثر دارد.
108
مثال : ADD AL , 5 5 واحد به محتوی AL اضافه می گردد.
109
مثال : ADD X , BX به محتوی X ، محتوی BX اضافه می گردد و محتوی BX تغییر نمی کند.
110
نکته : در اسمبلی هر دو عملوند یک دستورالعمل نمی توانند از نوع متغییر باشند.
111
SUB destination , Source
شکل کلی آن عبارتست از : SUB destination , Source محتوی Source از destination کم گردیده نتیجه در destination قرار داده می شود و محتوی Source تغییر نمی کند. . این دستورالعمل روی فلگ ها اثر دارد.
112
مثال : SUB Y , 20 تغییر Y به اندازه 20 واحد کاهش می یابد.
113
مثال : SUB AX , X محتوی X از AX کم شده و نتیجه در AX قرار می گیرد.
114
نكته دردستورالعملهاي add و sub محتواي عملوند دوم ( source) تغيير نميكند. براي هر دستور add يك دستورsub متناظر با همان نوع عملوند ها، تعداد سيكل هاي زماني و تعداد بايت هاي كد هدف وجود دارد . اعمال جمع و تفريق زماني سريع ترين مي باشند كه هر دو عملوند در ثبات ها قرار داشته باشند و زماني كندترين مي باشند كه عملوند مقصد يك كلمه اي در حافظه باشد . اضافه كردن يك عملوند واقع در حافظه ي اصلي به محتواي يك ثبات سريعتر از اضافه كردن مقدار يك ثبات به محتواي يك عملوند واقع درحافظه ي اصلي مي باشند . زماني كه عملوند مقصد برابر يك كلمه است ، يك عملوند منبع بلاواسطه مي تواند برابر يك بايت باشد . زيرا در زمان اجراي عمل جمع يا تفريق به يك كلمه تبديل مي شود .
115
دستورالعمل های DEC , INC شکل کلی آن عبارتست از : DEC destination
INC destination دستورالعمل INC , DEC به ترتیب عملوند مقصد را به اندازه یک واحد کاهش و یا افزایش می دهد.
116
مثال : INC X محتوی X یک واحد افزایش می یابد . DEC AX
117
نكاتي در مورد دستورات inc وdec
مقدار عملوند مقصد را به صورت يك عدد بدون علامت در نظرميگيرند. نشانه هاي OF وSF وZF را تغييرميدهند ولي نشانه CF راتغييرنمي دهند. براي افزايش و كاهش شمارنده ها مفيدند و ازدستورات جمع وتفريق متناظر كارامد ترند . بهترين مكان براي نگه داشتن شمارنده ها در صورت امكان ثبات ها مي باشند. عملوند این دستورات نمیتواند ثابت باشد.
118
علت كارامد تر بودن inc وdec نسبت به add وsub درشمارنده ها
دودستورadd bx , 1 و inc bx از نظركاري معادل مي باشند اما دستورadd به 4 سيكل زماني و 3بايت حافظه نياز دارد در صورتي كه دستور inc به 2 سيكل زماني و يك بايت حافظه نياز دارد. به همين ترتيب دو دستور sub counter ,1 و dec counter از نظر كاري معادل يكديگرند ولي دستور sub به23 سيكل زماني و 4 بايت حافظه نياز دارد درصورتي كه دستورdec به 21 سيكل زمان و4 بايت حافظه نيازمند است .
119
دستورالعمل NEG شکل کلی آن عبارتست از : NEG destination
این دستورالعمل عملوند خود را منفی می نماید یعنی مکمل 2 آن را محاسبه می نماید.
120
مثال : MOV AX ,100 NEG AX محتوی AX به 100- تغییر می یابد.
121
دستورالعملهای ضرب اسمبلی دارای دو دستورالعمل ضرب می باشد :
IMUL عملوندها را بصورت علامتدار در نظر می گیرد. MUL عملوندها را بصورت بدون علامت در نظر می گیرد.
122
دستورالعملهای ضرب شکل کلی آن عبارتست از : MUL OPR IMUL OPR
123
توضیحات : عملوند ثابت نمی تواند باشد.
چنانچه OPR از نوع بایت باشد محتوی OPR در محتوی AL ضرب شده نتیجه در AX قرار می گیرد. چنانچه OPR از نوع WORD باشد محتوی OPR در محتوی AX ضرب شده نتیجه در DX : AX قرار می گیرد و محتوی ثبات های DX , AX از بین می رود. روی فلگ ها اثر دارد.
124
مثال : محتوی ثبات AX برابر با - 80 می شود. MOV AL , 10 MOV X , - 8
IMUL X محتوی ثبات AX برابر با می شود.
125
دستورالعمل های تقسیم اسمبلی دارای دو دستورالعمل تقسیم می باشد :
IDIV عملوند را بصورت علامتدار در نظر می گیرد. DIV عملوند را بصورت بدون عملوند در نظر می گیرد.
126
دستورالعمل های تقسیم شکل کلی آن عبارتست از : DIV OPR IDIV OPR
127
توضیحات : عملوند ثابت نمی تواند باشد.
چنانچه OPR از نوع بایت باشد محتویAX بر محتوی OPR تقسیم شده نتیجه در AL قرار می گیرد و باقیمانده تقسیم در AH قرار می گیرد. چنانچه OPR از نوع WORD باشد محتوی DX:AX بر محتوی OPR تقسیم شده نتیجه تقسیم در AX قرار می گیرد و باقیمانده در DX قرار می گیرد.
128
مثال : X DB MOV AX , 134 DIV X پس از اجرای دستورالعمل های فوق محتوی AL برابر با 10 و محتوی AH برابر با 4 می باشد.
129
دستورالعمل های SBB , ADC در اسمبلی برای جمع و تفریق دو مقدار از نوع double word دستورالعملی وجود ندارد. برای این منظور ار دستورالعملهای SBB , ADC استفاده می گردد.
130
دستورالعمل های SBB , ADC شکل کلی آن عبارتست از :
ADC destination , Source destination destination + Source + CF SBB destination , Sounce destination destination - Source – CF
131
مثال : ADC X , BX SBB AX , Y
132
تفریق و جمع دو double word
می خواهیم محتوی دو متغییر X و Y از نوع double word را جمع نموده نتیجه را در Z قرار دهیم : X DD ? Y DD ? Z DD ? MOV AX , X ADD AX , Y MOV Z , AX MOV AX , X + 2 ADC AX , Y + 2 MOV Z + 2 , AX چنانچه بخواهیم محتوی دو متغییر را از هم کم نماییم بایستی در دستورالعملهای فوق ADD را به ADC , SUB را به SBB تبدیل نماییم.
133
كنترل كردن نشانه CF دستورالعمل clc : نشانه ي cf را برابر صفر قرار مي دهد CF : = دستورالعمل stc : نشانه ي cf را برابر 1 قرارمي دهد CF : = 1 دستورالعمل cmc : نشانه ي cf را مكمل مي كند.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.