1 / 72

زبان ماشین و اسمبلی

زبان ماشین و اسمبلی. جزوه درس زبان ماشین واسمبلی دانشگاه روزبه زنجان استاد فروتن راد مينا مغربي. بسم تعالی. دلايل مطالعه ي درس اسمبلي :. ج 1. آشنايي با معماري سخت افزاري برنامه نويسي روي سخت افزار كنترل سخت افزار هاي ويژه ( روبات ) امكان تركيب با نرم افزار يا زبان هاي ديگر. C , HTML…

heba
Download Presentation

زبان ماشین و اسمبلی

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. زبان ماشین و اسمبلی

  2. جزوه درس زبان ماشین واسمبلی دانشگاه روزبه زنجان استاد فروتن راد مينا مغربي بسم تعالی

  3. دلايل مطالعه ي درس اسمبلي : ج 1 • آشنايي با معماري سخت افزاري • برنامه نويسي روي سخت افزار • كنترل سخت افزار هاي ويژه ( روبات ) • امكان تركيب با نرم افزار يا زبان هاي ديگر C , HTML… ASM MOV . Ax . 10… end ASM…

  4. ساختمان زبان ماشين : • معماري كامپيوتر 80x86 : Intel 80 86 , 80 88 , 80x86 , 80 286 ,80 386 Main memory C p u Registerbank c . u A . L . U I / O SYSTEM BUS

  5. شمايي از كامپیوتر 80x86 : • واحد پردازش مركزي : CPUcentral processing unit اگر در سيستم كامپيوتري تنها يك پردازنده داشته باشيم آن را واحد پردازش مركزي ميناميم . • واحد كنترل : control unit CU وظيفه ي كنترل ونظارت بر ساير اجزاي سيستم كامپيوتري را بر عهده دارد. كنترل: چه واحدي در چه زماني چه عملياتي انجام ميدهد . نظارت: بررسي صحت انجام عمليات .

  6. واحد محاسبه و منطق : A . L . UArithmetic and Logic Unit از دو واحد محاسبه و منطق تشكيل شده است . 1.واحد محاسبه يا arithmetic unit توانايي انجام عمليات ساده رياضي نظير جمع و تفريق و مكمل سازي و... را دارد . 2.واحد منطق يا logic unit كه توانايي انجام عمليات منطق ساده نظير not ,mod, or , x or , and را داراست . • ثبات ها : Registers حافظه هاي بسيار سريع هستند از نوع flash memory كه به عنوان ميانگير محاسباتي در عمليات پردازنده مورد استفاده قرار ميگيرند . ram n 5v بازنویسی 3.5 0 – 3.5 = 0 3.5 - 5 = 1 t

  7. 5v Flash memory به دلیل عدم نیاز به بازنویسی داده ها بسیار سریع هستند . • حافظه اصلی یا main memory : BF 9D 64در مبنای هگز BF 9F 0040h data آدرس

  8. حافظه ی دستیابی تصادفی : Random access memory Ram حافظه ی دستیابی تصادفی با یک مکانیزم آدرس دهی امکان دسترسی مستقیم به داده ها را فراهم میسازد و ram چند مدل دارد که آن ها را برایتان معرفی . • SRAM = Static RAM • DRAM = Dynamic RAM Single DRAM (SDR) * SDR Double DRAM (DDR) * CLOCK PLUS DDR CLOCK PLUS *سرعت دو برابر است

  9. حافظه فقط خواندنی : Read Only Memory ROM حافظه فقط خواندنی محتویات این حافظه در کارخانه یک بار نوشته میشود از آن پس فقط میتوان از آن اطلاعات را خواند BIOS سیستم کامپیوتری در واقع یک ROM است و انواع ROMبه شرح زیر است. قابل باز نویسی است BIOS = * Programmable ROM = PROM Electronic PROM = EPROM *منظور ازmain memory همانRam است .

  10. دستگاه های ورودی / خروجی یا I/O Device : دستگاه های ورودی خروجی امکان انتقال داده ها به درون سیستم کامپیوتری و یانمایش اطلاعات را در خروجی فراهم مینماید . • گذرگاه سیستم : وظیفه ی برقراری ارتباط بین اجزای مختلف سیستم کامپیوتری را بر عهده دارد . *داده پردازش شده را اطلاعات گویند . داده Data : اطلاعات : Information FSB (سرعت پردازنده , سرعت ram , سرعت گذرگاه )Main 400 GHz 1068

  11. تبدیل از مبنای 10 به 2 : ج 2 برای تبدیل اعداد صحیح مثبت در مبنای 2 دو روش وجود دارد که هر دو را مورد بررسی قرار میدهیم . روش اول تبدیل از مبنای 10 به 2 برای اعداد صحیح مثبت این است که عدد را به طور متوالی تقسیم بر دو کنیم تا خارج قسمت 0 شود سپس باقیمانده ها را به صورت معکوس به عنوان عدد مورد نظر در مبنای 2 در نظر میگیریم , عکس این عمل را هم تبدیل اعداد صحیح مثبت از مبنای 2 به مبنای 10 میگوییم . 194 2 2 18 97 مثال : (194)10=(11000010)2 2 14 8 48 2 14 17 4 24 2 0 16 8 2 12 2 1 8 4 12 6 2 0 4 0 6 3 0 0 2 1 1

  12. روش دیگر تبدیل از مبنای 10 به 2 این است که توان های دو را حفظ باشیم اول میگوییم از عددی که در نظر داریم کدام توان نه بزرگ است و نه کوچک , این روش را روش فرمال یا رسمی میگویند هرکدام باشد یک و نباشد جایش صفر قرار میدهیم لطفا به مثال زیر توجه فرمایید به طور کامل توضیح داده ایم . مثال : (194)10=(11000010)2 194 27 128 = جدول توان های 2 66 26 = 64 2 21 = 2 20 = 0

  13. تبدیل از مبنای 2 به 10 : برای تبدیل از مبنای 2 به 10 یک روش داریم که در ادامه تو ضیح خواهیم داد . تبدیل اعداد صحیح مثبت از مبنای 2 به 10 بسیار شبیه به آنچه است که در دوران تحصیل ابتدایی برای اعداد سیستم دهدهی انجام می دادید می باشد فقط به جای ارزش های مکانی یکان , دهگان , صدگان , ... ارزشهای مکانی یکان , دوگان , چهارگان , ... را داریم با یک مثال به توضیح بیشتر این مسئله میپردازیم . مثال : (11000010)2 = (194)10 • 27 25 23 21 • 1 * 2^7 + 1 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0 = 194 (11000010) • 26 24 22 20

  14. نمایش اعداد صحیح علامت دار : نمایش اعداد صحیح علامتدار به دو روش امکان پذیر مباشد که در ادامه هردو یه آن ها را توضیح خواهیم داد . روش اول استفاده از بیت علامت است : الف) اگر بیت علامت0 باشد نشان دهنده ی عدد + است . ب ) اگر بیت علامت 1 باشد نشان دهنده ی عدد – است . Sign bit + = 67 - *مشکل این روش آن است که 2 عدد صفر+ و صفر – داریم که این موضوع از نظر ریاضی غیر ممکن است .

  15. مکمل یک (01000011) 2= (+67) 10 روش دوم روش مکمل 1 است : برای به دست آوردن مکمل مکمل یک عدد دودویی صفر ها را به یک و یک ها را به صفر تبدیل میکنیم . (10111100) 2 = (-67 ) 10 *مشکل این است که با بکار گیری سیستم نمایش مکمل یک علاوه بر این که 2 عدد صفر علامت دار داریم همچنین مدارات مورد نیاز برای انجام عملیات ریاضی نظیر جمع , تفریق , ... بسیار پیچیده تر میشود . روش سوم روش مکمل 2 است : این روش به 3 صورت محاسبه میگردد در این قسمت هر سه روش مکمل دو گیری را توضیح خواهیم داد . روش 1: سیستم نمایش مکمل 2 به صورتی میباشد که اگر به مکمل یک عدد مقدار یک را ضافه کنیم مکمل دو آن عدد به دست می آید که نشانگر عدد با علامت منفی است ابتدا عدد را بدست می آوریم سپس مکمل یک آن را با عدد یک جمع کرده و عدد به دست آمده عدد علامتدار است . (01000011) 2 =(+67) 10 (10111100) + 1 (10111101) 2 =(-67) 10 مکمل یک مکمل دو

  16. اولین یک مکمل 2 (011010000) ( 10011000) روش 2 : روش دوم برای بدست آوردن مکمل دو عدد آن است که عدد مبنای دو را از سمت راست تا اولین عدد 1 ارقام را عینا تکرار میشوند و خود عدد یک نیز نوشته میشود و بقیه ارقام 0 ها یک و یک ها 0 میشوند . روش 3 : مکمل دو روش دیگری برای بدست آوردن دارد این که عدد را از عددی که به تعداد ارقام در حال تبدیل صفر دارند و آخرین رقم سمت چپ آن عدد یک است تفریق نماییم . 1 1 1 1 1 1 1 0 10 10 10 10 10 10 10 10 1 0 0 0 0 0 0 0 0 - 0 1 0 0 0 0 1 1 (101111101) = (-67) • نکات مهم : • در یک سیستم نمایش مکمل 1 و یا 2 اندازه حافظه میبایست مشخص باشد معمولا مضربی از عدد 8 باشد یعنی (8 , 16 , 32 و... ) . • اگر آخرین بیت در سیستم نمایش مکمل 2 , 1 باشد حتی اگر تمام ارقام دیگر نیز یک باشند عدد منفی و اگر بیت آخر 0 باشد عدد مثبت است . • کوچکترین واحد حافظه 1بیت و کوچکترین واحد آدرس پذیر حافظه 1 بایت است .

  17. بدست آوردن معادل مبنای 2 یک عدد منفی : قسمت صحیح یا مثبت آن را (یعنی خود عدد بدون در نظر گرفتن علامت منفی آن ) را تبدیل به نمایش مبنای دو میکنیم سپس مکمل یک آن را بدست می آوریم و در ادامه عدد یک را به مقدار اضافه میکنیم عدد دودیی حاصل نشان دهنده ی عدد با علامت منفی است. بدست آوردن معادل ده دهی یک عدد نمایش داده شده در سیستم مکمل دو : اگر ,Dn… D2,D1,D0 نشان دهنده ی ارقام عددی در سیستم نمایش مکمل دو باشند با بکار گیری رابطه ی زیر میتوانیم مقدار دهدهی معادل عدد را بدست آوریم . - Dn * 2^n + dn-1 * 2^n-1 + … + d1 * 2^1 + d0 * 2^0 (10111101) = (-67) - 1 * 2^7 + 0 * 2^6 + 1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = -128 + 32 + 16 + 8 + 4 + 1 = - 67

  18. کوچکترین و بزرگترین عدد قابل نمایش در سیستم مکمل دو با حافظه ی 8 و 16 بیتی چیست ؟ : فرمول m ∑ 2^m+1 – 1 (- DN * 2^n + dn-1 * 2^n-1 + … + d1 * 2^1 + d0 * 2^0) 2^i = i=0 عامل کوچک کننده عوامل بزرگ کننده : میزان حافظه ی 8 بیتی کوچکترین عدد قابل نمایش 0 0 0 0 0 0 0 1 = 128- 1 1 1 1 1 1 1 0 = 127+ بزرگترین عدد قابل نمایش : میزان حافظه ی 16 بیتی 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 کوچکترین عدد قابل نمایش = 32768 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 32767 + بزرگترین عدد قابل نمایش =

  19. اعداد مبنای 8 و 16 (Octal , Hexadecimal): به دلیل این که تعداد ارقام مورد نیاز برای نمایش اعداد در مبنای 2 بسیار زیاد است برای نمایش اعداد از مبنا های بزرگتر نظیر مبنای 8 و 16 استفاده میکنیم . جدول تبدیل مبنا ها :

  20. با توجه به جدول صفحه قبل برای بدست آوردن مبنای 8 و 16 یک عدد دودویی به صورت زیر عمل میکنیم . تبدیل مبنای 2 به 8 : برای تبدیل به مبنای 8 عدد را از سمت راست مرور و سه رقم سه رقم جدا میکنیم در صورت نیاز انتهای سمت چپ صفر های بی معنی اضافه میشود سپس به ازای هر سه رقم در مبنای 2 یک رقم در مبنای 8 جایگزین میشود . 8(233530)=2(010011011101011000) تبدیل مبنای 8 به 2 : برای تبدیل به مبنای 8 به 2 کافیست به ازای هر رقم در مبنای 8 , 3 رقم در مبنای 2 قرار دهیم . 2(010011011101011000)=8(233530)

  21. تبدیل مبنای 2 به 16 : برای تبدیل به مبنای 2به 16 عدد مورد نظر را 4 رقم 4 رقم جدا میکنیم و در صورت نیاز صفر های بی معنی به آن اضافه میکنیم . H(13758)=(000100110111101011000)2 (1110101111110101)2=(EBF5)H • نکات مهم : • در زبان اسمبلی برای آن که بین یک عدد در مبنای 16 و نام یک متغییر تفاوت قایل شوند ابتدای مبنای 16 حتما باید با عدد شروع شود ونه با حروف بنا بر این در اول آن یک 0 بی معنی قرار میدهیم . • در نمایش اعداد در مبنای 8 اگر اولین عدد منتهی الیه از سمت چپ بین 0 و 3 باشد • عدد + و اگر بین 4 و 7 باشد عدد – است و در مبنای 16 اگر اولین عدد سمت چپ بین 0 تا 7 باشد عدد + و اگر بین 8 تا f باشد عدد – است . (0EBF5)h معلوم میکند مبنای 16 است 8(7013) 8(3777) 16(FB47) 16(EB43) عدد - عدد + عدد - عدد +

  22. کد های کاراکتری : برای نمایش کاراکتر ها در سیستم کامپیوتر از کد های کاراکتری استفاده میشود یعنی به ازای هر کاراکتر در کامپیوتر یک کد رقمی تعیین و در حافظه ذخیره سازی میشود معروف ترین سیستم کد .گذاری , کد گذاری اسکی میباشد و مورد استفاده قرار میگیرد :ASCII(American Standard Code for Information Interchange ) کد اسکی ASCI یک کد استاندارد ملی امریکا است که بطور قرار دادی برای به نمایش در آوردن حروف ( کاراکتر ها ) توسط پردازنده ها ایجاد شد بدین معنی که هر برنامه نویس اسمبلی موظف است برای پردازنده از این کد ها جهت بنمایش در آوردن حروف استفاده کند ) البته قراردادی است ونه اجباری ).

  23. سیستم کد گذاری اسکی به ازای هر کاراکتر یک بایت در نظر میگیرد (در برخی منابع و مراجع 7 بیت ) که برای تمامی حروف الفبا ی همه زبان ها کافی نیست بنابر این برای کد گذاری کاراکتر ها از سیستم کدگذاری Unicode استفاده میشود که برای هر کاراکتر 16 بیت (2بایت) حافظه در نظر میگیرد در برخی از کامپیوترهای بزرگ (SUPER COMPUTER) از سیستم کد گذاری EBCDIC استفاده میشود که مخفف (EXTENDED BINARY CODE DECIMAL INFORMATION CODE) است استفاده میشود . warning جدولی که در اسلاید بعدی مشاهده میکنید جدول کد های اسکی است که ما به کد های هگزا یعنی ستون های قرمز نیازمندیم .

  24. به جای حروف کد های اسکی در سیستم ذخیره میشوند به مثال زیر توجه کنید : c o m p u t e r s 43 6f 6e 71 75 74 65 72 73 Enter(0d) حافظه ram a r e 73 0b74 Enter(0d) 61 72 65 70 65 74 Enter(0d) f u n … 66 75 6e

  25. نمایش اعداد اعشاری مثبت : نمایش اعداد اعشاری مثبت از مبنای 10 به 2 : برای تبدیل به مبنای (01000011.01011111) 67/373 = تبدیل به مبنای دو .... 373 . 2 = 0.746 * 1.492 746 . 2 = * 0.984 492 . 2 = * 1.968 984 . 2 = * 2 1.936 968 . = * 1.862 936 . 2 = * 1.724 862 . * 2 = 2 = 1.448 724 . *

  26. نمایش اعداد اعشاری مثبت از مبنای 2 به 10 : 128 1 ... (67.373)= (01000011.01011111) ... ½ 56½ 0.373 ≈ 1/256* 1 + ...1/16 * 1+ 1/8 * 0 + ¼ * 1 + ½ * 0 برای مطالعه : تفاوت delete و backspace در این است که دیلت باید پشت کاراکتر باشد تا پاک کند و در بک اسگیس باید جلوی کاراکتر باشد .

  27. جمع و تفریق اعداد مکمل 2 : ج3 X 111 (0A07) H + (01D3) H (0BDA) H 0000101000000111 + 0000000111010011 0000101111011010 1 X √ (0206) H + (FFB0) H (101B6) H 111111 0000001000000110 + 1111111110110000 10000001110110110 2 √ (رقم نقلی)Carryout

  28. X 1 11111 (E9FF) H + (8CF0) H (176EF) H 1110100111111111 + 1000110011110000 10111011011101111 سر ریزی با رقم نقلی 3 √ √ 1111111111 11 (FFE7) H + (FFF6) H (1FFDD) H 1111111111100111 + 1111111111110110 11111111111011101 4 √

  29. 1 (493F) H + (645A) H (AC99) H 01001000001111111 + 011001100001011010 1010110010011001 سر ریزی بدون رقم نقلی 5 X سر ریزی یا : Over flow اگرحافظه ای برای نمایش عددی در نظر گرفته شده است و امکان نمایش آن عدد را نداشته باشد سر ریزی رخ میدهد قبلا روش محاسبه ی کوچکترین و بزرگ ترین عدد قابل نمایش با حافظه ی مشخص را آموخته اید اگر تلاش کنید عددی عددی خارج از این بازه را در حافظه ذخیره نمایید سرریزی اتفاق می افتد . 1. جمع دو عدد + , - شود . 2. جمع دو عدد - , + شود . 3. حافظه قابلیت نشان دادن آن را نداشته باشد . دقت نمایی در اثر وقوع سر ریزی نتیجه نا معتبر خواهد بود .

  30. جدول زیر شرایط وقوع سر ریزی را نمایش میدهد .

  31. ثبات یا register: چنانچه میدانید ثبات ها حافظه هایی سریع هستند از نوع flash memory که به عنوان میانگیر یا بافر (buffer) محاسباتی در عملیات پردازنده مورد استفاده قرار میگیرند . • بافر (buffer) : بافر برای این است که پردازنده سرعت بالا داشته باشد و و درگیر سرعت حافظه کم نشود . • ثبات های پردازنده ی 80x86 به شرح زیر است : 4 ثبات عمومی در پردازنده ی 80x86 وجود دارد با نام های EDX,ECX,EBX,EAX یا ثبات های داده نیز نام میگیرند .

  32. ثبات های داده به همراه شکل : 8 بیت کم ارزش 8 بیت پر ارزش EAX : Ah Al 16 بیت کم ارزش AX=16 بیت پر ارزش 32bit 8 بیت کم ارزش 8 بیت پر ارزش EBX : Bh Bl 16 بیت کم ارزش BX=16 بیت پر ارزش 32bit 8 بیت کم ارزش 8 بیت پر ارزش ECX : Ch Cl 16 بیت کم ارزش CX=16 بیت پر ارزش 32bit

  33. 8 بیت کم ارزش 8 بیت پر ارزش EDX : Dh Dl 16 بیت کم ارزش DX=16 بیت پر ارزش 32bit • نکات : • ثبات های داده ثبات های 32 بیتی هستند . • پردازنده ی 80x86 تا 80x286 16 بیتی بودند ولی از 80x386 به بعد 32 بیتی شدند . • چنانکه در آینده به هنگام مطالعه ی دستو رالعمل های اساسی پردازنده متوجه خواهد شد ثبات EAX به صورت ضمنی یک پایه ی دستورالعمل در دستورالعمل های زبان اسمبلی است به همین دلیل این ثبات را انباره یا Accumulator مینامند به مثال زیر توجه نمایید : Mulbl ; ax bl * al به این معناست که ثبات bl در ثبات al ضرب شود و جواب در ax ذخیره شود .

  34. ثبات های اشاره گر سگمنت : segment هر برنامه ای که در حافظه ی اصلی ram لود میشود (جهت اجرا ) دارای سگمنت پشته (data segment )سگمنت پشته (stack segment ) و سگمنت کاربرد های اضافی (extra segment ) میباشد . Main memory در معماری پردازنده ی 80x86 , 4 ثبات با نام های (ES , SS , DS , CS ) به ابتدای هر سگمنت اشاره میکند . Code segment CS Data segment DS از آخر به اول مورد دستیابی قرار میگیرد program Stack segment SS Extra segment ES

  35. پشته یا (stack) : ساختمان داده ای است با ساختار (LIFO first in first out)بدین معنا که هر آخرین item وارد شده اولویت آیتمی است که از آن خارج میشود به عنوان مثال آخرین بشقابی که روی میز میگذاریم اولینی است که بر میداریم . هر پشته دارای اشاره گری است که به داده ی بالای پشته ویا خانه ی خالی بعد از آن اشاره میکند این اشاره گر را (sp stack pointer) مینامند , همچنین جهت رشد پشته میتواند صعودی یا نزولی باشد با ترکیب این موارد 4 نوع پشته میتوان طراحی نمود که در ادامه به توضیح هر کدام میپردازیم .

  36. ساختار جهت رشد پشته صعودی , sp به داده ی بالای پشته اشاره میکند . push pop item 0011 SP 0011 2 d 1 d SP 1 0010 c SP 0010 c SP 2 0001 b 0001 b 0000 a 0000 a SS SS Push : Sp را افزایش بده . داده ای را که در خانه ی sp نمایش دهد بنویس . Pop : داده ای را که خانهSp نمایش میدهد بخوان . spرا کاهش بده.

  37. ساختار جهت رشد پشته صعودی , sp به خانه خالی بالای پشته اشاره میکند . push pop item SP 2 SP 0011 0011 1 d d SP 2 SP 1 0010 c 0010 c 0001 b 0001 b 0000 a SS 0000 a SS • Push : • داده ای را که در خانه ی sp اشاره میکند بنویس . • Sp را افزایش بده . Pop : spرا کاهش بده. داده ای را که خانهSp نمایش میدهد بخوان .

  38. ساختار جهت رشد پشته نزولی , sp به داده ی بالای پشته اشاره میکند . SS SS FFFF a FFFF a FFFE b FFFE b FFFD c FFFD c SP 2 SP FFFC d 1 d 2 FFFC SP 1 SP item push pop Push : Spرا کاهش بده. داده ای را که در خانه ی sp نمایش دهد بنویس . • Pop : • داده ای را که خانهSp نمایش میدهد بخوان . • spرا افزایش بده .

  39. ساختار جهت رشد پشته نزولی , sp به خانه خالی بالای پشته اشاره میکند . SS SS FFFF a FFFF a FFFE b FFFE b FFFD c FFFD c SP 1 FFFC d SP d 1 FFFC 2 SP 2 SP item push pop • Push : • داده ای را که در خانه ی sp نمایش دهد بنویس . • Spرا کاهش بده. • Pop : • spرا افزایش بده . • داده ای را که خانهSp نمایش میدهد بخوان .

  40. دستورالعمل ها در اسمبلی : ج4 اولین نوع دستورالعمل ها شامل کد هایی جهت انجام عملیات انتقال داده در حافظه عملیات محاسباتی منطقی و ... میباشد ساختارکلی این دستورالعمل اسمبلی به شکل زیر است . [ Label ] Instruction . Name [ operand ] [; comments] برچسب عملوند توضیحات نام دستورالعمل For example : LBL : MOV EAX ,EDX ; copies data in EDX to EAX Add CX ,BX CWD راهنمایی اسمبلی : دستورالعمل های ویژه ای هستند که اسمبلی را در فرایند ترجمه کد به زبان ماشین هدایت میکنند عمدتا با کاراکتر (0) شروع میشوند به عنوان مثال : .no LST به اسمبلی میفهمانند که در فرایند ترجمه فایل .LST را تولید نکن . به اسمبلی میفهمانند که در برنامه از دستورالعمل های 80x286 , 80x386 استفاده شده است به جای این راهنمای اسمبلی شما میتوانید 486. و 586. استفاده کرد . 386. .model flat مشخص میکند که میبایست بر اساس مدل حافظه کد های 32 بیتی تولید کند .

  41. ماکرو : یک ماکرو مجموعه ای از دستوروالعمل هاست که با یک نام دسته بندی شده اند از این نظر ماکرو شبیه به توابع و روالها در زبان های برنامه نویسی سطح بالا میباشد تفاوت ماکرو با یک تابع آن است که برای اجرای یک تابع پس از فراخوانی اجرای برنامه به آن تابع منتقل شده و اجرا در آن تابع ادامه میابد اما یک ماکرو به بدنه ی آن در مکان فراخوانی میابد (یعنی بدنه ی ماکرو در مکان فراخوانی آن کپی میشود) از این نظر یک ماکرو سریعتر از توابع اجرا میشود . F1(){ . . . F2 () ; . . . } F2(){ . . . . } m1(){ . . . invok m2 () . . } m2(){ . . . . } فراخوانی اجرا کپی برگشت m2 کپی شده و invok m2 پاک میشود .

  42. شبه دستورالعمل های رزرو حافظه : با استفاده از شبه دستورالعمل های T byte , Q word , D word , word , byte میتوان حافظه هایی با اندازه یک بایت , دو بایت , چهار بایت , هشت و ده بایت را رزرو نمود همچنین شبه دستورالعمل های real 10 , real 8 , real 4 جهت رزرو حافظه های 4بایتی , 8 بایتی و 10 بایتی برای اعداد اعشاری مورد استفاده قرار میگیرند شکل کلی تعریف متغییر ها به صورت زیر است . Operand-name memory-amount initialize-value مقدار پیش فرض میزان حافظه مصرفی نام متغییر Data segment Example : 1byte CH 41h Number D word 10 Ch byte ‘A’ نام متغییر حاوی offset داده از ابتدای سگمنت داده ها میباشد بنابر این با نام متغییر میتوان به محتوای آن دسترسی داشت . 10 number 4byte offset D S Main Memory

  43. رشته ها : تعدادی کاراکتر پشت سره هم را یک رشته گویند بنابر این رشته یک توالی از کاراکتر هاست . STR byte “computer are fun “ , 0 STR 43h 6fh با توجه به جدول کد های اسکی . 6dh 1 1 ‘10’ Main memory

  44. آرایه ها : ساختمان داده ای از داده های هم نوع هستند که در حافظه به صورت متوالی ذخیره میشوند بنا بر این با یک اندیس میتوان به خانه های اندیس دسترسی داشت . Array word 10,50,63,74 array Char byte ‘ a’ , ‘l’ , ‘ I’ 10 Array[0] 50 Array[1] 63 Array[2] 74 Array[3] …. DS

  45. عملگر dup: این عملگر آرگومان خود را به تعداد مشخص در حافظه کپی میکند مثال با بکارگیری دستورالعمل زیر آرایه ای با نام numbers با 10 خانه 1 بایتی تعریف میشود (هر خانه یک عنصر آرایه مینامند ) که تمام خانه های آن خالی است . Number byte 10 dup( ? ) Null خالی B 10 = 1 * 10 = حافظه مصرفی حافظه مصرفی هر عنصر * تعداد عناصر = میزان حافظه مصرفی آرایه مثال ) دستورالعمل جهت تعریف رشته ی زیر را بنویسید . Stars byte 24 Dup (* ) , * *...* * * 25عدد مثال ) دستورالعمل جهت 10بار کپی کردن رشته ی زیر در یک متغییر بنویسید . ’) *****####¦¦¦¦¦ STR byte 10 dup ( ‘ ***** #### ¦¦¦¦¦ عملگر dup را میتوان به صورت تو در تو مورد است استفاده قرار داد . STR byte 10 (5 dup(‘¦’) , 4 dup (‘#’) , 5 dup (‘*’)

  46. ثبات های اشاره گر پشته : پردازنده ی 80x86 دارای 2 ثبات اشاره گر پشته با نام های EBP, ESP میباشد که ثبات های 32 بیتی هستند 16 بیت کم ارزش را sp مینامند که در پردازنده های قبل از 80x386 به عنوان اشاره گر پشته استفاده میشوند چنانکه پیشتر مطرح شد این اشاره گر میتواند به داده ی بالای پشته اشاره نماید (یا به خانه ی خالی بالای پشته اما در کامپیوتر 80x86 این چنین نیست .) همچنین با توجه به اینکه جهت رشد پشته در کامپیوتر 80x86 نزولی است معماری شماره 3 پشته در این پردازنده استفاده میشود . EBP یک اشاره گر مبنا است که امکان دستیابی به تمام خانه های پشته را فراهم مینماید . SS FFFF a FFFE b BP FFFD c d FFFC e FFFB SP stack

  47. ثبات های اشاره گر رشته : پردازنده ی 80x86 دارای 2 ثبات اشاره گر رشته با نام های EDI , ESI میباشد , ESI آدرس رشته مبدا و EDI آدرس رشته مقصد را در عملیات رشته ای نمایش میدهد .ثبات اشاره گر دستورالعمل EIP(Instruction Pointer) این ثبات اشاره گر در هر لحظه حاوی آدرس دستورالعمل بعدی برای اجرا میباشد . ثبات پرچم e flag : بیت های این ثبات در هر لحظه نشانگر شرایطی است که در اثر محاسبات رخ داده است به عنوان مثال سر ریزی , وجود یا عدم وجود رقم نقلی , منفی شدن نتیجه و ... . 31 12 11 10 9 8 7 6 5 4 3 2 1 0 DF SF ZF PF CF OF .... 16بیت CF = Carry flag ZF = Zero flag SF = Sign flag DF = Direct flag PF = Parity flag OF = Over flow flag ثبات های flag , ES , SS , DS , CS هیچ نامی ندارند EIP , SP از دید برنامه نویس دسترسی مستقیم به آنها ندارد و نمیتواند داده هارا در آنها نوشته یا از آنها بخواند . MOV EIP , 158 ;  error

  48. * در مدل حافظه ی flat سیستم عامل اعداد ثابتی را در ثبات های ES , SS , DS , CS قرار میدهد وهر نوع تلاش برای آدرس دهی خارج از محدوده موجب بروز خطا میشود . * آدرس های درون سگمنتی را OFFSET می نامند یعنی داده نباید وارد محیط CS (CODE SEGMENT) شود یا بر عکس چون موجب میشود سیستم هک شود و سیستم عامل جلوی آن را میگیرد . Main memory Codesegment CS Data segment DS داده مورد نظر program Stack segment SS Extra segment ES

  49. روش های آدرس دهی : ج5 در این نوع آدرس دهی داده به صراحت در دستورالعمل نوشته میشود . 1. بلا واسطه : 1. Example : MOV AX , 179 ADD CX , -74 در این نوع آدرس دهی داده درون یک ثبات قرار گرفته است که اسم ثبات در دستورالعمل ظاهر میشود . 2. ثباتی : 2. Example : MOV EAX , ECX ADD BX , 23 در این نوع آدرس دهی داده درون یک خانه ای از حافظه قرار دارد که آدرس موثر آن درون دستورالعمل ساخته میشود , به خاطر دارید که نام متغییر حاوی Offset داده در segment و با توجه به این که DS به عدد ثابتی اشاره میکند می توان به داده مورد نظر دسترسی داشت . 3. مستقیم : 3. Example : SUM WORD ? NUMBER DWORD 20 . . . MOX Codesegment Datasegment data variable offset Ds Stacksegment Extrasegment

More Related