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