Transcript Assembly_6

‫مهدی ایل بیگی‬
‫دانشگاه آزاد اسالمی دماوند‬
‫‪ .1‬روش سرکش ی (‪:)Polling‬‬
‫– تمام زمان ‪ CPU‬صرف بررس ی ابزارهای ‪ I/O‬می شود‪.‬‬
‫– طراحی ساده‬
‫– کارایی پایین‬
‫‪ .2‬روش وقفه (‪:)Interrupt‬‬
‫– ‪ CPU‬کارهای فعلی خود را ادامه می دهد‪.‬‬
‫– با آماده شدن یک داده در ‪ I/O‬یک سیگنال تولید می شود‪.‬‬
‫– باا دراافاس سایگنال ‪ CPU‬کاار فعلای خاود را قکاد کارده و باه ابازار ‪ I/O‬ساروی‬
‫می دهد‪.‬‬
‫‪2‬‬
‫•‬
‫ساایگناای اسااس از طاارف یااک اب ازار ااال ی یااا برلامااه در ااال ا ارا کااه سااروی‬
‫درخواسس می کند‪.‬‬
‫•‬
‫وقف ااه ه ااا برلام ااه ه ااای آم اااده ش ااده ای ه ا ا ند ک ااه ب ااا ال ااال دادن م ااادیری (عما ا‬
‫ال ااال توس اان ام اااو ال ااام م اای ش ااود) ب ااا آن ه ااا م اای ت ااوالیی کاره ااای ب وصو ا ا ی را‬
‫ال ام دهیی‪ .‬ضمنا م ادیر بازگشتی توسن وقفاه هاا لیاو توسان امااو هاا بااز مای گاردد‪.‬‬
‫پ یکی از راه های ارتماط بین برلامه لوی و وقفه ها اماو ها می باشند‪.‬‬
‫•‬
‫وقفااه هااا در اب اادای راه الاادازی کااامحیوتر در افیااه اصاالی م اایی ماای شااولد و بااا ای اااد‬
‫یااک ‪( Signal‬عالمااس) خااا بااه ا ارا در ماای آینااد همهنااین برلامااه لااوی ماای توالااد از‬
‫وقفااه هااا بااا ا ارای دس ا وراکی خااا اس ا فاده کنااد‪ .‬ماابال بااا فشااردن ک یااد ‪Print‬‬
‫‪ Screen‬وقف ااه ای اااد م اای گ ااردد ک ااه م وا اااو ص ااف ه لم ااا ب ااه اااپگر من ا م اای‬
‫شود‪ .‬و یا با فشردن ک یدهای ‪ Ctrl+Alt+Del‬کامحیوتر ‪ Reset‬می شود‪.‬‬
‫‪3‬‬
‫خا ا ی را‬
‫داخلی‪ :‬مالند وقفه ت یی بر صفر‬
‫سخس افزاری‬
‫خارجی‪ :‬وقفه هایی که توسن دس گاه های‬
‫ال ی فعال می شولد‬
‫الواع وقفه ها‬
‫سی‬
‫می‪ :‬مالند وقفه های سی ی عام‬
‫لرم افزاری‬
‫‪4‬‬
‫کاربر‪ :‬مالند وقفه هایی که در برلامه‬
‫کاربر فراخوانی می شولد‬
‫رخداد وقفه‬
INTERRUPT
SERVICE ROUTINE
JUMP TO ISR
‫برلامه در ال ا را‬
‫در افیه اصلی‬
Return from ISR
5
‫•‬
‫ه اار ابا ازار ااال ی لی اااز ب ااه س ااروی خ ااا خ ااود دارد ک ااه در روال پاس ااخگویی ب ااه وقف ااه‬
‫))‪ (Interrupt Service Routine (ISR‬مربوط به آن ارائه شده اسس‪.‬‬
‫•‬
‫کعداد ‪ ISR‬ها برابر با کعداد وقفه های تولید شده در سی ی اسس‪.‬‬
‫•‬
‫ه ا اار دسا ا ا گاه ا ااال ی با ا ارای ای ا اااد وقف ا ااه ی ا ااک خ ا اان درخواس ا ااس وقف ا ااه در اخ ی ا ااار دارد‬
‫()‪)Interrupt Request (IRQ‬‬
‫•‬
‫معموال در یک سی ی کعداد خکوط ‪ IRQ‬م دود اسس‪.‬‬
‫•‬
‫خکوط ‪ IRQ‬به ترتیب شماره گذاری شده الد‪.‬‬
‫•‬
‫در ص ااورکی ک ااه دو اب ازار ااال ی از ی ااک خ اان ‪ IRQ‬اس ا فاده کنن ااد ت ااداخ (‪)conflict‬‬
‫بو ود خواهد آمد‪.‬‬
‫‪6‬‬
‫‪ .1‬ذخیره ‪ CS:IP‬و ‪Flag‬ها در پش ه (برای لگهداری آدرس بازگشس)‬
‫‪ .2‬پرش به ‪ ISR‬مربوطه‬
‫‪ .3‬ذخیره تمامی ر ی ترها (اخ یاری)‬
‫‪PUSHF‬‬
‫‪ .4‬ا رای ‪ISR‬‬
‫‪ .5‬بازاابی تمامی ر ی ترها‬
‫(در صورو ذخیره سازی ر ی ترها)‬
‫‪ .6‬بازاابی ‪ CS:IP‬و ‪Flag‬ها از پش ه برای ادامه برلامه‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬
‫و در واقد بازگشس به برلامه اصلی‬
‫ا زاء یک ‪ISR‬‬
‫‪7‬‬
‫‪POPF‬‬
‫‪IRET‬‬
‫ف و درل ی ه ‪ 256‬روال پاسخگویی به این وقفه ها و ود دارد‪.‬‬
‫•‬
‫‪ 256‬وقفه م‬
‫•‬
‫هر وقفه دارای یک شماره اسس (از ‪ 0‬تا ‪.)255‬‬
‫•‬
‫با اس فاده از شماره وقفه سابروتین مورد لیر ال اب می شود‪.‬‬
‫•‬
‫وقفه ها با دس ور ‪ INT‬فراخوانی می شولد‪ .‬دس ورالعم ‪ INT‬دارای قالب زار اسس‪:‬‬
‫‪interrupt _ type‬‬
‫‪INT‬‬
‫•‬
‫قما از اینهاه خواسا ه باشایی از دسا ور ‪ INT‬اسا فاده کناایی با اتی یاک ساری از م اادیر اولیاه را باه‬
‫بعض ی از اماو ها بدهیی م صوصا اماو ‪ AH‬که شماره سروی وقفه در آن قرار می گیرد‪.‬‬
‫•‬
‫مبا ااال‪ :‬سا ااروی ‪ 1‬از وقفا ااه شا ااماره ‪ 21H‬یا ااک کرکتا اار را از صا ااف ه ک یا ااد خوالا ااده و درون ‪ AL‬ق ا ارار‬
‫خواهد داد کد زار برای فراخوانی این سروی اسس‪:‬‬
‫‪MOV AH, 1‬‬
‫‪21H‬‬
‫‪8‬‬
‫‪INT‬‬
‫•‬
‫‪IVT = Interrupt Vector Table‬‬
‫دوای شام ‪ 256‬رکورد برای ذخیره آدرس روال های پاسخگویی به وقفه‪.‬‬
‫•‬
‫•‬
‫هر رکورد اوی آدرس یک ‪ ISR‬اسس‪.‬‬
‫•‬
‫برای یافتن آدرس روتین پاسخگویی به وقفه شماره ‪ 10‬باید به رکورد دهی این دول مرا عه شود‪.‬‬
‫•‬
‫هر خاله باید آدرس ‪ 32‬بیتی هر ‪ ISR‬را که به صاورو ‪ seg:off‬ذخیاره شاده اساس لگهاداری لمایاد‪.‬‬
‫درل ی ه الدازه دول ‪ 256*4‬برابر با ‪ 1024‬بایس اسس‪.‬‬
‫•‬
‫این دول همواره در اب دای افیه عنی سگمنس شماره صفر قرار دارد‪.‬‬
‫•‬
‫آدرس شروع ‪0000 : 0000‬‬
‫•‬
‫مبال‪ :‬آدرس شروع روال پاسخگویی به وقفه شماره ‪ 32H‬کدام س؟‬
‫آدرس پایان ‪0000 : 03FF‬‬
‫‪32H * 4 = C8H‬‬
‫‪9‬‬
FC12:D4C2
INT 22H
ISR
INT 22
22h * 4
88h FC12:D4C2
IVT
10
‫وقفه های شماره ‪ 0‬تا ‪ 1Fh‬در پردازلده هاای ایت ا بارای اسا فاده خاود پردازلاده رزرو‬
‫شده الد‪ .‬مالند‪:‬‬
‫•‬
‫– وقفه شماره ‪ = 0‬ت یی بر صفر‬
‫– وقفه شماره ‪ = 1‬ا رای دس ور به دس ور )‪(TRACE‬‬
‫– وقفه شماره ‪BREAK POINT = 3‬‬
‫– وقفه شماره ‪OVERFLOW = 4‬‬
‫‪11‬‬
‫•‬
‫‪12‬‬
‫ایاان وقفااه دارای توابااد و سااروی‬
‫دول زار آورده شده اسس‪:‬‬
‫هااای فراواناای اسااس کااه نااد سااروی‬
‫مهاای از آن در‬
‫شماره تابع‬
‫عمل‬
‫پارامترهای انتقالی‬
‫پارامترهای برگشتی‬
‫‪AH = 1‬‬
‫گرفتن یک کرکتر‬
‫(با ظاهر شدن روی صفحه نمایش)‬
‫بدون پارامتر‬
‫کرکتر خوانده شده در ‪AL‬‬
‫‪AH = 2‬‬
‫نمایش دادن یک کرکتر‬
‫کرکتر مورد نظر در ‪DL‬‬
‫بدون پارامتر‬
‫‪AH = 5‬‬
‫چاپ یک کرکتر (ارسال به پرینتر)‬
‫کرکتر در ‪DL‬‬
‫بدون پارامتر‬
‫‪AH = 8‬‬
‫گرفتن یک کرکتر‬
‫(بدون ظاهر شدن روی صفحه نمایش)‬
‫بدون پارامتر‬
‫کرکتر در ‪AL‬‬
‫‪AH = 9‬‬
‫نمایش دادن یک رشته‬
‫‪ DS:DX‬برابر آدرس رشته‬
‫بدون پارامتر‬
‫= ‪AH‬‬
‫‪0A16‬‬
‫خواندن یک رشته‬
‫‪ DS:DX‬برابر آدرس بافر و‬
‫ماکزیمم تعداد کرکترها در‬
‫بافر‬
‫رشته مورد نظر در بافر‬
‫و‬
‫تعداد واقعی کرکترها در‬
‫بایت دوم بافر‬
‫= ‪AH‬‬
‫‪4C16‬‬
‫پایان دادن به یک فرآیند‬
‫بدون پارامتر‬
‫بدون پارامتر‬
‫•‬
‫سا ااروی ‪ 1‬ب ا ارای دراافا ااس یا ااک کرکتا اار از صا ااف ه ک یا ااد (با ااا شا اااهر شا اادن آن در صا ااف ه‬
‫لما ) می باشد‪.‬‬
‫•‬
‫بارای ایاان منیااور ‪ AH = 1‬قارار ماای دهاایی و ‪ INT 21h‬را فراخااوانی ماای کناایی‪.‬‬
‫سپ یک کرکتر از صف ه ک ید خوالده شده و در ‪ AL‬ذخیره می گردد‪.‬‬
‫‪MOV AH,1‬‬
‫می باشد‪INT 21H .‬‬
‫•‬
‫سروی ‪ 2‬برای لما‬
‫•‬
‫بارای ایاان منیااور کرکتاار مااورد لیاار را در ‪ DL‬و ‪ AH = 2‬قارار ماای دهاایی و ‪INT‬‬
‫‪ 21h‬را فراخوانی می کنیی‪.‬‬
‫دادن یک کرکتر در صف ه لما‬
‫’‪MOV DL, ‘M‬‬
‫‪MOV AH,2‬‬
‫‪INT 21H‬‬
‫‪13‬‬
‫•‬
‫•‬
‫سروی ‪ 9‬برای لما یک رش ه در صف ه لما می باشد‪.‬‬
‫برای این منیور اب دا آدرس رش ه را در ‪ DX‬قرار می دهیی و سپ ‪ AH = 9‬می لماییی و ‪INT‬‬
‫‪ 21h‬را فراخااوانی ماای کناایی‪ .‬در مبااال زااار رش ا ه ‪ Hello World‬لمااا داده ماای شااود و سااپ‬
‫مکان لما به اب دای سکر دید ال ال می یابد‪.‬‬
‫‪.Data‬‬
‫’‪STR DB “Hello World”, 10, 13, ‘$‬‬
‫‪.Code‬‬
‫‪LEA DX, STR‬‬
‫‪MOV AH, 9‬‬
‫‪INT 21H‬‬
‫•‬
‫له ااه‪ :1‬رش ا ه کااه ماای خااواهیی لمااا داده شااود بایااد بااا کرکتاار ’‪ ‘$‬خاتمااه یابااد‪ .‬در واقااد کرکتاار ’‪‘$‬‬
‫برای مشخص کردن التهای رش ه می باشد و خود آن لما داده لمی شود‪.‬‬
‫•‬
‫له ااه‪ :2‬ب ارای لم ااا رش ا ه در س ااکر دی ااد کرکت اار ‪ New-Line‬ک ااه ک ااد آن براب اار ‪ 10‬اس ااس را بای ااد‬
‫لما دهیی‪ .‬برای ال ال مکان لما به اب دای خن دید باید کرکتر ‪ Carriage-Return‬که کد‬
‫آن ‪ 13‬اسس را لما دهیی‪.‬‬
‫‪14‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫‪15‬‬
‫سروی ‪ 0Ah‬برای دراافس یک رش ه با داکثر طول ‪ n‬کرکتر می باشد‪.‬‬
‫ب ارای دراافااس یااک رش ا ه بااا طااول ااداکثر ‪ n‬کرکتاار اب اادا بایااد یااک بااافر (آرایااه از لااوع بایااس) بااا طااول‬
‫‪ n+2‬کعراف لماییی‪ .‬در خاله اول آرایه کعداد داکثر کرکتر مورد پذیرش را می لوی ایی (م ادار ‪)n‬‬
‫خاله دوم آرایه را برای ذخیره سازی کعداد کرکترهای دراافس شاده رزرو مای کنایی و از ‪ n‬خالاه بعادی‬
‫آرایه برای ذخیره سازی کرکترهای دراافتی اس فاده می لماییی‪.‬‬
‫له ااه‪ :1‬رش ا ه درا ااافتی توس اان ای اان س ااروی فاق ااد کرکت اار ’‪ ‘$‬م اای باش ااد درل ی ااه ب ارای لم ااا ای اان‬
‫رش ا ه لیاااز اسااس کااه بااه التهااای آن یااک ’‪ ‘$‬اضااافه لمااود‪ .‬از آل اییهااه دو خالااه اب اادایی بااافر رش ا ه را‬
‫بارای لگهااداری ااداکثر کعااداد کرکترهااا و کعااداد کرکترهااای دراااافتی رزرو کااردیی بایااد کرکتار ’‪ ‘$‬را در‬
‫خاله ای که الد آن برابر باا کعاداد کرکترهاای درااافتی بعاالوه ‪ 2‬اساس اضاافه لمااییی تاا ’‪ ‘$‬دقی اا‬
‫به التهای رش ه دراافتی الحاق شود‪.‬‬
‫له ااه‪ :2‬ب اادلی اینه ااه دو خال ااه اب اادایی ب ااافر رش ا ه را ب ارای لگه ااداری ااداکثر کع ااداد کرکتره ااا و کع ااداد‬
‫کرکترهااای دراااافتی رزرو شااده اسااس بایااد بارای لمااا رشا ه آدرس اب اادای بااافر را بعااالوه ‪ 2‬کاارده و در‬
‫‪ DX‬قررا دهیی و سپ رش ه را لما دهیی‪.‬‬
‫•‬
‫در ای اان مب ااال ی ااک رش ا ه ب ااا ط ااول‬
‫ا ا ا ا ا ا ااداکثر ‪ 20‬کرکتا ا ا ا ا ا ا اار از ورودی‬
‫درااف ا ااس و س ا ااپ مک ا ااان لم ا ااا ب ا ااه‬
‫اب ا اادای خا اان دیا ااد ال ا ااال ما اای‬
‫یابد و در ایان خان رشا ه درااافتی‬
‫لما داده می شود‪.‬‬
‫‪.Data‬‬
‫)' '(‪buffer db 20, ?, 20 dup‬‬
‫دریافت ت ت تتت رشت ت ت تتته بت ت ت تتا‬
‫استتتفاده از ستترویس‬
‫‪ 0Ah‬از وقف ت ت ت ت ت ت ت ت ت ت ت ت ت تته‬
‫‪21h‬‬
‫‪.Code‬‬
‫‪mov dx, offset buffer‬‬
‫‪mov ah, 0ah‬‬
‫‪int 21h‬‬
‫ال ااال مکااان لمااا بااه اب ادای‬
‫خاان دیااد بوساای ه لمااا‬
‫کرکتر ‪ 10‬و ‪ASCII 13‬‬
‫‪16‬‬
‫‪mov dl,10‬‬
‫‪mov ah, 2‬‬
‫‪int 21h‬‬
‫‪mov dl, 13‬‬
‫‪mov ah, 2‬‬
‫‪int 21h‬‬
‫صفر کردن ‪// BX‬‬
‫‪xor bx, bx‬‬
‫قرار دادن تعداد کرکترهای دریافتی در ‪// BL‬‬
‫]‪mov bl, buffer[1‬‬
‫اضافه کردن کرکتر ’‪ ‘$‬به انتهای رشته دریافتی ‪//‬‬
‫‘‪mov buffer[bx+2], '$‬‬
‫قرار دادن آدرس ابتدای رشته دریافتی در ‪mov dx, offset buffer + 2 // DX‬‬
‫چاپ رشته با استفاده از سرویس ‪ 9‬از وقفه ‪// 21h‬‬
‫‪mov ah, 9‬‬
‫‪int 21h‬‬
‫•‬
‫‪17‬‬
‫وشیفه ‪ :‬کار با صف ه لما‬
‫•‬
‫سروی‬
‫‪ :0h‬کعیین الس مالی ور‬
‫•‬
‫سروی‬
‫‪ :1h‬کعیین الدازه مکان لما‬
‫•‬
‫سروی‬
‫‪ :2h‬کعیین م‬
‫مکان لما‬
‫•‬
‫سروی‬
‫‪ :5h‬ال اب صف ه لما‬
‫•‬
‫سروی‬
‫‪ :9h‬لوشتن یک یا ند کرکتر با رلگ مشخص‬
‫•‬
‫سروی‬
‫‪ :0Ah‬لوشتن یک یا ند کرکتر‬
‫•‬
‫سروی‬
‫‪ :0Ch‬کغییر رلگ یک پیه‬
‫•‬
‫و ‪....‬‬
‫فعال (شماره صف ه در ‪)AL‬‬
‫•‬
‫این سروی‬
‫•‬
‫برای این منیور شماره مد گرافیکی مورد لیر را به ‪ 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‬‬
‫‪18‬‬
‫•‬
‫وشیفه این سروی‬
‫•‬
‫برای اس فاده از این سروی‬
‫•‬
‫بیاس هااای ‪ 0‬تااا ‪ 4‬از ‪ CH‬بارای کعیااین سااکر شاروع مکااان لمااا اسااس و بیااس هااای ‪ 5‬تااا ‪7‬‬
‫بیااس هااای ‪ Options‬ه ا ند‪ .‬ماابال اگاار بیااس ‪ 5‬یااک باشااد مکااان لمااا دیااده لماای شااود و‬
‫اگر این بیس ‪ 0‬باشد مکان لما شاهر می گردد‪.‬‬
‫•‬
‫‪ CL‬برای مشخص کردن سکر پایان مکان لما می باشد‪.‬‬
‫•‬
‫مبال‪ :‬قکعه کد زار مکان لما را بصورو مربعی از سکر ‪ 3‬تا ‪ 7‬لما‬
‫‪19‬‬
‫کعیین شک مکان لما )‪ (Cursor‬می باشد‪.‬‬
‫شماره آن را در ‪ AH‬قرار می دهیی‪.‬‬
‫‪MOV AH,1‬‬
‫‪MOV CH,3‬‬
‫‪MOV CL,7‬‬
‫‪INT 10H‬‬
‫می دهد‪.‬‬
‫وشیفه این سروی‬
‫•‬
‫کعیین موقعیس مکان لما در صف ه لما‬
‫می باشد‪.‬‬
‫– برای کعیین موقعیس مکان لما م دار ‪ AH‬را ‪ 2h‬قرار می دهیی‪.‬‬
‫– شماره سکر مکان لما را در ‪ DH‬قرار می دهیی‪.‬‬
‫– شماره س ون مکان لما را در ‪ DL‬قرار می دهیی‪.‬‬
‫– شماره صف ه فعال را در ‪ BH‬قرار می دهیی‪.‬‬
‫مبااال‪ :‬قکعااه کااد زااار مکااان لمااا را بااه سااکر ‪ 10‬و س ا ون ‪ 15‬در صااف ه شااماره صاافر ماای‬
‫برد‪.‬‬
‫•‬
‫‪20‬‬
‫‪MOV AH,2‬‬
‫‪MOV DH,10‬‬
‫‪MOV DL,15‬‬
‫‪MOV BH,0‬‬
‫‪INT 10H‬‬
‫وشیفه این سروی‬
‫•‬
‫•‬
‫ها لوشتن یک کرکتر در مکان مکان لما می باشد‪.‬‬
‫–‬
‫برای این منیور م دار ‪ AH‬را ‪ 9h‬یا ‪ 0Ah‬قرار می دهیی‪.‬‬
‫–‬
‫کرکتر مورد لیر را در ‪ AL‬قرار می دهیی‪.‬‬
‫–‬
‫رل ااگ کرکت اار را در ‪ BL‬ق ارار م اای ده اایی و کع ااداد ااا کرکت اار را در ‪ CX‬م اای گ ااذارای‪( .‬در س ااروی‬
‫‪ 0Ah‬ر ی تر ‪ BL‬را م دار دهی لمی کنیی)‬
‫–‬
‫شماره صف ه فعال را در ‪ BH‬قرار می دهیی‪.‬‬
‫مبال‪ :‬قکعه کد زار ‪ 10‬بار کرکتر ’‪ ‘T‬را با رلگ قرمز لما‬
‫‪21‬‬
‫می دهد‪.‬‬
‫‪MOV AH, 09‬‬
‫’‪MOV AL, ‘T‬‬
‫‪MOV BL, 6‬‬
‫‪MOV BH, 0‬‬
‫‪MOV CX, 10‬‬
‫‪INT 10H‬‬
‫وشیفه این سروی‬
‫•‬
‫–‬
‫کغییر رلگ یک پیه‬
‫در صف ه لما‬
‫برای این منیور م دار ‪ AH‬را ‪ 0Ah‬قرار می دهیی‪.‬‬
‫–‬
‫رلگ پیه‬
‫را در ‪ AL‬قرار می دهیی‪.‬‬
‫–‬
‫سکر پیه‬
‫مورد لیر را در ‪ DX‬قرار می دهیی و س ون آن را در ‪ CX‬می گذارای‪.‬‬
‫له ااه‪ :‬قم ا از اس ا فاده از ایاان وقفااه بایااد بااا سااروی‬
‫دهیی‪.‬‬
‫•‬
‫•‬
‫مبال‪ :‬قکعه کد زار پیه‬
‫‪22‬‬
‫اسس‪.‬‬
‫‪13h‬صااف ه مااورد لیاار را در مااد گرافیکاای ق ارار‬
‫سکر ‪ 20‬و س ون ‪ 10‬را با رلگ قرمز روشن لما‬
‫‪MOV AL, 12‬‬
‫‪MOV CX, 10‬‬
‫‪MOV DX, 20‬‬
‫‪MOV AH, 0CH‬‬
‫‪INT 10H‬‬
‫می دهد‪.‬‬
.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
23
.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
24
‫•‬
‫وظیفه‪ :‬کار با ‪Mouse‬‬
‫•‬
‫س تترویس ‪ :0h‬م اادار ده اای اولی ااه ‪ :Mouse‬ب ااا اسا ا فاده از ای اان وقف ااه اش اااره گ اار قمل اای‬
‫‪ Mouse‬م ف اای ش ااده و ‪ Mouse‬م اادار ده اای اولی ااه ش ااده و اش اااره گ اار ب ارای لم ااا‬
‫آماده می شود‪.‬‬
‫•‬
‫سرویس ‪ :1h‬لما‬
‫•‬
‫سرویس ‪ :2h‬م فی کردن اشاره گر ‪Mouse‬‬
‫•‬
‫ستترویس ‪ :3h‬گاارفتن مکااان و لااوع ک یااک ‪ :Mouse‬بااا اس ا فاده از ایاان سااروی مکااان‬
‫اشاره گر ‪ Mouse‬عنی طاول و عارا اشااره گار بترتیاب در ‪ CX‬و ‪ DX‬قارار داده مای‬
‫شاود (‪ .)CX = x, DX = y‬همهناین اگار ک یاد ا ‪ Mouse‬فشارده شاده باشاد‬
‫‪ BX = 1‬مای شاود (‪ )Left Click‬اگار ک یاد راساس ‪ Mouse‬فشارده شاده باشاد‬
‫‪ BX = 2‬ماای شاود (‪ )Right Click‬و اگاار هار دو ک یاد فشارده شااود ‪BX = 3‬‬
‫خواهد شد‪.‬‬
‫‪25‬‬
‫اشاره گر ‪Mouse‬‬
‫•‬
‫اس فاده از ‪ mouse‬در ‪:Text Mode‬‬
‫در قکعااه کااد م ابا اب اادا بااا یااک کااردن بیاس‬
‫پ ا اان ی ‪ ch‬و فراخ ا ااوانی س ا ااروی ‪ 1‬از وقف ا ااه‬
‫‪ 10h‬مکان لمای متن م فی می گردد‪.‬‬
‫‪.Code‬‬
‫‪; hide text cursor:‬‬
‫‪mov ch, 32‬‬
‫‪mov ah, 1‬‬
‫‪int 10h‬‬
‫‪; reset mouse and get its status:‬‬
‫س ا ااپ ب ا ااا فراخ ا ااوانی س ا ااروی ‪ 0‬از وقف ا ااه‬
‫‪mov ax, 0‬‬
‫‪ Mouse 33h‬را م اادار دهاای اولیااه کاارده و‬
‫‪int 33h‬‬
‫در ادامااه بااا سااروی ‪ 1‬از همااین وقفااه اشاااره‬
‫گر ‪ Mouse‬را لما می دهایی‪ .‬در اداماه باا‬
‫فراخ ا ااوانی س ا ااروی ‪ 1‬از وقف ا ااه ‪ 21h‬من ی ا اار‬
‫فش اارده ش اادن ی ااک ک ی ااد از ص ااف ه ک ی ااد م اای‬
‫شااوای و سااپ بااا سااروی ‪ 2‬از وقفااه ‪33h‬‬
‫اشاره گر ‪ Mouse‬را م فی می کنیی‪.‬‬
‫‪26‬‬
‫‪; 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‬در ‪:Graphic Mode‬‬
‫•‬
‫در قکعا ااه کا ااد م اب ا ا اب ا اادا م ا اادار ‪ 13H‬را با ااه ‪ AL‬ال ا ااال ما اای‬
‫دهاایی و بااا فراخااوانی سااروی ‪ 0‬از وقفااه ‪ 10h‬لما شااگر را بااه م ااد‬
‫گرافیکی می برای‪.‬‬
‫•‬
‫سااپ بااا فراخااوانی سااروی ‪ 1‬از وقفااه ‪ Mouse 33h‬را لمااا‬
‫داده و در ادام ااه ب ااا فراخ ااوانی س ااروی ‪ 3‬از وقف ااه ‪ 33h‬من ی اار ی ااک‬
‫ک ی ا ااک ‪ Mouse‬م ا اای ش ا ااوای‪ .‬درص ا ااورکی ک ا ااه ک ی ا ااد ا ا ا ‪Mouse‬‬
‫فشاارده شااده باشااد (‪ )BX == 1‬بااه بر ااب ‪ L2‬ب ارای ال ااام‬
‫عم یاااو دلخااواه پاارش ماای کناایی‪ .‬اگاار ک یااد راسااس ‪ Mouse‬فشاارده‬
‫شااده باشااد بااه بر ااب ‪ Quit‬بارای خاتمااه کااار پاارش ماای لماااییی در‬
‫غیاار ایاان صااورو بااه بر ااب ‪ L‬پاارش کاارده و کااار را بصااورو تهاراری‬
‫ادامه می دهیی‪.‬‬
‫‪27‬‬
‫‪.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‬‬