1 / 28

زبان های ماشین و برنامه سازی سیستم

زبان های ماشین و برنامه سازی سیستم. وقفه ها. مهدی ایل بیگی دانشگاه آزاد اسلامی دماوند. ارتباط CPU با ابزارهای جانبی. روش سرکشی ( Polling ): تمام زمان CPU صرف بررسی ابزارهای I/O می شود. طراحی ساده کارایی پایین روش وقفه ( Interrupt ): CPU کارهای فعلی خود را ادامه می دهد.

stacie
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. ارتباط CPU با ابزارهای جانبی • روش سرکشی (Polling): • تمام زمان CPU صرف بررسی ابزارهای I/O می شود. • طراحی ساده • کارایی پایین • روش وقفه (Interrupt): • CPU کارهای فعلی خود را ادامه می دهد. • با آماده شدن یک داده در I/O یک سیگنال تولید می شود. • با دریافت سیگنال، CPU کار فعلی خود را قطع کرده و به ابزار I/Oسرویس می دهد.

  3. وقفه (Interrupt) • سیگنالی است از طرف یک ابزار جانبی یا برنامه درحال اجرا که سرویس خاصی را درخواست می کند. • وقفه ها، برنامه های آماده شده ای هستند که با انتقال دادن مقادیری (عمل انتقال، توسط ثبات انجام می شود) با آن ها، می توانیم کارهای بخوصوصی را انجام دهیم. ضمنا مقادیر بازگشتی توسط وقفه ها نیز توسط ثبات ها، باز می گردد. پس یکی از راه های ارتباط بین برنامه نویس و وقفه ها، ثبات ها می باشند. • وقفه ها در ابتدای راه اندازی کامپیوتر، در حافظه اصلی مقیم می شوند و با ایجاد یک Signal (علامت) خاص، به اجرا در می آیند همچنین برنامه نویس می تواند از وقفه ها، با اجرای دستوراتی خاص استفاده کند. مثلا با فشردن کلید Print Screen وقفه ایجاد می گردد که محتویات صفحه نمایش به چاپگر منتقل می شود. و یا با فشردن کلیدهای Ctrl+Alt+Del کامپیوتر Reset می شود.

  4. وقفه (Interrupt) داخلی: مانند وقفه تقسیم بر صفر سخت افزاری خارجی: وقفه هایی که توسط دستگاه های جانبی فعال می شوند انواع وقفه ها سیستمی: مانند وقفه های سیستم عامل نرم افزاری کاربر: مانند وقفه هایی که در برنامه کاربر فراخوانی می شوند

  5. روال فراخوانی وقفه INTERRUPT SERVICE ROUTINE رخداد وقفه JUMP TO ISR برنامه در حال اجرا در حافظه اصلی Return from ISR

  6. روال پاسخگویی به وقفه • هر ابزار جانبی نیاز به سرویس خاص خود دارد که در روال پاسخگویی به وقفه (Interrupt Service Routine (ISR)) مربوط به آن ارائه شده است. • تعداد ISR ها برابر با تعداد وقفه های تولید شده در سیستم است. • هر دستگاه جانبی برای ایجاد وقفه یک خط درخواست وقفه در اختیار دارد (Interrupt Request (IRQ)) • معمولا در یک سیستم تعداد خطوط IRQ محدود است. • خطوط IRQ به ترتیب شماره گذاری شده اند. • در صورتی که دو ابزار جانبی از یک خط IRQ استفاده کنند تداخل(conflict) بوجود خواهد آمد.

  7. مراحل فراخوانی تا خاتمه وقفه • ذخیره CS:IP و Flagها در پشته (برای نگهداری آدرس بازگشت) • پرش به ISR مربوطه • ذخیره تمامی رجیسترها (اختیاری) • اجرای ISR • بازیابی تمامی رجیسترها (در صورت ذخیره سازی رجیسترها) • بازیابی CS:IP و Flagها از پشته برای ادامه برنامه و در واقع بازگشت به برنامه اصلی . . . PUSHF POPF • اجزاء یک ISR IRET

  8. وقفه های سیستم • 256 وقفه مختلف و درنتیجه 256 روال پاسخگویی به این وقفه ها، وجود دارد. • هر وقفه دارای یک شماره است (از 0 تا 255). • با استفاده از شماره وقفه سابروتین مورد نظر انتخاب می شود. • وقفه ها با دستور INT فراخوانی می شوند. دستورالعمل INT دارای قالب زیر است: INT interrupt _ type • قبل از اینکه خواسته باشیم از دستور INT استفاده کنیم بایستی یک سری از مقادیر اولیه را به بعضی از ثبات ها بدهیم، مخصوصا ثبات AH که شماره سرویس وقفه در آن قرار می گیرد. • مثال: سرویس 1 از وقفه شماره 21H یک کرکتر را از صفحه کلید خوانده و درون AL قرار خواهد داد، کد زیر برای فراخوانی این سرویس است: MOV AH, 1 INT 21H

  9. جدول بردار وقفه (IVT) • IVT = Interrupt Vector Table • جدولی شامل 256 رکورد برای ذخیره آدرس روال های پاسخگویی به وقفه. • هر رکورد حاوی آدرس یک ISR است. • برای یافتن آدرس روتین پاسخگویی به وقفه شماره 10 باید به رکورد دهم این جدول مراجعه شود. • هر خانه باید آدرس 32 بیتی هر ISR را که به صورت seg:off ذخیره شده است نگهداری نماید. درنتیجه اندازه جدول 4*256 برابر با 1024 بایت است. • این جدول همواره در ابتدای حافظه یعنی سگمنت شماره صفر قرار دارد. • آدرس شروع 0000 : 0000 آدرس پایان 0000 : 03FF • مثال: آدرس شروع روال پاسخگویی به وقفه شماره 32H کدامست؟ 32H * 4 = C8H

  10. نحوه دسترسی به ISR یک وقفه FC12:D4C2 ISR INT 22 INT 22H 22h * 4 FC12:D4C2 88h IVT

  11. وقفه های رزرو شده • وقفه های شماره 0 تا 1Fh در پردازنده های اینتل برای استفاده خود پردازنده رزرو شده اند. مانند: • وقفه شماره 0 = تقسیم بر صفر • وقفه شماره 1 = اجرای دستور به دستور (TRACE) • وقفه شماره 3 = BREAK POINT • وقفه شماره 4 = OVERFLOW

  12. وقفه شماره 21H • این وقفه دارای توابع و سرویس های فراوانی است که چند سرویس مهم از آن در جدول زیر آورده شده است:

  13. وقفه شماره 21H سرویس 1, 2 • سرویس1 برای دریافت یک کرکتر از صفحه کلید (با ظاهر شدن آن در صفحه نمایش) می باشد. • برای این منظور AH = 1 قرار می دهیم و INT 21h را فراخوانی می کنیم. سپس یک کرکتر از صفحه کلید خوانده شده و در AL ذخیره می گردد. • سرویس2 برای نمایش دادن یک کرکتر در صفحه نمایش می باشد. • برای این منظور کرکتر مورد نظر را در DL و AH = 2 قرار می دهیم و INT 21h را فراخوانی می کنیم. MOV AH,1 INT 21H MOV DL, ‘M’ MOV AH,2 INT 21H

  14. وقفه شماره 21H سرویس 9 • سرویس9 برای نمایش یک رشته در صفحه نمایش می باشد. • برای این منظور ابتدا آدرس رشته را در DX قرار می دهیم و سپس AH = 9 می نماییم و INT 21h را فراخوانی می کنیم. در مثال زیر رشته Hello World نمایش داده می شود و سپس مکان نما به ابتدای سطر جدید انتقال می یابد. • نکته1: رشته که می خواهیم نمایش داده شود باید با کرکتر ‘$’ خاتمه یابد. در واقع کرکتر ‘$’ برای مشخص کردن انتهای رشته می باشد و خود آن نمایش داده نمی شود. • نکته2: برای نمایش رشته در سطر جدید کرکتر New-Line که کد آن برابر 10 است را باید نمایش دهیم. برای انتقال مکان نما به ابتدای خط جدید باید کرکتر Carriage-Return که کد آن 13 است را نمایش دهیم. • .Data • STR DB “Hello World”, 10, 13, ‘$’ • .Code • LEA DX, STR • MOV AH, 9 • INT 21H

  15. وقفه شماره 21H سرویس 0Ah • سرویس 0Ah برای دریافت یک رشته با حداکثر طول n کرکتر، می باشد. • برای دریافت یک رشته با طول حداکثر n کرکتر، ابتدا باید یک بافر (آرایه از نوع بایت) با طول n+2 تعریف نماییم. در خانه اول آرایه تعداد حداکثر کرکتر مورد پذیرش را می نویسیم (مقدارn )، خانه دوم آرایه را برای ذخیره سازی تعداد کرکترهای دریافت شده رزرو می کنیم و از n خانه بعدی آرایه برای ذخیره سازی کرکترهای دریافتی استفاده می نماییم. • نکته1: رشته دریافتی توسط این سرویس فاقد کرکتر ‘$’ می باشد، درنتیجه برای نمایش این رشته نیاز است که به انتهای آن یک ‘$’ اضافه نمود. از آنجاییکه دو خانه ابتدایی بافر رشته را برای نگهداری حداکثر تعداد کرکترها و تعداد کرکترهای دریافتی رزرو کردیم، باید کرکتر ‘$’ را در خانه ای که اندیس آن برابر با تعداد کرکترهای دریافتی بعلاوه 2 است اضافه نماییم تا ‘$’ دقیقا به انتهای رشته دریافتی الحاق شود. • نکته2: بدلیل اینکه دو خانه ابتدایی بافر رشته را برای نگهداری حداکثر تعداد کرکترها و تعداد کرکترهای دریافتی رزرو شده است باید برای نمایش رشته آدرس ابتدای بافر را بعلاوه 2 کرده و در DX قررا دهیم و سپس رشته را نمایش دهیم.

  16. .Data • buffer db 20, ?, 20 dup(' ') • .Code • movdx, offset buffer • mov ah, 0ah • int 21h • mov dl,10 • mov ah, 2 • int 21h • mov dl, 13 • mov ah, 2 • int 21h • xorbx, bx • movbl, buffer[1] • mov buffer[bx+2], '$‘ • movdx, offset buffer + 2 • mov ah, 9 • int 21h مثال • در این مثال یک رشته با طول حداکثر 20 کرکتر از ورودی دریافت و سپس مکان نما به ابتدای خط جدید انتقال می یابد و در این خط رشته دریافتی نمایش داده می شود. • دریافت رشته با استفاده از سرویس 0Ah از وقفه 21h • انتقال مکان نما به ابتدای خط جدید بوسیله نمایش کرکتر 10 و 13 ASCII • صفر کردن BX // • قرار دادن تعداد کرکترهای دریافتی در BL // • اضافه کردن کرکتر ‘$’ به انتهای رشته دریافتی // • قرار دادن آدرس ابتدای رشته دریافتی در DX // • چاپ رشته با استفاده از سرویس 9 از وقفه 21h //

  17. وقفه شماره 10H • وظیفه : کار با صفحه نمایش • سرویس 0h: تعیین حالت مانیتور • سرویس 1h: تعیین اندازه مکان نما • سرویس 2h: تعیین محل مکان نما • سرویس 5h: انتخاب صفحه نمایش فعال (شماره صفحه در AL) • سرویس 9h: نوشتن یک یا چند کرکتر با رنگ مشخص • سرویس 0Ah: نوشتن یک یا چند کرکتر • سرویس 0Ch: تغییر رنگ یک پیکسل • و ....

  18. وقفه شماره 10H سرویس 0h • این سرویس برای تعیین مد گرافیکی صفحه نمایش می باشد. • برای این منظور شماره مد گرافیکی مورد نظر را به AL انتقال می دهیم. • به عنوان مثال: 00h = text mode, 40x25. 16 colors. 8 pages. 03h = text mode. 80x25. 16 colors. 8 pages. 13h = graphical mode. 40x25. 256 colors. 320x200 pixels. 1 page • مثال: برای تعیین مد گرافیکی با 256 رنگ باید قطعه کد زیر را بنویسیم. MOV AH,0 MOV AL,13H INT 10H

  19. وقفه شماره 10H سرویس 1h • وظیفه این سرویس تعیین شکل مکان نما (Cursor) می باشد. • برای استفاده از این سرویس شماره آن را در AH قرار می دهیم. • بیت های 0 تا 4 از CH برای تعیین سطر شروع مکان نما است و بیت های 5 تا 7 بیت های Options هستند. مثلا اگر بیت 5 یک باشد مکان نما دیده نمی شود و اگر این بیت 0 باشد مکان نما ظاهر می گردد. • CL برای مشخص کردن سطر پایان مکان نما می باشد. • مثال: قطعه کد زیر مکان نما را بصورت مربعی از سطر 3 تا 7 نمایش می دهد. MOV AH,1 MOV CH,3 MOV CL, 7 INT 10H

  20. وقفه شماره 10H سرویس 2h • وظیفه این سرویس تعیین موقعیت مکان نما در صفحه نمایش می باشد. • برای تعیین موقعیت مکان نما مقدار AH را 2h قرار می دهیم. • شماره سطر مکان نما را در DH قرار می دهیم. • شماره ستون مکان نما را در DL قرار می دهیم. • شماره صفحه فعال را در BH قرار می دهیم. • مثال: قطعه کد زیر مکان نما را به سطر 10 و ستون 15 در صفحه شماره صفر می برد. MOV AH,2 MOV DH,10 MOV DL,15 MOV BH,0 INT 10H

  21. وقفه شماره 10H سرویس 9h, 0Ah • وظیفه این سرویس ها نوشتن یک کرکتر در مکان مکان نما می باشد. • برای این منظور مقدار AH را 9h یا 0Ah، قرار می دهیم. • کرکتر مورد نظر را در AL قرار می دهیم. • رنگ کرکتر را در BL قرار می دهیم و تعداد چاپ کرکتر را در CX می گذاریم. (در سرویس 0Ah رجیستر BL را مقدار دهی نمی کنیم) • شماره صفحه فعال را در BH قرار می دهیم. • مثال: قطعه کد زیر 10 بار کرکتر ‘T’ را با رنگ قرمز نمایش می دهد. MOV AH, 09 MOV AL, ‘T’ MOV BL, 6 MOV BH, 0 MOV CX, 10 INT 10H

  22. وقفه شماره 10H سرویس 0Ch • وظیفه این سرویس تغییر رنگ یک پیکسل در صفحه نمایش است. • برای این منظور مقدار AH را 0Ah قرار می دهیم. • رنگ پیکسل را در AL قرار می دهیم. • سطر پیکسل مورد نظر را در DX قرار می دهیم و ستون آن را در CX می گذاریم. • نکته: قبل از استفاده از این وقفه باید با سرویس 13hصفحه مورد نظر را در مد گرافیکی قرار دهیم. • مثال: قطعه کد زیر پیکسل سطر 20 و ستون 10 را با رنگ قرمز روشن نمایش می دهد. MOV AL, 12 MOV CX, 10 MOV DX, 20 MOV AH, 0CH INT 10H

  23. .MODEL SMALL .STACK 64 ;----------------------------------------------- .CODE MAIN PROC FAR MOV AX,@data MOV DS,AX MOV AH,0 MOV AL,13H INT 10H MOV CX,255 L1: MOV AH,0CH MOV AL, CL MOV DX,50 INT 10H LOOP L1 MOV AH,01 INT 21H ;----------------------------------------------- MOV AX,4C00H ;10-End of INT 21H ;11- processing MAIN ENDP ; End of procedure END MAIN ; End of program مثال1: برنامه ای که یک طیف رنگی در سطر 50 ایجاد می نماید

  24. .CODE • MAIN PROC FAR • MOV AX,@data • MOV DS,AX • MOV AH,0 • MOV AL,13H • INT 10H • MOV CX,50 • L2: PUSH CX • MOV M,CX • MOV CX,255 • L1: MOV AH,0CH • MOV AL, CL • MOV DX,M • INT 10H • LOOP L1 • POP CX • LOOP L2 • MOV AH,01 • INT 21H مثال2: برنامه ای که یک طیف رنگی در 50 سطر ایجاد می نماید

  25. وقفه شماره 33H • وظیفه: کار با Mouse • سرویس 0h: مقدار دهی اولیه Mouse: با استفاده از این وقفه اشاره گر قبلی Mouse مخفی شده و Mouse مقدار دهی اولیه شده و اشاره گر برای نمایش آماده می شود. • سرویس 1h: نمایش اشاره گر Mouse • سرویس 2h: مخفی کردن اشاره گر Mouse • سرویس 3h: گرفتن مکان و نوع کلیک Mouse: با استفاده از این سرویس مکان اشاره گر Mouse یعنی طول و عرض اشاره گر بترتیب در CX و DX قرار داده می شود (CX = x, DX = y). همچنین اگر کلید چپ Mouse فشرده شده باشد BX = 1 می شود (Left Click)، اگر کلید راست Mouse فشرده شده باشد BX = 2 می شود (Right Click) و اگر هر دو کلید فشرده شود BX = 3 خواهد شد.

  26. مثال1 برای کار با Mouse • .Code • ; hide text cursor: • movch, 32 • mov ah, 1 • int 10h • ; reset mouse and get its status: • mov ax, 0 • int 33h • ; display mouse cursor: • mov ax, 1 • int 33h • ; wait for any key.... • mov ah, 1 • int 21h • ; Hide mouse cursor: • mov ax, 2 • int 33h • استفاده از mouse در Text Mode: در قطعه کد مقابل، ابتدا با یک کردن بیت پنجم ch و فراخوانی سرویس 1 از وقفه 10h، مکان نمای متن مخفی می گردد. سسپس با فراخوانی سرویس 0 از وقفه 33h، Mouse را مقدار دهی اولیه کرده و در ادامه با سرویس 1 از همین وقفه اشاره گر Mouse را نمایش می دهیم. در ادامه با فراخوانی سرویس 1 از وقفه 21h منتظر فشرده شدن یک کلید از صفحه کلید می شویم و سپس با سرویس 2 از وقفه 33h، اشاره گر Mouse را مخفی می کنیم.

  27. مثال2 برای کار با Mouse • .Code • MOV AL,13H • MOV AH,0 • INT 10H • MOV AX, 1 • INT 33H • L: • MOV AX, 3 • INT 33H • CMP BX, 1 • JE L2 • CMP BX, 2 • JE QUIT • JNE L • استفاده از Mouse در Graphic Mode: • در قطعه کد مقابل، ابتدا مقدار 13H را به AL انتقال می دهیم و با فراخوانی سرویس 0 از وقفه 10h، نمایشگر را به مد گرافیکی می بریم. • سپس با فراخوانی سرویس 1 از وقفه 33h، Mouse را نمایش داده و در ادامه با فراخوانی سرویس 3 از وقفه 33h منتظر یک کلیک Mouse می شویم. درصورتی که کلید چپ Mouse فشرده شده باشد (BX == 1) به برچسب L2 برای انجام عملیات دلخواه، پرش می کنیم. اگر کلید راست Mouse فشرده شده باشد به برچسب Quit برای خاتمه کار پرش می نماییم، در غیر این صورت به برچسب L پرش کرده و کار را بصورت تکراری ادامه می دهیم.

  28. ؟

More Related